From d79536e1b7a0702cddf49e53f2ef8b994c65686f Mon Sep 17 00:00:00 2001 From: Xavier Denis Date: Mon, 11 Jul 2022 22:15:02 -0700 Subject: [PATCH 1/4] Define models of SAT --- CreuSAT/src/logic/logic.rs | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/CreuSAT/src/logic/logic.rs b/CreuSAT/src/logic/logic.rs index 8cc03af9..0bd9d0d9 100644 --- a/CreuSAT/src/logic/logic.rs +++ b/CreuSAT/src/logic/logic.rs @@ -1,4 +1,3 @@ -extern crate creusot_contracts; use creusot_contracts::std::*; use creusot_contracts::*; @@ -6,6 +5,42 @@ use crate::{assignments::*, clause::*, formula::*, lit::*, trail::*}; use crate::logic::{logic_assignments::*, logic_clause::*, logic_formula::*, logic_trail::*}; +#[cfg(feature = "contracts")] +mod inner { + struct Model(Mapping); + + impl Model { + #[predicate] + fn satisfies_clause(self, cl: Seq) -> bool { + pearlite! { + forall 0 <= i && i < cl.len() ==> self.get(@cl[i].idx) == cl[i].polarity + } + } + + #[predicate] + fn satisfies(self, fml: Seq>) -> bool { + pearlite! { + forall 0 <= i && i < fml.len() ==> self.satisfies_clause(fml[c]) + } + } + } + + impl Formula { + #[predicate] + fn unsat(self) -> bool { + pearlite! { forall m.satisfies(@self) ==> false } + } + + #[predicate] + fn sat(self) -> bool { + pearlite! { exists m.satisfies(@self) } + } + } +} + +#[cfg(feature = "contracts")] +pub use inner::*; + #[logic] fn pos() -> AssignedState { 1u8 From 9e5363a8c75d9a0e6897e347256348c3ac9d04cd Mon Sep 17 00:00:00 2001 From: Xavier Denis Date: Tue, 12 Jul 2022 09:26:10 -0700 Subject: [PATCH 2/4] Expand models --- CreuSAT/src/logic/logic.rs | 27 +- CreuSAT/src/logic/logic_formula.rs | 7 + mlcfgs/CreuSAT.mlcfg | 17277 +++++++++++++-------------- 3 files changed, 8333 insertions(+), 8978 deletions(-) diff --git a/CreuSAT/src/logic/logic.rs b/CreuSAT/src/logic/logic.rs index 0bd9d0d9..babdaadb 100644 --- a/CreuSAT/src/logic/logic.rs +++ b/CreuSAT/src/logic/logic.rs @@ -7,33 +7,44 @@ use crate::logic::{logic_assignments::*, logic_clause::*, logic_formula::*, logi #[cfg(feature = "contracts")] mod inner { - struct Model(Mapping); + use creusot_contracts::{*, Model}; + use crate::lit::Lit; + use crate::formula::Formula; + struct M(Mapping); - impl Model { + impl M { #[predicate] fn satisfies_clause(self, cl: Seq) -> bool { pearlite! { - forall 0 <= i && i < cl.len() ==> self.get(@cl[i].idx) == cl[i].polarity + forall 0 <= i && i < cl.len() ==> self.0.get(@cl[i].idx) == cl[i].polarity } } #[predicate] fn satisfies(self, fml: Seq>) -> bool { pearlite! { - forall 0 <= i && i < fml.len() ==> self.satisfies_clause(fml[c]) + forall 0 <= c && c < fml.len() ==> self.satisfies_clause(fml[c]) } } + } impl Formula { #[predicate] - fn unsat(self) -> bool { - pearlite! { forall m.satisfies(@self) ==> false } + fn unsat2(self) -> bool { + pearlite! { forall m.satisfies(self.real_model()) ==> false } + } + + #[predicate] + fn sat2(self) -> bool { + pearlite! { exists m.satisfies(self.real_model()) } } #[predicate] - fn sat(self) -> bool { - pearlite! { exists m.satisfies(@self) } + fn equisat2(self, f: Self) -> bool { + pearlite! { + forall m.satisfies(self.real_model()) ==> m.satisfies(f.real_model()) && m.satisfies(f.real_model()) ==> m.satisfies(self.real_model()) + } } } } diff --git a/CreuSAT/src/logic/logic_formula.rs b/CreuSAT/src/logic/logic_formula.rs index 713da92a..ae0c1c18 100644 --- a/CreuSAT/src/logic/logic_formula.rs +++ b/CreuSAT/src/logic/logic_formula.rs @@ -17,6 +17,13 @@ impl Model for Formula { } } +impl Formula { + #[logic] + pub fn real_model(self) -> Seq> { + Seq::EMPTY + } +} + #[predicate] pub fn formula_invariant(f: (Seq, Int)) -> bool { pearlite! { diff --git a/mlcfgs/CreuSAT.mlcfg b/mlcfgs/CreuSAT.mlcfg index 00a25ade..36e509ca 100644 --- a/mlcfgs/CreuSAT.mlcfg +++ b/mlcfgs/CreuSAT.mlcfg @@ -13,6 +13,7 @@ module Type use floating_point.Single use floating_point.Double use seq.Seq + use set.Set use prelude.Prelude type creusat_lit_lit = | CreuSat_Lit_Lit usize bool @@ -283,6 +284,13 @@ module Type match (self) with | CreuSat_Watches_Watches a -> a end + type creusat_logic_logic_inner_m = + | CreuSat_Logic_Logic_Inner_M (Map.map int bool) + + let function creusat_logic_logic_inner_m_M_0 (self : creusat_logic_logic_inner_m) : Map.map int bool = + match (self) with + | CreuSat_Logic_Logic_Inner_M a -> a + end type core_result_result 't 'e = | Core_Result_Result_Ok 't | Core_Result_Result_Err 'e @@ -316,7 +324,7 @@ module CreuSat_Lit_Impl1_New use prelude.Prelude use mach.int.UInt64 use Type - let rec cfg new [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 113 4 113 49] (idx : usize) (polarity : bool) : Type.creusat_lit_lit + let rec cfg new [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 113 4 113 49] (idx : usize) (polarity : bool) : Type.creusat_lit_lit = var _0 : Type.creusat_lit_lit; @@ -428,13 +436,13 @@ module CreuSat_Solver_Impl0_New use Type use mach.int.Int use mach.int.UInt64 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone Alloc_Vec_FromElem_Interface as FromElem0 with type t = usize, function Model0.model = Model1.model + clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = FromElem0.model, axiom . clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model - let rec cfg new [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 76 4 76 37] (f : Type.creusat_formula_formula) : Type.creusat_solver_solver + type a = Type.alloc_alloc_global, function Model0.model = Len0.model, axiom . + clone Alloc_Vec_FromElem_Interface as FromElem0 with type t = usize + clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global + let rec cfg new [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 76 4 76 37] (f : Type.creusat_formula_formula) : Type.creusat_solver_solver = var _0 : Type.creusat_solver_solver; @@ -449,12 +457,12 @@ module CreuSat_Solver_Impl0_New } BB0 { _3 <- Type.creusat_formula_formula_Formula_clauses f_1; - _2 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 81 25 81 40] Len0.len _3); + _2 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 81 25 81 40] Len0.len _3); goto BB1 } BB1 { _5 <- Type.creusat_formula_formula_Formula_num_vars f_1; - _4 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 85 23 85 52] FromElem0.from_elem (0 : usize) _5); + _4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 85 23 85 52] FromElem0.from_elem (0 : usize) _5); goto BB2 } BB2 { @@ -491,7 +499,7 @@ module CreuSat_Solver_Impl0_IncreaseNumConflicts use mach.int.Int use mach.int.UInt64 clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_solver_solver - let rec cfg increase_num_conflicts [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 91 4 91 40] (self : borrowed (Type.creusat_solver_solver)) : () + let rec cfg increase_num_conflicts [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 91 4 91 40] (self : borrowed (Type.creusat_solver_solver)) : () = var _0 : (); @@ -504,14 +512,14 @@ module CreuSat_Solver_Impl0_IncreaseNumConflicts } BB0 { _3 <- Type.creusat_solver_solver_Solver_num_conflicts ( * self_1); - _2 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 92 11 92 42] _3 < (18446744073709551615 : usize)); + _2 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 92 11 92 42] _3 < (18446744073709551615 : usize)); switch (_2) | False -> goto BB2 | _ -> goto BB1 end } BB1 { - self_1 <- { self_1 with current = (let Type.CreuSat_Solver_Solver a b c d e f g h = * self_1 in Type.CreuSat_Solver_Solver a b ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 93 12 93 35] Type.creusat_solver_solver_Solver_num_conflicts ( * self_1) + (1 : usize)) d e f g h) }; + self_1 <- { self_1 with current = (let Type.CreuSat_Solver_Solver a b c d e f g h = * self_1 in Type.CreuSat_Solver_Solver a b ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 93 12 93 35] Type.creusat_solver_solver_Solver_num_conflicts ( * self_1) + (1 : usize)) d e f g h) }; assume { Resolve0.resolve self_1 }; _0 <- (); goto BB3 @@ -537,7 +545,7 @@ module CreuSat_Solver_Impl0_IncreaseNumLemmas use mach.int.Int use mach.int.UInt64 clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_solver_solver - let rec cfg increase_num_lemmas [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 99 4 99 37] (self : borrowed (Type.creusat_solver_solver)) : () + let rec cfg increase_num_lemmas [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 99 4 99 37] (self : borrowed (Type.creusat_solver_solver)) : () = var _0 : (); @@ -550,14 +558,14 @@ module CreuSat_Solver_Impl0_IncreaseNumLemmas } BB0 { _3 <- Type.creusat_solver_solver_Solver_num_lemmas ( * self_1); - _2 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 100 11 100 39] _3 < (18446744073709551615 : usize)); + _2 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 100 11 100 39] _3 < (18446744073709551615 : usize)); switch (_2) | False -> goto BB2 | _ -> goto BB1 end } BB1 { - self_1 <- { self_1 with current = (let Type.CreuSat_Solver_Solver a b c d e f g h = * self_1 in Type.CreuSat_Solver_Solver ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 101 12 101 32] Type.creusat_solver_solver_Solver_num_lemmas ( * self_1) + (1 : usize)) b c d e f g h) }; + self_1 <- { self_1 with current = (let Type.CreuSat_Solver_Solver a b c d e f g h = * self_1 in Type.CreuSat_Solver_Solver ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 101 12 101 32] Type.creusat_solver_solver_Solver_num_lemmas ( * self_1) + (1 : usize)) b c d e f g h) }; assume { Resolve0.resolve self_1 }; _0 <- (); goto BB3 @@ -583,7 +591,7 @@ module CreuSat_Util_UpdateFast use mach.int.Int use mach.int.UInt64 clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = usize - let rec cfg update_fast [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 40 0 40 48] (fast : borrowed usize) (lbd : usize) : () + let rec cfg update_fast [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 40 0 40 48] (fast : borrowed usize) (lbd : usize) : () = var _0 : (); @@ -610,21 +618,21 @@ module CreuSat_Util_UpdateFast } BB0 { _4 <- * fast_1; - _5 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 41 13 41 23] (32 : usize) = (0 : usize)); + _5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 41 13 41 23] (32 : usize) = (0 : usize)); assert { not _5 }; goto BB1 } BB1 { - _3 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 41 13 41 23] _4 / (32 : usize)); - fast_1 <- { fast_1 with current = ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 41 4 41 23] * fast_1 - _3) }; + _3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 41 13 41 23] _4 / (32 : usize)); + fast_1 <- { fast_1 with current = ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 41 4 41 23] * fast_1 - _3) }; _8 <- lbd_2; - _10 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 42 35 42 53] (32768 : usize) = (0 : usize)); + _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 42 35 42 53] (32768 : usize) = (0 : usize)); assert { not _10 }; goto BB2 } BB2 { - _9 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 42 35 42 53] (18446744073709551615 : usize) / (32768 : usize)); - _7 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 42 29 42 53] _8 < _9); + _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 42 35 42 53] (18446744073709551615 : usize) / (32768 : usize)); + _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 42 29 42 53] _8 < _9); switch (_7) | False -> goto BB4 | _ -> goto BB3 @@ -632,7 +640,7 @@ module CreuSat_Util_UpdateFast } BB3 { _11 <- lbd_2; - lbd_shl_fifteen_6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 42 56 42 67] _11 * (32768 : usize)); + lbd_shl_fifteen_6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 42 56 42 67] _11 * (32768 : usize)); goto BB5 } BB4 { @@ -641,9 +649,9 @@ module CreuSat_Util_UpdateFast } BB5 { _14 <- * fast_1; - _13 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 43 7 43 25] (18446744073709551615 : usize) - _14); + _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 43 7 43 25] (18446744073709551615 : usize) - _14); _15 <- lbd_shl_fifteen_6; - _12 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 43 7 43 43] _13 > _15); + _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 43 7 43 43] _13 > _15); switch (_12) | False -> goto BB7 | _ -> goto BB6 @@ -651,7 +659,7 @@ module CreuSat_Util_UpdateFast } BB6 { _16 <- lbd_shl_fifteen_6; - fast_1 <- { fast_1 with current = ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 44 8 44 32] * fast_1 + _16) }; + fast_1 <- { fast_1 with current = ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 44 8 44 32] * fast_1 + _16) }; assume { Resolve0.resolve fast_1 }; _0 <- (); goto BB8 @@ -677,7 +685,7 @@ module CreuSat_Util_UpdateSlow use mach.int.Int use mach.int.UInt64 clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = usize - let rec cfg update_slow [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 50 0 50 48] (slow : borrowed usize) (lbd : usize) : () + let rec cfg update_slow [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 50 0 50 48] (slow : borrowed usize) (lbd : usize) : () = var _0 : (); @@ -704,21 +712,21 @@ module CreuSat_Util_UpdateSlow } BB0 { _4 <- * slow_1; - _5 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 51 13 51 26] (32768 : usize) = (0 : usize)); + _5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 51 13 51 26] (32768 : usize) = (0 : usize)); assert { not _5 }; goto BB1 } BB1 { - _3 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 51 13 51 26] _4 / (32768 : usize)); - slow_1 <- { slow_1 with current = ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 51 4 51 26] * slow_1 - _3) }; + _3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 51 13 51 26] _4 / (32768 : usize)); + slow_1 <- { slow_1 with current = ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 51 4 51 26] * slow_1 - _3) }; _8 <- lbd_2; - _10 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 52 32 52 47] (32 : usize) = (0 : usize)); + _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 52 32 52 47] (32 : usize) = (0 : usize)); assert { not _10 }; goto BB2 } BB2 { - _9 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 52 32 52 47] (18446744073709551615 : usize) / (32 : usize)); - _7 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 52 26 52 47] _8 < _9); + _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 52 32 52 47] (18446744073709551615 : usize) / (32 : usize)); + _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 52 26 52 47] _8 < _9); switch (_7) | False -> goto BB4 | _ -> goto BB3 @@ -726,7 +734,7 @@ module CreuSat_Util_UpdateSlow } BB3 { _11 <- lbd_2; - lbd_shl_five_6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 52 50 52 58] _11 * (32 : usize)); + lbd_shl_five_6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 52 50 52 58] _11 * (32 : usize)); goto BB5 } BB4 { @@ -735,9 +743,9 @@ module CreuSat_Util_UpdateSlow } BB5 { _14 <- * slow_1; - _13 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 53 7 53 25] (18446744073709551615 : usize) - _14); + _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 53 7 53 25] (18446744073709551615 : usize) - _14); _15 <- lbd_shl_five_6; - _12 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 53 7 53 40] _13 > _15); + _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 53 7 53 40] _13 > _15); switch (_12) | False -> goto BB7 | _ -> goto BB6 @@ -745,7 +753,7 @@ module CreuSat_Util_UpdateSlow } BB6 { _16 <- lbd_shl_five_6; - slow_1 <- { slow_1 with current = ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 54 8 54 29] * slow_1 + _16) }; + slow_1 <- { slow_1 with current = ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 54 8 54 29] * slow_1 + _16) }; assume { Resolve0.resolve slow_1 }; _0 <- (); goto BB8 @@ -784,8 +792,7 @@ module CreusotContracts_Logic_Model_Impl0_Model type t use prelude.Prelude clone CreusotContracts_Logic_Model_Model_ModelTy as ModelTy0 with type self = t - clone CreusotContracts_Logic_Model_Model_Model_Interface as Model0 with type self = t, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Model_Model_Interface as Model0 with type self = t function model (self : t) : ModelTy0.modelTy = Model0.model self end @@ -816,23 +823,23 @@ module CreuSat_Logic_LogicAssignments_Impl0_Model use prelude.UInt8 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - function model [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_assignments.rs" 19 4 19 35] (self : Type.creusat_assignments_assignments) : Seq.seq uint8 + function model [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 19 4 19 35] (self : Type.creusat_assignments_assignments) : Seq.seq uint8 = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_assignments.rs" 18 4 18 12] Model0.model (Type.creusat_assignments_assignments_Assignments_0 self) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 18 4 18 12] Model0.model (Type.creusat_assignments_assignments_Assignments_0 self) end module CreuSat_Logic_LogicAssignments_Impl0 use mach.int.Int use prelude.Prelude use prelude.UInt8 use Type - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model0 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Model_Model_Interface as Model1 with type self = Type.creusat_assignments_assignments, - function model = Model0.model, type ModelTy0.modelTy = ModelTy0.modelTy - clone CreusotContracts_Logic_Model_Model_ModelTy as ModelTy1 with type self = Type.creusat_assignments_assignments, - type modelTy = ModelTy0.modelTy + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model0.model, axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type modelTy = ModelTy1.modelTy, + type ModelTy0.modelTy = Model1.modelTy + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model0 with function model = Model1.model + clone CreusotContracts_Logic_Model_Model_Model_Interface as Model1 with type self = Type.creusat_assignments_assignments + clone CreusotContracts_Logic_Model_Model_ModelTy as ModelTy1 with type self = Type.creusat_assignments_assignments end module CreusotContracts_Std1_Slice_SliceIndexSpec_InBounds_Interface type self @@ -878,12 +885,12 @@ module Alloc_Vec_Impl16_Index_Interface use prelude.Prelude use Type use seq.Seq - clone Core_Slice_Index_SliceIndex_Output as Output0 with type self = i, type t = seq t - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = t - clone CreusotContracts_Std1_Slice_SliceIndexSpec_HasValue_Interface as HasValue0 with type self = i, type t = seq t, - type ModelTy0.modelTy = ModelTy0.modelTy, type Output0.output = Output0.output - clone CreusotContracts_Std1_Slice_SliceIndexSpec_InBounds_Interface as InBounds0 with type self = i, type t = seq t, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = t, + type ModelTy0.modelTy = InBounds0.modelTy, type ModelTy0.modelTy = HasValue0.modelTy + clone Core_Slice_Index_SliceIndex_Output as Output0 with type self = i, type t = seq t, + type Output0.output = HasValue0.output + clone CreusotContracts_Std1_Slice_SliceIndexSpec_HasValue_Interface as HasValue0 with type self = i, type t = seq t + clone CreusotContracts_Std1_Slice_SliceIndexSpec_InBounds_Interface as InBounds0 with type self = i, type t = seq t clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = t, type a = a, axiom . val index [@cfg:stackify] (self : Type.alloc_vec_vec t a) (index : i) : Output0.output requires {InBounds0.in_bounds index (Model0.model self)} @@ -897,12 +904,12 @@ module Alloc_Vec_Impl16_Index use prelude.Prelude use Type use seq.Seq - clone Core_Slice_Index_SliceIndex_Output as Output0 with type self = i, type t = seq t - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = t - clone CreusotContracts_Std1_Slice_SliceIndexSpec_HasValue_Interface as HasValue0 with type self = i, type t = seq t, - type ModelTy0.modelTy = ModelTy0.modelTy, type Output0.output = Output0.output - clone CreusotContracts_Std1_Slice_SliceIndexSpec_InBounds_Interface as InBounds0 with type self = i, type t = seq t, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = t, + type ModelTy0.modelTy = InBounds0.modelTy, type ModelTy0.modelTy = HasValue0.modelTy + clone Core_Slice_Index_SliceIndex_Output as Output0 with type self = i, type t = seq t, + type Output0.output = HasValue0.output + clone CreusotContracts_Std1_Slice_SliceIndexSpec_HasValue_Interface as HasValue0 with type self = i, type t = seq t + clone CreusotContracts_Std1_Slice_SliceIndexSpec_InBounds_Interface as InBounds0 with type self = i, type t = seq t clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = t, type a = a, axiom . val index [@cfg:stackify] (self : Type.alloc_vec_vec t a) (index : i) : Output0.output requires {InBounds0.in_bounds index (Model0.model self)} @@ -969,12 +976,11 @@ module CreuSat_Assignments_Impl0_Index_Interface use prelude.Prelude use Type use prelude.UInt8 - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments val index [@cfg:stackify] (self : Type.creusat_assignments_assignments) (ix : usize) : uint8 - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 21 4 21 36] UInt64.to_int ix < Seq.length (Model0.model self)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 22 4 22 39] Seq.get (Model0.model self) (UInt64.to_int ix) = result } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 21 4 21 36] UInt64.to_int ix < Seq.length (Model0.model self)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 22 4 22 39] Seq.get (Model0.model self) (UInt64.to_int ix) = result } end module CreuSat_Assignments_Impl0_Index @@ -984,22 +990,21 @@ module CreuSat_Assignments_Impl0_Index use prelude.Prelude use Type use prelude.UInt8 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model0.model + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_assignments_assignments clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = uint8 - clone Core_Slice_Index_Impl2_Output as Output0 with type t = uint8 - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = uint8 - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = uint8 - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = uint8, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model2.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - type Output0.output = Output0.output - let rec cfg index [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 23 4 23 48] (self : Type.creusat_assignments_assignments) (ix : usize) : uint8 - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 21 4 21 36] UInt64.to_int ix < Seq.length (Model0.model self)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 22 4 22 39] Seq.get (Model0.model self) (UInt64.to_int ix) = result } + clone Core_Slice_Index_Impl2_Output as Output0 with type t = uint8, type Output0.output = Index0.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = uint8, + predicate HasValue0.has_value = Index0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = uint8, + predicate InBounds0.in_bounds = Index0.in_bounds + clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = uint8, type i = usize, type a = Type.alloc_alloc_global + let rec cfg index [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 23 4 23 48] (self : Type.creusat_assignments_assignments) (ix : usize) : uint8 + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 21 4 21 36] UInt64.to_int ix < Seq.length (Model0.model self)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 22 4 22 39] Seq.get (Model0.model self) (UInt64.to_int ix) = result } = var _0 : uint8; @@ -1017,7 +1022,7 @@ module CreuSat_Assignments_Impl0_Index BB0 { _5 <- Type.creusat_assignments_assignments_Assignments_0 self_1; _6 <- ix_2; - _4 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 29 9 29 19] Index0.index _5 _6); + _4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 29 9 29 19] Index0.index _5 _6); goto BB1 } BB1 { @@ -1037,8 +1042,7 @@ module CreusotContracts_Logic_Model_Impl1_Model type t use prelude.Prelude clone CreusotContracts_Logic_Model_Model_ModelTy as ModelTy0 with type self = t - clone CreusotContracts_Logic_Model_Model_Model_Interface as Model0 with type self = t, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Model_Model_Interface as Model0 with type self = t function model (self : borrowed t) : ModelTy0.modelTy = Model0.model ( * self) end @@ -1064,14 +1068,15 @@ module Alloc_Vec_Impl17_IndexMut_Interface use seq.Seq use prelude.Prelude use Type - clone Core_Slice_Index_SliceIndex_Output as Output0 with type self = i, type t = seq t - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = t + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = t, + type ModelTy0.modelTy = InBounds0.modelTy, type ModelTy0.modelTy = HasValue0.modelTy, + type ModelTy0.modelTy = ResolveElswhere0.modelTy + clone Core_Slice_Index_SliceIndex_Output as Output0 with type self = i, type t = seq t, + type Output0.output = HasValue0.output clone CreusotContracts_Std1_Slice_SliceIndexSpec_ResolveElswhere_Interface as ResolveElswhere0 with type self = i, - type t = seq t, type ModelTy0.modelTy = ModelTy0.modelTy - clone CreusotContracts_Std1_Slice_SliceIndexSpec_HasValue_Interface as HasValue0 with type self = i, type t = seq t, - type ModelTy0.modelTy = ModelTy0.modelTy, type Output0.output = Output0.output - clone CreusotContracts_Std1_Slice_SliceIndexSpec_InBounds_Interface as InBounds0 with type self = i, type t = seq t, - type ModelTy0.modelTy = ModelTy0.modelTy + type t = seq t + clone CreusotContracts_Std1_Slice_SliceIndexSpec_HasValue_Interface as HasValue0 with type self = i, type t = seq t + clone CreusotContracts_Std1_Slice_SliceIndexSpec_InBounds_Interface as InBounds0 with type self = i, type t = seq t clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = t, type a = a, axiom . val index_mut [@cfg:stackify] (self : borrowed (Type.alloc_vec_vec t a)) (index : i) : borrowed Output0.output requires {InBounds0.in_bounds index (Model0.model ( * self))} @@ -1088,14 +1093,15 @@ module Alloc_Vec_Impl17_IndexMut use seq.Seq use prelude.Prelude use Type - clone Core_Slice_Index_SliceIndex_Output as Output0 with type self = i, type t = seq t - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = t + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = t, + type ModelTy0.modelTy = InBounds0.modelTy, type ModelTy0.modelTy = HasValue0.modelTy, + type ModelTy0.modelTy = ResolveElswhere0.modelTy + clone Core_Slice_Index_SliceIndex_Output as Output0 with type self = i, type t = seq t, + type Output0.output = HasValue0.output clone CreusotContracts_Std1_Slice_SliceIndexSpec_ResolveElswhere_Interface as ResolveElswhere0 with type self = i, - type t = seq t, type ModelTy0.modelTy = ModelTy0.modelTy - clone CreusotContracts_Std1_Slice_SliceIndexSpec_HasValue_Interface as HasValue0 with type self = i, type t = seq t, - type ModelTy0.modelTy = ModelTy0.modelTy, type Output0.output = Output0.output - clone CreusotContracts_Std1_Slice_SliceIndexSpec_InBounds_Interface as InBounds0 with type self = i, type t = seq t, - type ModelTy0.modelTy = ModelTy0.modelTy + type t = seq t + clone CreusotContracts_Std1_Slice_SliceIndexSpec_HasValue_Interface as HasValue0 with type self = i, type t = seq t + clone CreusotContracts_Std1_Slice_SliceIndexSpec_InBounds_Interface as InBounds0 with type self = i, type t = seq t clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = t, type a = a, axiom . val index_mut [@cfg:stackify] (self : borrowed (Type.alloc_vec_vec t a)) (index : i) : borrowed Output0.output requires {InBounds0.in_bounds index (Model0.model ( * self))} @@ -1136,16 +1142,15 @@ module CreuSat_Assignments_Impl1_IndexMut_Interface use prelude.Prelude use Type use prelude.UInt8 + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model1 - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments val index_mut [@cfg:stackify] (self : borrowed (Type.creusat_assignments_assignments)) (ix : usize) : borrowed uint8 - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 35 4 35 36] UInt64.to_int ix < Seq.length (Model0.model self)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 36 4 36 40] Seq.get (Model1.model ( * self)) (UInt64.to_int ix) = * result } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 37 4 37 40] Seq.get (Model1.model ( ^ self)) (UInt64.to_int ix) = ^ result } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 38 4 38 101] forall i : (int) . 0 <= i && i <> UInt64.to_int ix && i < Seq.length (Model0.model self) -> Seq.get (Model0.model self) i = Seq.get (Model1.model ( ^ self)) i } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 39 4 39 48] Seq.length (Model1.model ( ^ self)) = Seq.length (Model1.model ( * self)) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 35 4 35 36] UInt64.to_int ix < Seq.length (Model0.model self)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 36 4 36 40] Seq.get (Model1.model ( * self)) (UInt64.to_int ix) = * result } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 37 4 37 40] Seq.get (Model1.model ( ^ self)) (UInt64.to_int ix) = ^ result } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 38 4 38 101] forall i : (int) . 0 <= i && i <> UInt64.to_int ix && i < Seq.length (Model0.model self) -> Seq.get (Model0.model self) i = Seq.get (Model1.model ( ^ self)) i } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 39 4 39 48] Seq.length (Model1.model ( ^ self)) = Seq.length (Model1.model ( * self)) } end module CreuSat_Assignments_Impl1_IndexMut @@ -1156,28 +1161,29 @@ module CreuSat_Assignments_Impl1_IndexMut use prelude.Prelude use Type use prelude.UInt8 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = uint8 + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model0.model + clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_assignments_assignments clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = uint8 - clone Core_Slice_Index_Impl2_Output as Output0 with type t = uint8 - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = uint8 - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = uint8 - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = uint8 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_assignments_assignments + clone Core_Slice_Index_Impl2_Output as Output0 with type t = uint8, type Output0.output = IndexMut0.output + clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = uint8, + predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = uint8, + predicate HasValue0.has_value = IndexMut0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = uint8, + predicate InBounds0.in_bounds = IndexMut0.in_bounds + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = uint8 clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = uint8, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model2.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - predicate ResolveElswhere0.resolve_elswhere = ResolveElswhere0.resolve_elswhere, type Output0.output = Output0.output - let rec cfg index_mut [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 40 4 40 60] (self : borrowed (Type.creusat_assignments_assignments)) (ix : usize) : borrowed uint8 - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 35 4 35 36] UInt64.to_int ix < Seq.length (Model0.model self)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 36 4 36 40] Seq.get (Model1.model ( * self)) (UInt64.to_int ix) = * result } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 37 4 37 40] Seq.get (Model1.model ( ^ self)) (UInt64.to_int ix) = ^ result } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 38 4 38 101] forall i : (int) . 0 <= i && i <> UInt64.to_int ix && i < Seq.length (Model0.model self) -> Seq.get (Model0.model self) i = Seq.get (Model1.model ( ^ self)) i } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 39 4 39 48] Seq.length (Model1.model ( ^ self)) = Seq.length (Model1.model ( * self)) } + type a = Type.alloc_alloc_global + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_assignments_assignments + let rec cfg index_mut [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 40 4 40 60] (self : borrowed (Type.creusat_assignments_assignments)) (ix : usize) : borrowed uint8 + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 35 4 35 36] UInt64.to_int ix < Seq.length (Model0.model self)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 36 4 36 40] Seq.get (Model1.model ( * self)) (UInt64.to_int ix) = * result } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 37 4 37 40] Seq.get (Model1.model ( ^ self)) (UInt64.to_int ix) = ^ result } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 38 4 38 101] forall i : (int) . 0 <= i && i <> UInt64.to_int ix && i < Seq.length (Model0.model self) -> Seq.get (Model0.model self) i = Seq.get (Model1.model ( ^ self)) i } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 39 4 39 48] Seq.length (Model1.model ( ^ self)) = Seq.length (Model1.model ( * self)) } = var _0 : borrowed uint8; @@ -1198,7 +1204,7 @@ module CreuSat_Assignments_Impl1_IndexMut self_1 <- { self_1 with current = (let Type.CreuSat_Assignments_Assignments a = * self_1 in Type.CreuSat_Assignments_Assignments ( ^ _6)) }; assume { Resolve0.resolve self_1 }; _7 <- ix_2; - _5 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 46 13 46 23] IndexMut0.index_mut _6 _7); + _5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 46 13 46 23] IndexMut0.index_mut _6 _7); goto BB1 } BB1 { @@ -1221,11 +1227,10 @@ module CreuSat_Assignments_Impl2_Len_Interface use prelude.Prelude use Type use mach.int.Int - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments val len [@cfg:stackify] (self : Type.creusat_assignments_assignments) : usize - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 54 4 54 40] UInt64.to_int result = Seq.length (Model0.model self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 54 4 54 40] UInt64.to_int result = Seq.length (Model0.model self) } end module CreuSat_Assignments_Impl2_Len @@ -1235,15 +1240,14 @@ module CreuSat_Assignments_Impl2_Len use Type use mach.int.Int use prelude.UInt8 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model2.model - let rec cfg len [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 55 4 55 30] (self : Type.creusat_assignments_assignments) : usize - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 54 4 54 40] UInt64.to_int result = Seq.length (Model0.model self) } + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model0.model + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_assignments_assignments + clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = uint8, type a = Type.alloc_alloc_global + let rec cfg len [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 55 4 55 30] (self : Type.creusat_assignments_assignments) : usize + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 54 4 54 40] UInt64.to_int result = Seq.length (Model0.model self) } = var _0 : usize; @@ -1255,7 +1259,7 @@ module CreuSat_Assignments_Impl2_Len } BB0 { _2 <- Type.creusat_assignments_assignments_Assignments_0 self_1; - _0 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 56 8 56 20] Len0.len _2); + _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 56 8 56 20] Len0.len _2); goto BB1 } BB1 { @@ -1275,10 +1279,10 @@ module CreuSat_Logic_LogicAssignments_Impl1_Invariant use mach.int.Int32 use prelude.UInt8 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - predicate invariant' [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_assignments.rs" 47 4 47 46] (self : Type.creusat_assignments_assignments) (f : Type.creusat_formula_formula) + predicate invariant' [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 47 4 47 46] (self : Type.creusat_assignments_assignments) (f : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_assignments.rs" 48 8 51 9] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) = Seq.length (Model0.model self) && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model self) -> UInt8.to_int (Seq.get (Model0.model self) i) <= 3) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 48 8 51 9] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) = Seq.length (Model0.model self) && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model self) -> UInt8.to_int (Seq.get (Model0.model self) i) <= 3) end module CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface use Type @@ -1289,10 +1293,10 @@ module CreuSat_Logic_LogicLit_Impl0_IndexLogic use Type use mach.int.Int use mach.int.UInt64 - function index_logic [@inline:trivial] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 21 4 21 35] (self : Type.creusat_lit_lit) : int + function index_logic [@inline:trivial] [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 21 4 21 35] (self : Type.creusat_lit_lit) : int = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 22 8 22 31] UInt64.to_int (Type.creusat_lit_lit_Lit_idx self) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 22 8 22 31] UInt64.to_int (Type.creusat_lit_lit_Lit_idx self) end module CreuSat_Logic_LogicLit_Impl1_Invariant_Interface use Type @@ -1303,10 +1307,10 @@ module CreuSat_Logic_LogicLit_Impl1_Invariant use Type use mach.int.Int clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - predicate invariant' [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 76 4 76 42] (self : Type.creusat_lit_lit) (n : int) + predicate invariant' [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 76 4 76 42] (self : Type.creusat_lit_lit) (n : int) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 77 8 77 44] IndexLogic0.index_logic self < n + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 77 8 77 44] IndexLogic0.index_logic self < n end module CreuSat_Logic_LogicClause_Impl0_Model_Interface use Type @@ -1318,10 +1322,10 @@ module CreuSat_Logic_LogicClause_Impl0_Model use seq.Seq clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_lit_lit, type a = Type.alloc_alloc_global, axiom . - function model [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 15 4 15 35] (self : Type.creusat_clause_clause) : Seq.seq (Type.creusat_lit_lit) + function model [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 15 4 15 35] (self : Type.creusat_clause_clause) : Seq.seq (Type.creusat_lit_lit) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 14 4 14 12] Model0.model (Type.creusat_clause_clause_Clause_lits self) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 14 4 14 12] Model0.model (Type.creusat_clause_clause_Clause_lits self) end module CreuSat_Logic_LogicClause_VarsInRangeInner_Interface use seq.Seq @@ -1335,10 +1339,10 @@ module CreuSat_Logic_LogicClause_VarsInRangeInner use mach.int.Int use mach.int.Int32 clone CreuSat_Logic_LogicLit_Impl1_Invariant_Interface as Invariant0 - predicate vars_in_range_inner [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 21 0 21 55] (s : Seq.seq (Type.creusat_lit_lit)) (n : int) + predicate vars_in_range_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 21 0 21 55] (s : Seq.seq (Type.creusat_lit_lit)) (n : int) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 22 4 25 5] forall i : (int) . 0 <= i && i < Seq.length s -> Invariant0.invariant' (Seq.get s i) n + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 22 4 25 5] forall i : (int) . 0 <= i && i < Seq.length s -> Invariant0.invariant' (Seq.get s i) n end module CreuSat_Logic_LogicClause_NoDuplicateIndexesInner_Interface use seq.Seq @@ -1351,10 +1355,10 @@ module CreuSat_Logic_LogicClause_NoDuplicateIndexesInner use mach.int.Int use mach.int.Int32 clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - predicate no_duplicate_indexes_inner [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 41 0 41 54] (s : Seq.seq (Type.creusat_lit_lit)) + predicate no_duplicate_indexes_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 41 0 41 54] (s : Seq.seq (Type.creusat_lit_lit)) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 42 4 45 5] forall k : (int) . forall j : (int) . 0 <= j && j < Seq.length s && 0 <= k && k < j -> not IndexLogic0.index_logic (Seq.get s k) = IndexLogic0.index_logic (Seq.get s j) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 42 4 45 5] forall k : (int) . forall j : (int) . 0 <= j && j < Seq.length s && 0 <= k && k < j -> not IndexLogic0.index_logic (Seq.get s k) = IndexLogic0.index_logic (Seq.get s j) end module CreuSat_Logic_LogicClause_InvariantInternal_Interface use seq.Seq @@ -1368,10 +1372,10 @@ module CreuSat_Logic_LogicClause_InvariantInternal use mach.int.Int clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner_Interface as NoDuplicateIndexesInner0 clone CreuSat_Logic_LogicClause_VarsInRangeInner_Interface as VarsInRangeInner0 - predicate invariant_internal [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 29 0 29 54] (s : Seq.seq (Type.creusat_lit_lit)) (n : int) + predicate invariant_internal [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 29 0 29 54] (s : Seq.seq (Type.creusat_lit_lit)) (n : int) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 28 0 28 12] VarsInRangeInner0.vars_in_range_inner s n && NoDuplicateIndexesInner0.no_duplicate_indexes_inner s + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 28 0 28 12] VarsInRangeInner0.vars_in_range_inner s n && NoDuplicateIndexesInner0.no_duplicate_indexes_inner s end module CreuSat_Logic_LogicClause_Impl2_Invariant_Interface use Type @@ -1383,16 +1387,16 @@ module CreuSat_Logic_LogicClause_Impl2_Invariant use mach.int.Int clone CreuSat_Logic_LogicClause_InvariantInternal_Interface as InvariantInternal0 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 - predicate invariant' [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 195 4 195 42] (self : Type.creusat_clause_clause) (n : int) + predicate invariant' [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 195 4 195 42] (self : Type.creusat_clause_clause) (n : int) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 196 8 198 9] InvariantInternal0.invariant_internal (Model0.model self) n + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 196 8 198 9] InvariantInternal0.invariant_internal (Model0.model self) n end -module CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface +module CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface use Type predicate invariant_mirror (self : Type.creusat_formula_formula) end -module CreuSat_Logic_LogicFormula_Impl1_InvariantMirror +module CreuSat_Logic_LogicFormula_Impl2_InvariantMirror use Type use mach.int.Int use mach.int.Int32 @@ -1402,10 +1406,10 @@ module CreuSat_Logic_LogicFormula_Impl1_InvariantMirror clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . - predicate invariant_mirror [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 106 4 106 37] (self : Type.creusat_formula_formula) + predicate invariant_mirror [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 113 4 113 37] (self : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 107 8 114 9] (forall i : (int) . 0 <= i && i < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) -> Invariant0.invariant' (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) i) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self))) && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) -> Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) i)) >= 1) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 114 8 121 9] (forall i : (int) . 0 <= i && i < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) -> Invariant0.invariant' (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) i) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self))) && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) -> Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) i)) >= 1) end module CreuSat_Logic_LogicFormula_Impl0_Model_Interface use Type @@ -1420,10 +1424,10 @@ module CreuSat_Logic_LogicFormula_Impl0_Model use mach.int.UInt64 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . - function model [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 15 4 15 35] (self : Type.creusat_formula_formula) : (Seq.seq (Type.creusat_clause_clause), int) + function model [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 15 4 15 35] (self : Type.creusat_formula_formula) : (Seq.seq (Type.creusat_clause_clause), int) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 14 4 14 12] (Model0.model (Type.creusat_formula_formula_Formula_clauses self), UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self)) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 14 4 14 12] (Model0.model (Type.creusat_formula_formula_Formula_clauses self), UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self)) end module CreuSat_Logic_LogicFormula_FormulaInvariant_Interface use seq.Seq @@ -1438,10 +1442,10 @@ module CreuSat_Logic_LogicFormula_FormulaInvariant use mach.int.Int32 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant0 - predicate formula_invariant [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 21 0 21 55] (f : (Seq.seq (Type.creusat_clause_clause), int)) + predicate formula_invariant [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 28 0 28 55] (f : (Seq.seq (Type.creusat_clause_clause), int)) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 22 4 28 5] (forall i : (int) . 0 <= i && i < Seq.length (let (a, _) = f in a) -> Invariant0.invariant' (Seq.get (let (a, _) = f in a) i) (let (_, a) = f in a)) && (forall i : (int) . 0 <= i && i < Seq.length (let (a, _) = f in a) -> Seq.length (Model0.model (Seq.get (let (a, _) = f in a) i)) > 0) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 29 4 35 5] (forall i : (int) . 0 <= i && i < Seq.length (let (a, _) = f in a) -> Invariant0.invariant' (Seq.get (let (a, _) = f in a) i) (let (_, a) = f in a)) && (forall i : (int) . 0 <= i && i < Seq.length (let (a, _) = f in a) -> Seq.length (Model0.model (Seq.get (let (a, _) = f in a) i)) > 0) end module CreuSat_Logic_LogicFormula_Impl0_ModelTy use seq.Seq @@ -1453,13 +1457,12 @@ end module CreuSat_Logic_LogicFormula_Impl0 use Type clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Model_Model_Interface as Model1 with type self = Type.creusat_formula_formula, - function model = Model0.model, type ModelTy0.modelTy = ModelTy0.modelTy - clone CreusotContracts_Logic_Model_Model_ModelTy as ModelTy1 with type self = Type.creusat_formula_formula, - type modelTy = ModelTy0.modelTy + type a = Type.alloc_alloc_global, function Model0.model = Model0.model, axiom . + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type modelTy = ModelTy1.modelTy, + type ModelTy0.modelTy = Model1.modelTy + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function model = Model1.model + clone CreusotContracts_Logic_Model_Model_Model_Interface as Model1 with type self = Type.creusat_formula_formula + clone CreusotContracts_Logic_Model_Model_ModelTy as ModelTy1 with type self = Type.creusat_formula_formula end module CreuSat_Logic_LogicClause_Impl0_ModelTy use seq.Seq @@ -1470,55 +1473,54 @@ end module CreuSat_Logic_LogicClause_Impl0 use Type clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model0 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Model_Model_Interface as Model1 with type self = Type.creusat_clause_clause, - function model = Model0.model, type ModelTy0.modelTy = ModelTy0.modelTy - clone CreusotContracts_Logic_Model_Model_ModelTy as ModelTy1 with type self = Type.creusat_clause_clause, - type modelTy = ModelTy0.modelTy + type a = Type.alloc_alloc_global, function Model0.model = Model0.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type modelTy = ModelTy1.modelTy, + type ModelTy0.modelTy = Model1.modelTy + clone CreuSat_Logic_LogicClause_Impl0_Model as Model0 with function model = Model1.model + clone CreusotContracts_Logic_Model_Model_Model_Interface as Model1 with type self = Type.creusat_clause_clause + clone CreusotContracts_Logic_Model_Model_ModelTy as ModelTy1 with type self = Type.creusat_clause_clause end -module CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface +module CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface use Type - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 predicate invariant' (self : Type.creusat_formula_formula) end -module CreuSat_Logic_LogicFormula_Impl1_Invariant +module CreuSat_Logic_LogicFormula_Impl2_Invariant use Type - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 clone CreuSat_Logic_LogicFormula_FormulaInvariant_Interface as FormulaInvariant0 clone CreuSat_Logic_LogicFormula_Impl0_Model_Interface as Model0 - predicate invariant' [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 101 4 101 34] (self : Type.creusat_formula_formula) + predicate invariant' [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 108 4 108 34] (self : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 102 8 102 46] FormulaInvariant0.formula_invariant (Model0.model self) - axiom invariant'_spec : forall self : Type.creusat_formula_formula . [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 100 4 100 49] invariant' self = InvariantMirror0.invariant_mirror self + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 109 8 109 46] FormulaInvariant0.formula_invariant (Model0.model self) + axiom invariant'_spec : forall self : Type.creusat_formula_formula . [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 107 4 107 49] invariant' self = InvariantMirror0.invariant_mirror self end -module CreuSat_Logic_LogicFormula_Impl1_Invariant_Impl +module CreuSat_Logic_LogicFormula_Impl2_Invariant_Impl use Type - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant1.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = Invariant1.index_logic + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model2 with function Model0.model = Model3.model - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant0 with function Model0.model = Model2.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant0.invariant', - function Model0.model = Model2.model + type a = Type.alloc_alloc_global, function Model0.model = Model2.model, axiom . + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant0.invariant_internal + clone CreuSat_Logic_LogicClause_Impl0_Model as Model2 with function Model1.model = InvariantMirror0.model, + function Model0.model = FormulaInvariant0.model, function Model0.model = Invariant0.model + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant0 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Model1.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model1.model, - predicate Invariant0.invariant' = Invariant0.invariant', function Model1.model = Model2.model + type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, + function Model0.model = Model0.model, axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 let rec ghost function invariant' (self : Type.creusat_formula_formula) : bool - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 100 4 100 49] result = InvariantMirror0.invariant_mirror self } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 107 4 107 49] result = InvariantMirror0.invariant_mirror self } = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 102 8 102 46] let a' = Model0.model self in FormulaInvariant0.formula_invariant a' + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 109 8 109 46] let a' = Model0.model self in FormulaInvariant0.formula_invariant a' end module CreuSat_Logic_LogicTrail_Impl0_Invariant_Interface use Type @@ -1533,10 +1535,10 @@ module CreuSat_Logic_LogicTrail_Impl0_Invariant clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . - predicate invariant' [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 12 4 12 46] (self : Type.creusat_trail_reason) (f : Type.creusat_formula_formula) + predicate invariant' [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 12 4 12 46] (self : Type.creusat_trail_reason) (f : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 13 8 23 9] match (self) with + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 13 8 23 9] match (self) with | Type.CreuSat_Trail_Reason_Long cref -> 0 <= UInt64.to_int cref && UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) && Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) > 1 | Type.CreuSat_Trail_Reason_Unit cref -> 0 <= UInt64.to_int cref && UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) && Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) = 1 | _ -> true @@ -1551,10 +1553,10 @@ module CreuSat_Logic_LogicTrail_Impl1_Invariant use mach.int.UInt64 clone CreuSat_Logic_LogicTrail_Impl0_Invariant_Interface as Invariant1 clone CreuSat_Logic_LogicLit_Impl1_Invariant_Interface as Invariant0 - predicate invariant' [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 48 4 48 46] (self : Type.creusat_trail_step) (f : Type.creusat_formula_formula) + predicate invariant' [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 48 4 48 46] (self : Type.creusat_trail_step) (f : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 49 8 52 9] Invariant0.invariant' (Type.creusat_trail_step_Step_lit self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) && Invariant1.invariant' (Type.creusat_trail_step_Step_reason self) f + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 49 8 52 9] Invariant0.invariant' (Type.creusat_trail_step_Step_lit self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) && Invariant1.invariant' (Type.creusat_trail_step_Step_reason self) f end module CreuSat_Logic_LogicTrail_CrefsInRange_Interface use seq.Seq @@ -1567,10 +1569,10 @@ module CreuSat_Logic_LogicTrail_CrefsInRange use mach.int.Int use mach.int.Int32 clone CreuSat_Logic_LogicTrail_Impl1_Invariant_Interface as Invariant0 - predicate crefs_in_range [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 171 0 171 59] (trail : Seq.seq (Type.creusat_trail_step)) (f : Type.creusat_formula_formula) + predicate crefs_in_range [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 171 0 171 59] (trail : Seq.seq (Type.creusat_trail_step)) (f : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 172 4 175 5] forall i : (int) . 0 <= i && i < Seq.length trail -> Invariant0.invariant' (Seq.get trail i) f + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 172 4 175 5] forall i : (int) . 0 <= i && i < Seq.length trail -> Invariant0.invariant' (Seq.get trail i) f end module CreuSat_Logic_LogicTrail_TrailInvariant_Interface use seq.Seq @@ -1581,10 +1583,10 @@ module CreuSat_Logic_LogicTrail_TrailInvariant use seq.Seq use Type clone CreuSat_Logic_LogicTrail_CrefsInRange_Interface as CrefsInRange0 - predicate trail_invariant [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 156 0 156 60] (trail : Seq.seq (Type.creusat_trail_step)) (f : Type.creusat_formula_formula) + predicate trail_invariant [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 156 0 156 60] (trail : Seq.seq (Type.creusat_trail_step)) (f : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 157 4 159 5] CrefsInRange0.crefs_in_range trail f + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 157 4 159 5] CrefsInRange0.crefs_in_range trail f end module CreuSat_Logic_Logic_Unset_Interface use mach.int.Int @@ -1597,8 +1599,8 @@ module CreuSat_Logic_Logic_Unset use prelude.Prelude use prelude.UInt8 use mach.int.Int32 - predicate unset [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic.rs" 20 0 20 38] (v : uint8) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic.rs" 21 4 27 5] if UInt8.to_int v >= 2 then true else false + predicate unset [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 66 0 66 38] (v : uint8) = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 67 4 73 5] if UInt8.to_int v >= 2 then true else false end module CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic_Interface use Type @@ -1606,10 +1608,10 @@ module CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic_Interface end module CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic use Type - function is_positive_logic [@inline:trivial] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 27 4 27 42] (self : Type.creusat_lit_lit) : bool + function is_positive_logic [@inline:trivial] [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 27 4 27 42] (self : Type.creusat_lit_lit) : bool = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 28 20 28 33] Type.creusat_lit_lit_Lit_polarity self + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 28 20 28 33] Type.creusat_lit_lit_Lit_polarity self end module CreuSat_Logic_LogicLit_Impl1_SatInner_Interface use Type @@ -1628,10 +1630,10 @@ module CreuSat_Logic_LogicLit_Impl1_SatInner use mach.int.Int32 clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic_Interface as IsPositiveLogic0 - predicate sat_inner [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 81 4 81 57] (self : Type.creusat_lit_lit) (a : Seq.seq uint8) + predicate sat_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 81 4 81 57] (self : Type.creusat_lit_lit) (a : Seq.seq uint8) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 82 8 87 9] if IsPositiveLogic0.is_positive_logic self then + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 82 8 87 9] if IsPositiveLogic0.is_positive_logic self then UInt8.to_int (Seq.get a (IndexLogic0.index_logic self)) = 1 else UInt8.to_int (Seq.get a (IndexLogic0.index_logic self)) = 0 @@ -1654,10 +1656,10 @@ module CreuSat_Logic_LogicLit_Impl1_UnsatInner use mach.int.Int32 clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic_Interface as IsPositiveLogic0 - predicate unsat_inner [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 91 4 91 59] (self : Type.creusat_lit_lit) (a : Seq.seq uint8) + predicate unsat_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 91 4 91 59] (self : Type.creusat_lit_lit) (a : Seq.seq uint8) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 92 8 97 9] if IsPositiveLogic0.is_positive_logic self then + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 92 8 97 9] if IsPositiveLogic0.is_positive_logic self then UInt8.to_int (Seq.get a (IndexLogic0.index_logic self)) = 0 else UInt8.to_int (Seq.get a (IndexLogic0.index_logic self)) = 1 @@ -1682,10 +1684,10 @@ module CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner clone CreuSat_Logic_LogicLit_Impl1_SatInner_Interface as SatInner0 clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 - predicate clause_post_with_regards_to_inner [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 194 0 194 90] (c : Type.creusat_clause_clause) (a : Seq.seq uint8) (j : int) + predicate clause_post_with_regards_to_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 194 0 194 90] (c : Type.creusat_clause_clause) (a : Seq.seq uint8) (j : int) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 195 4 199 5] IndexLogic0.index_logic (Seq.get (Model0.model c) 0) = j && SatInner0.sat_inner (Seq.get (Model0.model c) 0) a && (forall i : (int) . 1 <= i && i < Seq.length (Model0.model c) -> UnsatInner0.unsat_inner (Seq.get (Model0.model c) i) a) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 195 4 199 5] IndexLogic0.index_logic (Seq.get (Model0.model c) 0) = j && SatInner0.sat_inner (Seq.get (Model0.model c) 0) a && (forall i : (int) . 1 <= i && i < Seq.length (Model0.model c) -> UnsatInner0.unsat_inner (Seq.get (Model0.model c) i) a) end module CreuSat_Logic_LogicTrail_LongArePostUnitInner_Interface use seq.Seq @@ -1708,10 +1710,10 @@ module CreuSat_Logic_LogicTrail_LongArePostUnitInner clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . - predicate long_are_post_unit_inner [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 230 0 230 92] (trail : Seq.seq (Type.creusat_trail_step)) (f : Type.creusat_formula_formula) (a : Seq.seq uint8) + predicate long_are_post_unit_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 230 0 230 92] (trail : Seq.seq (Type.creusat_trail_step)) (f : Type.creusat_formula_formula) (a : Seq.seq uint8) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 231 4 237 5] forall j : (int) . 0 <= j && j < Seq.length trail -> match (Type.creusat_trail_step_Step_reason (Seq.get trail j)) with + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 231 4 237 5] forall j : (int) . 0 <= j && j < Seq.length trail -> match (Type.creusat_trail_step_Step_reason (Seq.get trail j)) with | Type.CreuSat_Trail_Reason_Long k -> ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int k)) a (IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit (Seq.get trail j))) | _ -> true end @@ -1724,10 +1726,10 @@ module CreuSat_Logic_LogicLit_Impl1_Sat use Type clone CreuSat_Logic_LogicLit_Impl1_SatInner_Interface as SatInner0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - predicate sat [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 106 4 106 44] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) + predicate sat [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 106 4 106 44] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 107 8 107 40] SatInner0.sat_inner self (Model0.model a) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 107 8 107 40] SatInner0.sat_inner self (Model0.model a) end module CreusotContracts_Std1_Vec_Impl0_ModelTy type t @@ -1740,14 +1742,14 @@ module CreuSat_Lit_Impl1_IsPositive_Interface use Type clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic_Interface as IsPositiveLogic0 val is_positive [@cfg:stackify] (self : Type.creusat_lit_lit) : bool - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 37 4 37 50] result = IsPositiveLogic0.is_positive_logic self } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 37 4 37 50] result = IsPositiveLogic0.is_positive_logic self } end module CreuSat_Lit_Impl1_IsPositive use Type clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - let rec cfg is_positive [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 38 4 38 36] (self : Type.creusat_lit_lit) : bool - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 37 4 37 50] result = IsPositiveLogic0.is_positive_logic self } + let rec cfg is_positive [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 38 4 38 36] (self : Type.creusat_lit_lit) : bool + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 37 4 37 50] result = IsPositiveLogic0.is_positive_logic self } = var _0 : bool; @@ -1769,7 +1771,7 @@ module CreuSat_Lit_Impl1_Index_Interface use prelude.Prelude clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 val index [@cfg:stackify] (self : Type.creusat_lit_lit) : usize - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 30 4 30 45] UInt64.to_int result = IndexLogic0.index_logic self } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 30 4 30 45] UInt64.to_int result = IndexLogic0.index_logic self } end module CreuSat_Lit_Impl1_Index @@ -1778,8 +1780,8 @@ module CreuSat_Lit_Impl1_Index use mach.int.Int use prelude.Prelude clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - let rec cfg index [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 31 4 31 31] (self : Type.creusat_lit_lit) : usize - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 30 4 30 45] UInt64.to_int result = IndexLogic0.index_logic self } + let rec cfg index [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 31 4 31 31] (self : Type.creusat_lit_lit) : usize + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 30 4 30 45] UInt64.to_int result = IndexLogic0.index_logic self } = var _0 : usize; @@ -1801,37 +1803,34 @@ module CreuSat_Assignments_Impl2_SetAssignment_Interface use mach.int.Int32 use prelude.Prelude use Type + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model1.modelTy + clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant2.invariant_mirror clone CreuSat_Logic_LogicLit_Impl1_Sat_Interface as Sat0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model2 clone CreuSat_Logic_LogicTrail_LongArePostUnitInner_Interface as LongArePostUnitInner0 clone CreuSat_Logic_Logic_Unset_Interface as Unset0 clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy1 - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model1 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy1.modelTy + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model1 with type t = Type.creusat_assignments_assignments clone CreuSat_Logic_LogicTrail_TrailInvariant_Interface as TrailInvariant0 - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global), - type ModelTy0.modelTy = ModelTy0.modelTy - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant2 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global) + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant2 with axiom . clone CreuSat_Logic_LogicLit_Impl1_Invariant_Interface as Invariant1 clone CreuSat_Logic_LogicAssignments_Impl1_Invariant_Interface as Invariant0 val set_assignment [@cfg:stackify] (self : borrowed (Type.creusat_assignments_assignments)) (lit : Type.creusat_lit_lit) (_f : Type.creusat_formula_formula) (_t : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global)) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 61 4 61 43] Invariant0.invariant' ( * self) _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 62 4 62 44] Invariant1.invariant' lit (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 63 4 63 31] Invariant2.invariant' _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 64 4 64 42] TrailInvariant0.trail_invariant (Model0.model _t) _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 65 4 65 50] Unset0.unset (Seq.get (Model1.model self) (IndexLogic0.index_logic lit))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 66 4 66 58] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model _t) _f (Model1.model self)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 61 4 61 43] Invariant0.invariant' ( ^ self) _f } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 67 4 67 58] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model _t) _f (Model2.model ( ^ self)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 68 4 68 51] not Unset0.unset (Seq.get (Model2.model ( ^ self)) (IndexLogic0.index_logic lit)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 69 4 69 47] Seq.length (Model2.model ( ^ self)) = Seq.length (Model1.model self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 70 4 71 71] forall j : (int) . 0 <= j && j < Seq.length (Model1.model self) && j <> IndexLogic0.index_logic lit -> Seq.get (Model2.model ( * self)) j = Seq.get (Model2.model ( ^ self)) j } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 72 4 72 30] Sat0.sat lit ( ^ self) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 61 4 61 43] Invariant0.invariant' ( * self) _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 62 4 62 44] Invariant1.invariant' lit (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 63 4 63 31] Invariant2.invariant' _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 64 4 64 42] TrailInvariant0.trail_invariant (Model0.model _t) _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 65 4 65 50] Unset0.unset (Seq.get (Model1.model self) (IndexLogic0.index_logic lit))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 66 4 66 58] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model _t) _f (Model1.model self)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 61 4 61 43] Invariant0.invariant' ( ^ self) _f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 67 4 67 58] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model _t) _f (Model2.model ( ^ self)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 68 4 68 51] not Unset0.unset (Seq.get (Model2.model ( ^ self)) (IndexLogic0.index_logic lit)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 69 4 69 47] Seq.length (Model2.model ( ^ self)) = Seq.length (Model1.model self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 70 4 71 71] forall j : (int) . 0 <= j && j < Seq.length (Model1.model self) && j <> IndexLogic0.index_logic lit -> Seq.get (Model2.model ( * self)) j = Seq.get (Model2.model ( ^ self)) j } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 72 4 72 30] Sat0.sat lit ( ^ self) } end module CreuSat_Assignments_Impl2_SetAssignment @@ -1842,85 +1841,83 @@ module CreuSat_Assignments_Impl2_SetAssignment use prelude.Prelude use Type use prelude.UInt8 + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = Invariant1.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = SatInner0.index_logic, function IndexLogic0.index_logic = UnsatInner0.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = Invariant4.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model7 with function Model0.model = Model8.model - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model0.model = Model6.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant0 with function Model0.model = Model2.model + type a = Type.alloc_alloc_global, function Model0.model = Model7.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model7 with function Model1.model = InvariantMirror0.model, + function Model0.model = FormulaInvariant0.model, function Model0.model = ClausePostWithRegardsToInner0.model, + function Model0.model = Invariant3.model, function Model1.model = Invariant5.model clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant5 with function Model0.model = Model5.model, - function Model1.model = Model7.model - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model3 with function Model0.model = Model5.model - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy1 - clone CreusotContracts_Logic_Model_Impl1_Model as Model1 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model2.model + type a = Type.alloc_alloc_global, function Model0.model = LongArePostUnitInner0.model, + function Model0.model = InvariantMirror0.model, function Model0.model = Model3.model, + function Model0.model = Invariant5.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant5 with predicate Invariant1.invariant' = Invariant4.invariant' + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model2.model, axiom . + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model1.modelTy + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . + type a = Type.alloc_alloc_global, function Model0.model = Model0.model, axiom . clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global), - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model4.model - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model7.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner0.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model5.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model2.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant1.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with function Model0.model = Model7.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant3.invariant', - function Model0.model = Model7.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model5.model, - predicate Invariant0.invariant' = Invariant3.invariant', function Model1.model = Model7.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant2 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model3.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = Invariant1.invariant', - predicate Invariant1.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant4.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = uint8 + type a = Type.alloc_alloc_global, type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant2.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model3 with function Model0.model = Invariant2.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant2.invariant_mirror + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model0.model = Invariant0.model, + function Model0.model = Model1.model, function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 + clone CreuSat_Logic_Logic_Unset as Unset0 + clone CreusotContracts_Logic_Model_Impl1_Model as Model1 with type t = Type.creusat_assignments_assignments + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 + clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global) + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant2 with axiom . + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant0 clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy2 with type t = uint8 - clone Core_Slice_Index_Impl2_Output as Output0 with type t = uint8 - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = uint8 - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = uint8 - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = uint8 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_assignments_assignments - clone CreuSat_Lit_Impl1_IsPositive_Interface as IsPositive0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic + clone Core_Slice_Index_Impl2_Output as Output0 with type t = uint8, type Output0.output = IndexMut0.output + clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = uint8, + predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = uint8, + predicate HasValue0.has_value = IndexMut0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = uint8, + predicate InBounds0.in_bounds = IndexMut0.in_bounds + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = uint8 clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = uint8, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model6.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - predicate ResolveElswhere0.resolve_elswhere = ResolveElswhere0.resolve_elswhere, type Output0.output = Output0.output - clone CreuSat_Lit_Impl1_Index_Interface as Index0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - let rec cfg set_assignment [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 73 4 73 76] (self : borrowed (Type.creusat_assignments_assignments)) (lit : Type.creusat_lit_lit) (_f : Type.creusat_formula_formula) (_t : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global)) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 61 4 61 43] Invariant0.invariant' ( * self) _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 62 4 62 44] Invariant1.invariant' lit (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 63 4 63 31] Invariant2.invariant' _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 64 4 64 42] TrailInvariant0.trail_invariant (Model0.model _t) _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 65 4 65 50] Unset0.unset (Seq.get (Model1.model self) (IndexLogic0.index_logic lit))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 66 4 66 58] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model _t) _f (Model1.model self)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 61 4 61 43] Invariant0.invariant' ( ^ self) _f } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 67 4 67 58] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model _t) _f (Model2.model ( ^ self)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 68 4 68 51] not Unset0.unset (Seq.get (Model2.model ( ^ self)) (IndexLogic0.index_logic lit)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 69 4 69 47] Seq.length (Model2.model ( ^ self)) = Seq.length (Model1.model self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 70 4 71 71] forall j : (int) . 0 <= j && j < Seq.length (Model1.model self) && j <> IndexLogic0.index_logic lit -> Seq.get (Model2.model ( * self)) j = Seq.get (Model2.model ( ^ self)) j } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 72 4 72 30] Sat0.sat lit ( ^ self) } + type a = Type.alloc_alloc_global + clone CreuSat_Lit_Impl1_Index_Interface as Index0 + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_assignments_assignments + clone CreuSat_Lit_Impl1_IsPositive_Interface as IsPositive0 + let rec cfg set_assignment [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 73 4 73 76] (self : borrowed (Type.creusat_assignments_assignments)) (lit : Type.creusat_lit_lit) (_f : Type.creusat_formula_formula) (_t : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global)) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 61 4 61 43] Invariant0.invariant' ( * self) _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 62 4 62 44] Invariant1.invariant' lit (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 63 4 63 31] Invariant2.invariant' _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 64 4 64 42] TrailInvariant0.trail_invariant (Model0.model _t) _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 65 4 65 50] Unset0.unset (Seq.get (Model1.model self) (IndexLogic0.index_logic lit))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 66 4 66 58] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model _t) _f (Model1.model self)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 61 4 61 43] Invariant0.invariant' ( ^ self) _f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 67 4 67 58] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model _t) _f (Model2.model ( ^ self)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 68 4 68 51] not Unset0.unset (Seq.get (Model2.model ( ^ self)) (IndexLogic0.index_logic lit)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 69 4 69 47] Seq.length (Model2.model ( ^ self)) = Seq.length (Model1.model self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 70 4 71 71] forall j : (int) . 0 <= j && j < Seq.length (Model1.model self) && j <> IndexLogic0.index_logic lit -> Seq.get (Model2.model ( * self)) j = Seq.get (Model2.model ( ^ self)) j } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 72 4 72 30] Sat0.sat lit ( ^ self) } = var _0 : (); @@ -1949,12 +1946,12 @@ module CreuSat_Assignments_Impl2_SetAssignment } BB0 { _6 <- (); - old_self_5 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 74 23 74 38] self_1); + old_self_5 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 74 23 74 38] self_1); goto BB1 } BB1 { _8 <- lit_2; - _7 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 76 11 76 28] IsPositive0.is_positive _8); + _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 76 11 76 28] IsPositive0.is_positive _8); goto BB2 } BB2 { @@ -1968,11 +1965,11 @@ module CreuSat_Assignments_Impl2_SetAssignment self_1 <- { self_1 with current = (let Type.CreuSat_Assignments_Assignments a = * self_1 in Type.CreuSat_Assignments_Assignments ( ^ _10)) }; assume { Resolve0.resolve self_1 }; _12 <- lit_2; - _11 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 77 19 77 30] Index0.index _12); + _11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 77 19 77 30] Index0.index _12); goto BB4 } BB4 { - _9 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 77 12 77 31] IndexMut0.index_mut _10 _11); + _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 77 12 77 31] IndexMut0.index_mut _10 _11); goto BB5 } BB5 { @@ -1986,11 +1983,11 @@ module CreuSat_Assignments_Impl2_SetAssignment self_1 <- { self_1 with current = (let Type.CreuSat_Assignments_Assignments a = * self_1 in Type.CreuSat_Assignments_Assignments ( ^ _14)) }; assume { Resolve0.resolve self_1 }; _16 <- lit_2; - _15 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 79 19 79 30] Index0.index _16); + _15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 79 19 79 30] Index0.index _16); goto BB7 } BB7 { - _13 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 79 12 79 31] IndexMut0.index_mut _14 _15); + _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 79 12 79 31] IndexMut0.index_mut _14 _15); goto BB8 } BB8 { @@ -2007,13 +2004,12 @@ end module CreuSat_Assignments_Impl2_New_Interface use prelude.Prelude use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror clone CreuSat_Logic_LogicAssignments_Impl1_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val new [@cfg:stackify] (f : Type.creusat_formula_formula) : Type.creusat_assignments_assignments - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 85 4 85 30] Invariant0.invariant' f} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 86 4 86 36] Invariant1.invariant' result f } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 85 4 85 30] Invariant0.invariant' f} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 86 4 86 36] Invariant1.invariant' result f } end module CreuSat_Assignments_Impl2_New @@ -2021,35 +2017,34 @@ module CreuSat_Assignments_Impl2_New use Type use mach.int.Int use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant3.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = Invariant3.index_logic + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model3 with function Model0.model = Model5.model - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with function Model0.model = Model3.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant2.invariant', - function Model0.model = Model3.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model4.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant1 with function Model0.model = Model1.model + type a = Type.alloc_alloc_global, function Model0.model = Model3.model, axiom . + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant2.invariant_internal + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model3 with function Model1.model = InvariantMirror0.model, + function Model0.model = FormulaInvariant0.model, function Model0.model = Invariant2.model + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model2.model, - predicate Invariant0.invariant' = Invariant2.invariant', function Model1.model = Model3.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model0.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . + type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, + function Model0.model = Model0.model, axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Invariant1.model + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Invariant0.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . use mach.int.UInt64 - clone Alloc_Vec_FromElem_Interface as FromElem0 with type t = uint8, function Model0.model = Model4.model - let rec cfg new [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 87 4 87 35] (f : Type.creusat_formula_formula) : Type.creusat_assignments_assignments - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 85 4 85 30] Invariant0.invariant' f} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 86 4 86 36] Invariant1.invariant' result f } + clone Alloc_Vec_FromElem_Interface as FromElem0 with type t = uint8 + let rec cfg new [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 87 4 87 35] (f : Type.creusat_formula_formula) : Type.creusat_assignments_assignments + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 85 4 85 30] Invariant0.invariant' f} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 86 4 86 36] Invariant1.invariant' result f } = var _0 : Type.creusat_assignments_assignments; @@ -2062,7 +2057,7 @@ module CreuSat_Assignments_Impl2_New } BB0 { _3 <- Type.creusat_formula_formula_Formula_num_vars f_1; - _2 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/assignments.rs" 88 20 88 49] FromElem0.from_elem (2 : uint8) _3); + _2 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 88 20 88 49] FromElem0.from_elem (2 : uint8) _3); goto BB1 } BB1 { @@ -2080,12 +2075,11 @@ module CreuSat_Clause_Impl0_Index_Interface use mach.int.Int use prelude.Prelude use Type - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause val index [@cfg:stackify] (self : Type.creusat_clause_clause) (ix : usize) : Type.creusat_lit_lit - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 22 4 22 36] UInt64.to_int ix < Seq.length (Model0.model self)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 23 4 23 39] Seq.get (Model0.model self) (UInt64.to_int ix) = result } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 22 4 22 36] UInt64.to_int ix < Seq.length (Model0.model self)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 23 4 23 39] Seq.get (Model0.model self) (UInt64.to_int ix) = result } end module CreuSat_Clause_Impl0_Index @@ -2095,22 +2089,21 @@ module CreuSat_Clause_Impl0_Index use prelude.Prelude use Type clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model + type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model0.model + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_clause_clause clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_lit_lit - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_lit_lit - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_lit_lit - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_lit_lit + clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_lit_lit, type Output0.output = Index0.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_lit_lit, + predicate HasValue0.has_value = Index0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_lit_lit, + predicate InBounds0.in_bounds = Index0.in_bounds clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.creusat_lit_lit, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model2.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - type Output0.output = Output0.output - let rec cfg index [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 24 4 24 38] (self : Type.creusat_clause_clause) (ix : usize) : Type.creusat_lit_lit - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 22 4 22 36] UInt64.to_int ix < Seq.length (Model0.model self)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 23 4 23 39] Seq.get (Model0.model self) (UInt64.to_int ix) = result } + type a = Type.alloc_alloc_global + let rec cfg index [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 24 4 24 38] (self : Type.creusat_clause_clause) (ix : usize) : Type.creusat_lit_lit + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 22 4 22 36] UInt64.to_int ix < Seq.length (Model0.model self)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 23 4 23 39] Seq.get (Model0.model self) (UInt64.to_int ix) = result } = var _0 : Type.creusat_lit_lit; @@ -2128,7 +2121,7 @@ module CreuSat_Clause_Impl0_Index BB0 { _5 <- Type.creusat_clause_clause_Clause_lits self_1; _6 <- ix_2; - _4 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 30 9 30 22] Index0.index _5 _6); + _4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 30 9 30 22] Index0.index _5 _6); goto BB1 } BB1 { @@ -2145,16 +2138,15 @@ module CreuSat_Clause_Impl1_IndexMut_Interface use mach.int.Int32 use prelude.Prelude use Type + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_clause_clause val index_mut [@cfg:stackify] (self : borrowed (Type.creusat_clause_clause)) (ix : usize) : borrowed (Type.creusat_lit_lit) - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 36 4 36 36] UInt64.to_int ix < Seq.length (Model0.model self)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 37 4 37 40] Seq.get (Model1.model ( * self)) (UInt64.to_int ix) = * result } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 38 4 38 40] Seq.get (Model1.model ( ^ self)) (UInt64.to_int ix) = ^ result } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 39 4 39 101] forall i : (int) . 0 <= i && i <> UInt64.to_int ix && i < Seq.length (Model0.model self) -> Seq.get (Model0.model self) i = Seq.get (Model1.model ( ^ self)) i } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 40 4 40 48] Seq.length (Model1.model ( ^ self)) = Seq.length (Model1.model ( * self)) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 36 4 36 36] UInt64.to_int ix < Seq.length (Model0.model self)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 37 4 37 40] Seq.get (Model1.model ( * self)) (UInt64.to_int ix) = * result } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 38 4 38 40] Seq.get (Model1.model ( ^ self)) (UInt64.to_int ix) = ^ result } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 39 4 39 101] forall i : (int) . 0 <= i && i <> UInt64.to_int ix && i < Seq.length (Model0.model self) -> Seq.get (Model0.model self) i = Seq.get (Model1.model ( ^ self)) i } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 40 4 40 48] Seq.length (Model1.model ( ^ self)) = Seq.length (Model1.model ( * self)) } end module CreuSat_Clause_Impl1_IndexMut @@ -2165,28 +2157,29 @@ module CreuSat_Clause_Impl1_IndexMut use prelude.Prelude use Type clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_lit_lit + type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model0.model + clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_clause_clause clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_lit_lit - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_lit_lit - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.creusat_lit_lit - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_lit_lit - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_lit_lit - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_clause_clause + clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_lit_lit, + type Output0.output = IndexMut0.output + clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.creusat_lit_lit, + predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_lit_lit, + predicate HasValue0.has_value = IndexMut0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_lit_lit, + predicate InBounds0.in_bounds = IndexMut0.in_bounds + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_lit_lit clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.creusat_lit_lit, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model2.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - predicate ResolveElswhere0.resolve_elswhere = ResolveElswhere0.resolve_elswhere, type Output0.output = Output0.output - let rec cfg index_mut [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 41 4 41 50] (self : borrowed (Type.creusat_clause_clause)) (ix : usize) : borrowed (Type.creusat_lit_lit) - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 36 4 36 36] UInt64.to_int ix < Seq.length (Model0.model self)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 37 4 37 40] Seq.get (Model1.model ( * self)) (UInt64.to_int ix) = * result } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 38 4 38 40] Seq.get (Model1.model ( ^ self)) (UInt64.to_int ix) = ^ result } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 39 4 39 101] forall i : (int) . 0 <= i && i <> UInt64.to_int ix && i < Seq.length (Model0.model self) -> Seq.get (Model0.model self) i = Seq.get (Model1.model ( ^ self)) i } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 40 4 40 48] Seq.length (Model1.model ( ^ self)) = Seq.length (Model1.model ( * self)) } + type a = Type.alloc_alloc_global + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_clause_clause + let rec cfg index_mut [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 41 4 41 50] (self : borrowed (Type.creusat_clause_clause)) (ix : usize) : borrowed (Type.creusat_lit_lit) + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 36 4 36 36] UInt64.to_int ix < Seq.length (Model0.model self)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 37 4 37 40] Seq.get (Model1.model ( * self)) (UInt64.to_int ix) = * result } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 38 4 38 40] Seq.get (Model1.model ( ^ self)) (UInt64.to_int ix) = ^ result } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 39 4 39 101] forall i : (int) . 0 <= i && i <> UInt64.to_int ix && i < Seq.length (Model0.model self) -> Seq.get (Model0.model self) i = Seq.get (Model1.model ( ^ self)) i } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 40 4 40 48] Seq.length (Model1.model ( ^ self)) = Seq.length (Model1.model ( * self)) } = var _0 : borrowed (Type.creusat_lit_lit); @@ -2207,7 +2200,7 @@ module CreuSat_Clause_Impl1_IndexMut self_1 <- { self_1 with current = (let Type.CreuSat_Clause_Clause a b c d = * self_1 in Type.CreuSat_Clause_Clause a b c ( ^ _6)) }; assume { Resolve0.resolve self_1 }; _7 <- ix_2; - _5 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 47 13 47 26] IndexMut0.index_mut _6 _7); + _5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 47 13 47 26] IndexMut0.index_mut _6 _7); goto BB1 } BB1 { @@ -2228,14 +2221,14 @@ module CreuSat_Clause_Impl2_Clone_Interface use prelude.Prelude use Type val clone' [@cfg:stackify] (self : Type.creusat_clause_clause) : Type.creusat_clause_clause - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 53 4 53 31] result = self } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 53 4 53 31] result = self } end module CreuSat_Clause_Impl2_Clone use prelude.Prelude use Type val clone' [@cfg:stackify] (self : Type.creusat_clause_clause) : Type.creusat_clause_clause - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 53 4 53 31] result = self } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 53 4 53 31] result = self } end module CreuSat_Clause_Impl3_Len_Interface @@ -2244,11 +2237,10 @@ module CreuSat_Clause_Impl3_Len_Interface use prelude.Prelude use Type use mach.int.Int - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause val len [@cfg:stackify] (self : Type.creusat_clause_clause) : usize - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 102 4 102 40] UInt64.to_int result = Seq.length (Model0.model self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 102 4 102 40] UInt64.to_int result = Seq.length (Model0.model self) } end module CreuSat_Clause_Impl3_Len @@ -2258,15 +2250,13 @@ module CreuSat_Clause_Impl3_Len use Type use mach.int.Int clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_lit_lit, type a = Type.alloc_alloc_global, - function Model0.model = Model2.model - let rec cfg len [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 103 4 103 30] (self : Type.creusat_clause_clause) : usize - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 102 4 102 40] UInt64.to_int result = Seq.length (Model0.model self) } + type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model0.model + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_clause_clause + clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_lit_lit, type a = Type.alloc_alloc_global + let rec cfg len [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 103 4 103 30] (self : Type.creusat_clause_clause) : usize + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 102 4 102 40] UInt64.to_int result = Seq.length (Model0.model self) } = var _0 : usize; @@ -2278,7 +2268,7 @@ module CreuSat_Clause_Impl3_Len } BB0 { _2 <- Type.creusat_clause_clause_Clause_lits self_1; - _0 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 104 8 104 23] Len0.len _2); + _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 104 8 104 23] Len0.len _2); goto BB1 } BB1 { @@ -2293,7 +2283,7 @@ module CreuSat_Lit_Impl1_CheckLitInvariant_Interface use mach.int.Int clone CreuSat_Logic_LogicLit_Impl1_Invariant_Interface as Invariant0 val check_lit_invariant [@cfg:stackify] (self : Type.creusat_lit_lit) (n : usize) : bool - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 44 4 44 44] result = Invariant0.invariant' self (UInt64.to_int n) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 44 4 44 44] result = Invariant0.invariant' self (UInt64.to_int n) } end module CreuSat_Lit_Impl1_CheckLitInvariant @@ -2301,11 +2291,11 @@ module CreuSat_Lit_Impl1_CheckLitInvariant use prelude.Prelude use Type use mach.int.Int - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Lit_Impl1_Index_Interface as Index0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - let rec cfg check_lit_invariant [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 45 4 45 55] (self : Type.creusat_lit_lit) (n : usize) : bool - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 44 4 44 44] result = Invariant0.invariant' self (UInt64.to_int n) } + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = Invariant0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant0 + clone CreuSat_Lit_Impl1_Index_Interface as Index0 + let rec cfg check_lit_invariant [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 45 4 45 55] (self : Type.creusat_lit_lit) (n : usize) : bool + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 44 4 44 44] result = Invariant0.invariant' self (UInt64.to_int n) } = var _0 : bool; @@ -2321,12 +2311,12 @@ module CreuSat_Lit_Impl1_CheckLitInvariant } BB0 { _4 <- self_1; - _3 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 46 8 46 20] Index0.index _4); + _3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 46 8 46 20] Index0.index _4); goto BB1 } BB1 { _5 <- n_2; - _0 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 46 8 46 24] _3 < _5); + _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 46 8 46 24] _3 < _5); return _0 } @@ -2339,10 +2329,10 @@ module CreuSat_Logic_LogicClause_Impl2_NoDuplicateIndexes use Type clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner_Interface as NoDuplicateIndexesInner0 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 - predicate no_duplicate_indexes [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 183 4 183 45] (self : Type.creusat_clause_clause) + predicate no_duplicate_indexes [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 183 4 183 45] (self : Type.creusat_clause_clause) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 184 8 184 55] NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model0.model self) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 184 8 184 55] NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model0.model self) end module CreuSat_Clause_Impl0_Output use Type @@ -2378,24 +2368,22 @@ module CreuSat_Clause_Impl0 use prelude.Prelude use mach.int.UInt64 clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 + type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model0.model + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model - clone CreuSat_Clause_Impl0_Index_Interface as Index0 with function Model0.model = Model0.model - clone CreuSat_Clause_Impl0_Output as Output0 - clone Core_Ops_Index_Index_Index_Interface as Index1 with type self = Type.creusat_clause_clause, type idx = usize, - val index = Index0.index, type Output0.output = Output0.output - clone Core_Ops_Index_Index_Output as Output1 with type self = Type.creusat_clause_clause, type idx = usize, - type output = Output0.output + function Model0.model = Index0.model + clone CreuSat_Clause_Impl0_Output as Output0 with type output = Output1.output, type Output0.output = Index1.output + clone CreuSat_Clause_Impl0_Index_Interface as Index0 with val index = Index1.index + clone Core_Ops_Index_Index_Index_Interface as Index1 with type self = Type.creusat_clause_clause, type idx = usize + clone Core_Ops_Index_Index_Output as Output1 with type self = Type.creusat_clause_clause, type idx = usize end module CreuSat_Clause_Impl3_NoDuplicates_Interface use prelude.Prelude use Type clone CreuSat_Logic_LogicClause_Impl2_NoDuplicateIndexes_Interface as NoDuplicateIndexes0 val no_duplicates [@cfg:stackify] (self : Type.creusat_clause_clause) : bool - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 78 4 78 53] result = NoDuplicateIndexes0.no_duplicate_indexes self } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 78 4 78 53] result = NoDuplicateIndexes0.no_duplicate_indexes self } end module CreuSat_Clause_Impl3_NoDuplicates @@ -2406,20 +2394,19 @@ module CreuSat_Clause_Impl3_NoDuplicates use mach.int.UInt64 use seq.Seq clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_Impl2_NoDuplicateIndexes as NoDuplicateIndexes0 with function Model0.model = Model1.model, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model - clone CreuSat_Lit_Impl1_Index_Interface as Index1 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Clause_Impl0_Index_Interface as Index0 with function Model0.model = Model0.model - clone CreuSat_Clause_Impl3_Len_Interface as Len0 with function Model0.model = Model0.model - let rec cfg no_duplicates [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 79 4 79 39] (self : Type.creusat_clause_clause) : bool - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 78 4 78 53] result = NoDuplicateIndexes0.no_duplicate_indexes self } + type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexes0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = NoDuplicateIndexes0.model, + function Model0.model = Model0.model + clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_clause_clause + clone CreuSat_Logic_LogicClause_Impl2_NoDuplicateIndexes as NoDuplicateIndexes0 + clone CreuSat_Lit_Impl1_Index_Interface as Index1 + clone CreuSat_Clause_Impl0_Index_Interface as Index0 + clone CreuSat_Clause_Impl3_Len_Interface as Len0 + let rec cfg no_duplicates [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 79 4 79 39] (self : Type.creusat_clause_clause) : bool + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 78 4 78 53] result = NoDuplicateIndexes0.no_duplicate_indexes self } = var _0 : bool; @@ -2466,14 +2453,14 @@ module CreuSat_Clause_Impl3_NoDuplicates goto BB1 } BB1 { - invariant no_dups { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 81 8 83 87] forall k : (int) . forall j : (int) . 0 <= j && j < UInt64.to_int i_2 && 0 <= k && k < j -> IndexLogic0.index_logic (Seq.get (Model0.model self_1) j) <> IndexLogic0.index_logic (Seq.get (Model0.model self_1) k) }; + invariant no_dups { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 81 8 83 87] forall k : (int) . forall j : (int) . 0 <= j && j < UInt64.to_int i_2 && 0 <= k && k < j -> IndexLogic0.index_logic (Seq.get (Model0.model self_1) j) <> IndexLogic0.index_logic (Seq.get (Model0.model self_1) k) }; _6 <- i_2; _8 <- self_1; - _7 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 84 18 84 28] Len0.len _8); + _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 84 18 84 28] Len0.len _8); goto BB2 } BB2 { - _5 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 84 14 84 28] _6 < _7); + _5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 84 14 84 28] _6 < _7); switch (_5) | False -> goto BB13 | _ -> goto BB3 @@ -2482,7 +2469,7 @@ module CreuSat_Clause_Impl3_NoDuplicates BB3 { _11 <- self_1; _12 <- i_2; - _10 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 85 23 85 30] Index0.index _11 _12); + _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 85 23 85 30] Index0.index _11 _12); goto BB4 } BB4 { @@ -2491,10 +2478,10 @@ module CreuSat_Clause_Impl3_NoDuplicates goto BB5 } BB5 { - invariant inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 87 12 87 113] forall k : (int) . 0 <= k && k < UInt64.to_int j_13 -> IndexLogic0.index_logic lit1_9 <> IndexLogic0.index_logic (Seq.get (Model0.model self_1) k) }; + invariant inv { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 87 12 87 113] forall k : (int) . 0 <= k && k < UInt64.to_int j_13 -> IndexLogic0.index_logic lit1_9 <> IndexLogic0.index_logic (Seq.get (Model0.model self_1) k) }; _16 <- j_13; _17 <- i_2; - _15 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 88 18 88 23] _16 < _17); + _15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 88 18 88 23] _16 < _17); switch (_15) | False -> goto BB12 | _ -> goto BB6 @@ -2503,22 +2490,22 @@ module CreuSat_Clause_Impl3_NoDuplicates BB6 { _20 <- self_1; _21 <- j_13; - _19 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 89 27 89 34] Index0.index _20 _21); + _19 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 89 27 89 34] Index0.index _20 _21); goto BB7 } BB7 { lit2_18 <- _19; _25 <- lit1_9; - _24 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 90 19 90 31] Index1.index _25); + _24 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 90 19 90 31] Index1.index _25); goto BB8 } BB8 { _27 <- lit2_18; - _26 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 90 35 90 47] Index1.index _27); + _26 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 90 35 90 47] Index1.index _27); goto BB9 } BB9 { - _23 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 90 19 90 47] _24 = _26); + _23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 90 19 90 47] _24 = _26); switch (_23) | False -> goto BB11 | _ -> goto BB10 @@ -2530,13 +2517,13 @@ module CreuSat_Clause_Impl3_NoDuplicates } BB11 { _22 <- (); - j_13 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 93 16 93 22] j_13 + (1 : usize)); + j_13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 93 16 93 22] j_13 + (1 : usize)); _4 <- (); goto BB5 } BB12 { _14 <- (); - i_2 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 95 12 95 18] i_2 + (1 : usize)); + i_2 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 95 12 95 18] i_2 + (1 : usize)); _4 <- (); goto BB1 } @@ -2557,7 +2544,7 @@ module CreuSat_Clause_Impl3_CheckClauseInvariant_Interface use mach.int.Int clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant0 val check_clause_invariant [@cfg:stackify] (self : Type.creusat_clause_clause) (n : usize) : bool - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 61 4 61 44] result = Invariant0.invariant' self (UInt64.to_int n) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 61 4 61 44] result = Invariant0.invariant' self (UInt64.to_int n) } end module CreuSat_Clause_Impl3_CheckClauseInvariant @@ -2567,28 +2554,26 @@ module CreuSat_Clause_Impl3_CheckClauseInvariant use mach.int.Int use mach.int.Int32 use seq.Seq + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = Invariant1.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant1.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant0 with function Model0.model = Model1.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model - clone CreuSat_Logic_LogicClause_Impl2_NoDuplicateIndexes as NoDuplicateIndexes0 with function Model0.model = Model1.model, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Clause_Impl3_NoDuplicates_Interface as NoDuplicates0 with predicate NoDuplicateIndexes0.no_duplicate_indexes = NoDuplicateIndexes0.no_duplicate_indexes - clone CreuSat_Lit_Impl1_CheckLitInvariant_Interface as CheckLitInvariant0 with predicate Invariant0.invariant' = Invariant1.invariant' - clone CreuSat_Clause_Impl0_Index_Interface as Index0 with function Model0.model = Model0.model - clone CreuSat_Clause_Impl3_Len_Interface as Len0 with function Model0.model = Model0.model - let rec cfg check_clause_invariant [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 62 4 62 58] (self : Type.creusat_clause_clause) (n : usize) : bool - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 61 4 61 44] result = Invariant0.invariant' self (UInt64.to_int n) } + type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant0.invariant_internal + clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Invariant0.model, + function Model0.model = Model0.model + clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_clause_clause + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant0 + clone CreuSat_Logic_LogicClause_Impl2_NoDuplicateIndexes as NoDuplicateIndexes0 with predicate NoDuplicateIndexes0.no_duplicate_indexes = NoDuplicates0.no_duplicate_indexes + clone CreuSat_Clause_Impl3_NoDuplicates_Interface as NoDuplicates0 + clone CreuSat_Lit_Impl1_CheckLitInvariant_Interface as CheckLitInvariant0 + clone CreuSat_Clause_Impl0_Index_Interface as Index0 + clone CreuSat_Clause_Impl3_Len_Interface as Len0 + let rec cfg check_clause_invariant [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 62 4 62 58] (self : Type.creusat_clause_clause) (n : usize) : bool + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 61 4 61 44] result = Invariant0.invariant' self (UInt64.to_int n) } = var _0 : bool; @@ -2627,14 +2612,14 @@ module CreuSat_Clause_Impl3_CheckClauseInvariant goto BB1 } BB1 { - invariant inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 64 8 64 87] forall j : (int) . 0 <= j && j < UInt64.to_int i_3 -> Invariant1.invariant' (Seq.get (Model0.model self_1) j) (UInt64.to_int n_2) }; + invariant inv { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 64 8 64 87] forall j : (int) . 0 <= j && j < UInt64.to_int i_3 -> Invariant1.invariant' (Seq.get (Model0.model self_1) j) (UInt64.to_int n_2) }; _7 <- i_3; _9 <- self_1; - _8 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 65 18 65 28] Len0.len _9); + _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 65 18 65 28] Len0.len _9); goto BB2 } BB2 { - _6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 65 14 65 28] _7 < _8); + _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 65 14 65 28] _7 < _8); switch (_6) | False -> goto BB8 | _ -> goto BB3 @@ -2643,13 +2628,13 @@ module CreuSat_Clause_Impl3_CheckClauseInvariant BB3 { _15 <- self_1; _16 <- i_3; - _14 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 66 16 66 23] Index0.index _15 _16); + _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 66 16 66 23] Index0.index _15 _16); goto BB4 } BB4 { _13 <- _14; _17 <- n_2; - _12 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 66 16 66 46] CheckLitInvariant0.check_lit_invariant _13 _17); + _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 66 16 66 46] CheckLitInvariant0.check_lit_invariant _13 _17); goto BB5 } BB5 { @@ -2665,14 +2650,14 @@ module CreuSat_Clause_Impl3_CheckClauseInvariant } BB7 { _10 <- (); - i_3 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 69 12 69 18] i_3 + (1 : usize)); + i_3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 69 12 69 18] i_3 + (1 : usize)); _5 <- (); goto BB1 } BB8 { _4 <- (); _24 <- self_1; - _23 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 71 11 71 31] NoDuplicates0.no_duplicates _24); + _23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 71 11 71 31] NoDuplicates0.no_duplicates _24); goto BB9 } BB9 { @@ -2720,10 +2705,10 @@ module CreuSat_Logic_LogicLit_Impl1_LitIn use mach.int.Int32 use seq.Seq clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 - predicate lit_in [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 61 4 61 42] (self : Type.creusat_lit_lit) (c : Type.creusat_clause_clause) + predicate lit_in [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 61 4 61 42] (self : Type.creusat_lit_lit) (c : Type.creusat_clause_clause) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 62 8 64 9] exists i : (int) . 0 <= i && i < Seq.length (Model0.model c) && Seq.get (Model0.model c) i = self + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 62 8 64 9] exists i : (int) . 0 <= i && i < Seq.length (Model0.model c) && Seq.get (Model0.model c) i = self end module CreusotContracts_Std1_Slice_Impl0_Model_Interface type t @@ -2775,10 +2760,9 @@ module Core_Slice_Impl0_Swap_Interface use mach.int.Int use seq.Permut use prelude.Prelude + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = t, type ModelTy0.modelTy = Model0.modelTy clone CreusotContracts_Std1_Slice_Impl0_Model_Interface as Model1 with type t = t, axiom . - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = t - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = seq t, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = seq t val swap [@cfg:stackify] (self : borrowed (seq t)) (a : usize) (b : usize) : () requires {UInt64.to_int a < Seq.length (Model0.model self)} requires {UInt64.to_int b < Seq.length (Model0.model self)} @@ -2792,10 +2776,9 @@ module Core_Slice_Impl0_Swap use mach.int.Int use seq.Permut use prelude.Prelude + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = t, type ModelTy0.modelTy = Model0.modelTy clone CreusotContracts_Std1_Slice_Impl0_Model_Interface as Model1 with type t = t, axiom . - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = t - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = seq t, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = seq t val swap [@cfg:stackify] (self : borrowed (seq t)) (a : usize) (b : usize) : () requires {UInt64.to_int a < Seq.length (Model0.model self)} requires {UInt64.to_int b < Seq.length (Model0.model self)} @@ -2813,21 +2796,20 @@ module CreuSat_Clause_Impl3_MoveToEnd_Interface use mach.int.Int32 use prelude.Prelude use Type + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy clone CreuSat_Logic_LogicLit_Impl1_LitIn_Interface as LitIn0 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_clause_clause clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant0 val move_to_end [@cfg:stackify] (self : borrowed (Type.creusat_clause_clause)) (idx : usize) (_f : Type.creusat_formula_formula) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 117 4 117 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 118 4 118 34] Seq.length (Model0.model self) > 0} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 119 4 119 37] UInt64.to_int idx < Seq.length (Model0.model self)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 117 4 117 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 120 4 121 85] forall i : (int) . 0 <= i && i < Seq.length (Model1.model ( ^ self)) -> (exists j : (int) . 0 <= j && j < Seq.length (Model0.model self) && Seq.get (Model1.model ( ^ self)) i = Seq.get (Model0.model self) j) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 122 4 122 63] Seq.get (Model1.model ( ^ self)) (Seq.length (Model1.model ( ^ self)) - 1) = Seq.get (Model0.model self) (UInt64.to_int idx) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 123 4 123 49] Seq.length (Model1.model ( ^ self)) = Seq.length (Model0.model self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 124 4 125 38] forall j : (int) . 0 <= j && j < Seq.length (Model0.model self) -> LitIn0.lit_in (Seq.get (Model0.model self) j) ( ^ self) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 117 4 117 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 118 4 118 34] Seq.length (Model0.model self) > 0} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 119 4 119 37] UInt64.to_int idx < Seq.length (Model0.model self)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 117 4 117 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 120 4 121 85] forall i : (int) . 0 <= i && i < Seq.length (Model1.model ( ^ self)) -> (exists j : (int) . 0 <= j && j < Seq.length (Model0.model self) && Seq.get (Model1.model ( ^ self)) i = Seq.get (Model0.model self) j) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 122 4 122 63] Seq.get (Model1.model ( ^ self)) (Seq.length (Model1.model ( ^ self)) - 1) = Seq.get (Model0.model self) (UInt64.to_int idx) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 123 4 123 49] Seq.length (Model1.model ( ^ self)) = Seq.length (Model0.model self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 124 4 125 38] forall j : (int) . 0 <= j && j < Seq.length (Model0.model self) -> LitIn0.lit_in (Seq.get (Model0.model self) j) ( ^ self) } end module CreuSat_Clause_Impl3_MoveToEnd @@ -2837,43 +2819,44 @@ module CreuSat_Clause_Impl3_MoveToEnd use mach.int.Int32 use prelude.Prelude use Type - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant1.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = Invariant1.index_logic + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicLit_Impl1_LitIn as LitIn0 with function Model0.model = Model1.model - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant0 with function Model0.model = Model1.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = seq (Type.creusat_lit_lit) - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_lit_lit - clone CreusotContracts_Std1_Slice_Impl0_Model as Model4 with type t = Type.creusat_lit_lit, axiom . + type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant0.invariant_internal + clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Invariant0.model, + function Model0.model = Model0.model, function Model0.model = LitIn0.model + clone CreuSat_Logic_LogicLit_Impl1_LitIn as LitIn0 + clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_clause_clause + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant0 + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_lit_lit, + type ModelTy0.modelTy = Model5.modelTy + clone CreusotContracts_Std1_Slice_Impl0_Model as Model4 with type t = Type.creusat_lit_lit, + function Model0.model = DerefMut0.model, function Model1.model = Swap0.model, function Model0.model = Model5.model, + axiom . clone CreusotContracts_Logic_Model_Impl1_Model as Model5 with type t = seq (Type.creusat_lit_lit), - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model4.model - clone Core_Slice_Impl0_Swap_Interface as Swap0 with type t = Type.creusat_lit_lit, - function Model0.model = Model5.model, function Model1.model = Model4.model - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_clause_clause - clone Alloc_Vec_Impl11_DerefMut_Interface as DerefMut0 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model4.model, function Model1.model = Model2.model + function Model0.model = Swap0.model clone CreusotContracts_Logic_Model_Impl0_Model as Model3 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model - clone CreuSat_Clause_Impl3_Len_Interface as Len0 with function Model0.model = Model3.model - let rec cfg move_to_end [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 126 4 126 55] (self : borrowed (Type.creusat_clause_clause)) (idx : usize) (_f : Type.creusat_formula_formula) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 117 4 117 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 118 4 118 34] Seq.length (Model0.model self) > 0} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 119 4 119 37] UInt64.to_int idx < Seq.length (Model0.model self)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 117 4 117 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 120 4 121 85] forall i : (int) . 0 <= i && i < Seq.length (Model1.model ( ^ self)) -> (exists j : (int) . 0 <= j && j < Seq.length (Model0.model self) && Seq.get (Model1.model ( ^ self)) i = Seq.get (Model0.model self) j) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 122 4 122 63] Seq.get (Model1.model ( ^ self)) (Seq.length (Model1.model ( ^ self)) - 1) = Seq.get (Model0.model self) (UInt64.to_int idx) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 123 4 123 49] Seq.length (Model1.model ( ^ self)) = Seq.length (Model0.model self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 124 4 125 38] forall j : (int) . 0 <= j && j < Seq.length (Model0.model self) -> LitIn0.lit_in (Seq.get (Model0.model self) j) ( ^ self) } + function Model0.model = Len0.model + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = seq (Type.creusat_lit_lit) + clone Core_Slice_Impl0_Swap_Interface as Swap0 with type t = Type.creusat_lit_lit + clone Alloc_Vec_Impl11_DerefMut_Interface as DerefMut0 with type t = Type.creusat_lit_lit, + type a = Type.alloc_alloc_global + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_clause_clause + clone CreuSat_Clause_Impl3_Len_Interface as Len0 + let rec cfg move_to_end [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 126 4 126 55] (self : borrowed (Type.creusat_clause_clause)) (idx : usize) (_f : Type.creusat_formula_formula) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 117 4 117 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 118 4 118 34] Seq.length (Model0.model self) > 0} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 119 4 119 37] UInt64.to_int idx < Seq.length (Model0.model self)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 117 4 117 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 120 4 121 85] forall i : (int) . 0 <= i && i < Seq.length (Model1.model ( ^ self)) -> (exists j : (int) . 0 <= j && j < Seq.length (Model0.model self) && Seq.get (Model1.model ( ^ self)) i = Seq.get (Model0.model self) j) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 122 4 122 63] Seq.get (Model1.model ( ^ self)) (Seq.length (Model1.model ( ^ self)) - 1) = Seq.get (Model0.model self) (UInt64.to_int idx) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 123 4 123 49] Seq.length (Model1.model ( ^ self)) = Seq.length (Model0.model self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 124 4 125 38] forall j : (int) . 0 <= j && j < Seq.length (Model0.model self) -> LitIn0.lit_in (Seq.get (Model0.model self) j) ( ^ self) } = var _0 : (); @@ -2897,15 +2880,15 @@ module CreuSat_Clause_Impl3_MoveToEnd } BB0 { _6 <- * self_1; - _5 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 127 18 127 28] Len0.len _6); + _5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 127 18 127 28] Len0.len _6); goto BB1 } BB1 { - end'_4 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 127 18 127 32] _5 - (1 : usize)); + end'_4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 127 18 127 32] _5 - (1 : usize)); _10 <- borrow_mut (Type.creusat_clause_clause_Clause_lits ( * self_1)); self_1 <- { self_1 with current = (let Type.CreuSat_Clause_Clause a b c d = * self_1 in Type.CreuSat_Clause_Clause a b c ( ^ _10)) }; assume { Resolve0.resolve self_1 }; - _9 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 128 8 128 32] DerefMut0.deref_mut _10); + _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 128 8 128 32] DerefMut0.deref_mut _10); goto BB2 } BB2 { @@ -2913,7 +2896,7 @@ module CreuSat_Clause_Impl3_MoveToEnd _9 <- { _9 with current = ( ^ _8) }; _11 <- idx_2; _12 <- end'_4; - _7 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 128 8 128 32] Swap0.swap _8 _11 _12); + _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 128 8 128 32] Swap0.swap _8 _11 _12); goto BB3 } BB3 { @@ -2964,21 +2947,20 @@ module CreuSat_Clause_Impl3_RemoveFromClause_Interface use mach.int.Int32 use prelude.Prelude use Type + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy clone CreuSat_Logic_LogicLit_Impl1_LitIn_Interface as LitIn0 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_clause_clause clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant0 val remove_from_clause [@cfg:stackify] (self : borrowed (Type.creusat_clause_clause)) (idx : usize) (_f : Type.creusat_formula_formula) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 134 4 134 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 135 4 135 34] Seq.length (Model0.model self) > 0} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 136 4 136 37] UInt64.to_int idx < Seq.length (Model0.model self)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 134 4 134 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 137 4 138 83] forall i : (int) . 0 <= i && i < Seq.length (Model1.model ( ^ self)) -> (exists j : (int) . 0 <= j && j < Seq.length (Model0.model self) && Seq.get (Model1.model ( ^ self)) i = Seq.get (Model0.model self) j) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 139 4 139 53] Seq.length (Model1.model ( ^ self)) + 1 = Seq.length (Model0.model self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 140 4 140 44] not LitIn0.lit_in (Seq.get (Model0.model self) (UInt64.to_int idx)) ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 141 4 142 51] forall j : (int) . 0 <= j && j < Seq.length (Model0.model self) && j <> UInt64.to_int idx -> LitIn0.lit_in (Seq.get (Model0.model self) j) ( ^ self) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 134 4 134 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 135 4 135 34] Seq.length (Model0.model self) > 0} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 136 4 136 37] UInt64.to_int idx < Seq.length (Model0.model self)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 134 4 134 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 137 4 138 83] forall i : (int) . 0 <= i && i < Seq.length (Model1.model ( ^ self)) -> (exists j : (int) . 0 <= j && j < Seq.length (Model0.model self) && Seq.get (Model1.model ( ^ self)) i = Seq.get (Model0.model self) j) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 139 4 139 53] Seq.length (Model1.model ( ^ self)) + 1 = Seq.length (Model0.model self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 140 4 140 44] not LitIn0.lit_in (Seq.get (Model0.model self) (UInt64.to_int idx)) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 141 4 142 51] forall j : (int) . 0 <= j && j < Seq.length (Model0.model self) && j <> UInt64.to_int idx -> LitIn0.lit_in (Seq.get (Model0.model self) j) ( ^ self) } end module CreuSat_Clause_Impl3_RemoveFromClause @@ -2988,35 +2970,32 @@ module CreuSat_Clause_Impl3_RemoveFromClause use mach.int.Int32 use prelude.Prelude use Type - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant1.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = Invariant1.index_logic + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicLit_Impl1_LitIn as LitIn0 with function Model0.model = Model1.model - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant0 with function Model0.model = Model1.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model + type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant0.invariant_internal + clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Invariant0.model, + function Model0.model = Model0.model, function Model0.model = LitIn0.model + clone CreuSat_Logic_LogicLit_Impl1_LitIn as LitIn0 + clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_clause_clause + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant0 clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_clause_clause - clone Alloc_Vec_Impl1_Pop_Interface as Pop0 with type t = Type.creusat_lit_lit, type a = Type.alloc_alloc_global, - function Model0.model = Model2.model - clone CreuSat_Clause_Impl3_MoveToEnd_Interface as MoveToEnd0 with predicate Invariant0.invariant' = Invariant0.invariant', - function Model0.model = Model0.model, function Model1.model = Model1.model, predicate LitIn0.lit_in = LitIn0.lit_in - let rec cfg remove_from_clause [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 143 4 143 66] (self : borrowed (Type.creusat_clause_clause)) (idx : usize) (_f : Type.creusat_formula_formula) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 134 4 134 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 135 4 135 34] Seq.length (Model0.model self) > 0} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 136 4 136 37] UInt64.to_int idx < Seq.length (Model0.model self)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 134 4 134 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 137 4 138 83] forall i : (int) . 0 <= i && i < Seq.length (Model1.model ( ^ self)) -> (exists j : (int) . 0 <= j && j < Seq.length (Model0.model self) && Seq.get (Model1.model ( ^ self)) i = Seq.get (Model0.model self) j) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 139 4 139 53] Seq.length (Model1.model ( ^ self)) + 1 = Seq.length (Model0.model self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 140 4 140 44] not LitIn0.lit_in (Seq.get (Model0.model self) (UInt64.to_int idx)) ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 141 4 142 51] forall j : (int) . 0 <= j && j < Seq.length (Model0.model self) && j <> UInt64.to_int idx -> LitIn0.lit_in (Seq.get (Model0.model self) j) ( ^ self) } + clone Alloc_Vec_Impl1_Pop_Interface as Pop0 with type t = Type.creusat_lit_lit, type a = Type.alloc_alloc_global + clone CreuSat_Clause_Impl3_MoveToEnd_Interface as MoveToEnd0 + let rec cfg remove_from_clause [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 143 4 143 66] (self : borrowed (Type.creusat_clause_clause)) (idx : usize) (_f : Type.creusat_formula_formula) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 134 4 134 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 135 4 135 34] Seq.length (Model0.model self) > 0} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 136 4 136 37] UInt64.to_int idx < Seq.length (Model0.model self)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 134 4 134 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 137 4 138 83] forall i : (int) . 0 <= i && i < Seq.length (Model1.model ( ^ self)) -> (exists j : (int) . 0 <= j && j < Seq.length (Model0.model self) && Seq.get (Model1.model ( ^ self)) i = Seq.get (Model0.model self) j) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 139 4 139 53] Seq.length (Model1.model ( ^ self)) + 1 = Seq.length (Model0.model self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 140 4 140 44] not LitIn0.lit_in (Seq.get (Model0.model self) (UInt64.to_int idx)) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 141 4 142 51] forall j : (int) . 0 <= j && j < Seq.length (Model0.model self) && j <> UInt64.to_int idx -> LitIn0.lit_in (Seq.get (Model0.model self) j) ( ^ self) } = var _0 : (); @@ -3040,13 +3019,13 @@ module CreuSat_Clause_Impl3_RemoveFromClause self_1 <- { self_1 with current = ( ^ _5) }; _6 <- idx_2; _7 <- _f_3; - _4 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 144 8 144 33] MoveToEnd0.move_to_end _5 _6 _7); + _4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 144 8 144 33] MoveToEnd0.move_to_end _5 _6 _7); goto BB1 } BB1 { _9 <- borrow_mut (Type.creusat_clause_clause_Clause_lits ( * self_1)); self_1 <- { self_1 with current = (let Type.CreuSat_Clause_Clause a b c d = * self_1 in Type.CreuSat_Clause_Clause a b c ( ^ _9)) }; - _8 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 145 8 145 23] Pop0.pop _9); + _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 145 8 145 23] Pop0.pop _9); goto BB2 } BB2 { @@ -3066,10 +3045,10 @@ module CreuSat_Logic_LogicClause_Impl2_VarsInRange use mach.int.Int clone CreuSat_Logic_LogicClause_VarsInRangeInner_Interface as VarsInRangeInner0 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 - predicate vars_in_range [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 178 4 178 46] (self : Type.creusat_clause_clause) (n : int) + predicate vars_in_range [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 178 4 178 46] (self : Type.creusat_clause_clause) (n : int) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 179 8 179 51] VarsInRangeInner0.vars_in_range_inner (Model0.model self) n + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 179 8 179 51] VarsInRangeInner0.vars_in_range_inner (Model0.model self) n end module CreuSat_Logic_LogicClause_Impl2_SatInner_Interface use Type @@ -3088,10 +3067,10 @@ module CreuSat_Logic_LogicClause_Impl2_SatInner use mach.int.Int32 clone CreuSat_Logic_LogicLit_Impl1_SatInner_Interface as SatInner0 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 - predicate sat_inner [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 158 4 158 57] (self : Type.creusat_clause_clause) (a : Seq.seq uint8) + predicate sat_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 158 4 158 57] (self : Type.creusat_clause_clause) (a : Seq.seq uint8) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 159 8 162 9] exists i : (int) . 0 <= i && i < Seq.length (Model0.model self) && SatInner0.sat_inner (Seq.get (Model0.model self) i) a + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 159 8 162 9] exists i : (int) . 0 <= i && i < Seq.length (Model0.model self) && SatInner0.sat_inner (Seq.get (Model0.model self) i) a end module CreuSat_Logic_LogicLit_Impl1_UnsetInner_Interface use Type @@ -3109,10 +3088,10 @@ module CreuSat_Logic_LogicLit_Impl1_UnsetInner use prelude.UInt8 use mach.int.Int32 clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - predicate unset_inner [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 101 4 101 59] (self : Type.creusat_lit_lit) (a : Seq.seq uint8) + predicate unset_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 101 4 101 59] (self : Type.creusat_lit_lit) (a : Seq.seq uint8) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 102 8 102 51] UInt8.to_int (Seq.get a (IndexLogic0.index_logic self)) >= 2 + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 102 8 102 51] UInt8.to_int (Seq.get a (IndexLogic0.index_logic self)) >= 2 end module CreuSat_Logic_LogicClause_Impl2_UnitInner_Interface use Type @@ -3133,10 +3112,10 @@ module CreuSat_Logic_LogicClause_Impl2_UnitInner clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 clone CreuSat_Logic_LogicClause_Impl2_SatInner_Interface as SatInner0 clone CreuSat_Logic_LogicClause_Impl2_VarsInRange_Interface as VarsInRange0 - predicate unit_inner [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 129 4 129 54] (self : Type.creusat_clause_clause) (a : Seq.seq uint8) + predicate unit_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 129 4 129 54] (self : Type.creusat_clause_clause) (a : Seq.seq uint8) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 130 8 137 9] VarsInRange0.vars_in_range self (Seq.length a) && not SatInner0.sat_inner self a && (exists i : (int) . 0 <= i && i < Seq.length (Model0.model self) && UnsetInner0.unset_inner (Seq.get (Model0.model self) i) a && (forall j : (int) . 0 <= j && j < Seq.length (Model0.model self) && j <> i -> not UnsetInner0.unset_inner (Seq.get (Model0.model self) j) a)) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 130 8 137 9] VarsInRange0.vars_in_range self (Seq.length a) && not SatInner0.sat_inner self a && (exists i : (int) . 0 <= i && i < Seq.length (Model0.model self) && UnsetInner0.unset_inner (Seq.get (Model0.model self) i) a && (forall j : (int) . 0 <= j && j < Seq.length (Model0.model self) && j <> i -> not UnsetInner0.unset_inner (Seq.get (Model0.model self) j) a)) end module CreuSat_Logic_LogicClause_Impl2_Unit_Interface use Type @@ -3146,10 +3125,10 @@ module CreuSat_Logic_LogicClause_Impl2_Unit use Type clone CreuSat_Logic_LogicClause_Impl2_UnitInner_Interface as UnitInner0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - predicate unit [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 140 4 140 45] (self : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) + predicate unit [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 140 4 140 45] (self : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 141 8 141 41] UnitInner0.unit_inner self (Model0.model a) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 141 8 141 41] UnitInner0.unit_inner self (Model0.model a) end module CreuSat_Logic_LogicLit_Impl1_Unset_Interface use Type @@ -3159,10 +3138,10 @@ module CreuSat_Logic_LogicLit_Impl1_Unset use Type clone CreuSat_Logic_LogicLit_Impl1_UnsetInner_Interface as UnsetInner0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - predicate unset [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 111 4 111 46] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) + predicate unset [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 111 4 111 46] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 112 8 112 42] UnsetInner0.unset_inner self (Model0.model a) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 112 8 112 42] UnsetInner0.unset_inner self (Model0.model a) end module CreuSat_Logic_LogicLit_Impl1_Unsat_Interface use Type @@ -3172,10 +3151,10 @@ module CreuSat_Logic_LogicLit_Impl1_Unsat use Type clone CreuSat_Logic_LogicLit_Impl1_UnsatInner_Interface as UnsatInner0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - predicate unsat [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 116 4 116 46] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) + predicate unsat [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 116 4 116 46] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 117 8 117 42] UnsatInner0.unsat_inner self (Model0.model a) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 117 8 117 42] UnsatInner0.unsat_inner self (Model0.model a) end module CreuSat_Assignments_Impl0_Output use mach.int.Int @@ -3190,30 +3169,30 @@ module CreuSat_Assignments_Impl0 use prelude.UInt8 use Type use mach.int.UInt64 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model0.model + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model - clone CreuSat_Assignments_Impl0_Index_Interface as Index0 with function Model0.model = Model0.model - clone CreuSat_Assignments_Impl0_Output as Output0 + function Model0.model = Index0.model + clone CreuSat_Assignments_Impl0_Output as Output0 with type output = Output1.output, + type Output0.output = Index1.output + clone CreuSat_Assignments_Impl0_Index_Interface as Index0 with val index = Index1.index clone Core_Ops_Index_Index_Index_Interface as Index1 with type self = Type.creusat_assignments_assignments, - type idx = usize, val index = Index0.index, type Output0.output = Output0.output - clone Core_Ops_Index_Index_Output as Output1 with type self = Type.creusat_assignments_assignments, type idx = usize, - type output = Output0.output + type idx = usize + clone Core_Ops_Index_Index_Output as Output1 with type self = Type.creusat_assignments_assignments, type idx = usize end module CreuSat_Lit_Impl1_LitUnsat_Interface use seq.Seq use Type use prelude.Prelude + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy clone CreuSat_Logic_LogicLit_Impl1_Unsat_Interface as Unsat0 clone CreuSat_Logic_LogicLit_Impl1_Invariant_Interface as Invariant0 - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments val lit_unsat [@cfg:stackify] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) : bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 62 4 62 43] Invariant0.invariant' self (Seq.length (Model0.model a))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 63 4 63 40] result = Unsat0.unsat self a } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 62 4 62 43] Invariant0.invariant' self (Seq.length (Model0.model a))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 63 4 63 40] result = Unsat0.unsat self a } end module CreuSat_Lit_Impl1_LitUnsat @@ -3222,25 +3201,25 @@ module CreuSat_Lit_Impl1_LitUnsat use prelude.Prelude use mach.int.Int use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat0 with function Model0.model = Model1.model, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = Invariant0.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model0.model, + function Model0.model = Unsat0.model + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat0 + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant0 + clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_assignments_assignments use mach.int.UInt64 - clone CreuSat_Lit_Impl1_IsPositive_Interface as IsPositive0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic - clone CreuSat_Lit_Impl1_Index_Interface as Index0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Assignments_Impl0_Index_Interface as Index1 with function Model0.model = Model0.model - let rec cfg lit_unsat [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 64 4 64 51] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) : bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 62 4 62 43] Invariant0.invariant' self (Seq.length (Model0.model a))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 63 4 63 40] result = Unsat0.unsat self a } + clone CreuSat_Assignments_Impl0_Index_Interface as Index1 + clone CreuSat_Lit_Impl1_Index_Interface as Index0 + clone CreuSat_Lit_Impl1_IsPositive_Interface as IsPositive0 + let rec cfg lit_unsat [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 64 4 64 51] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) : bool + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 62 4 62 43] Invariant0.invariant' self (Seq.length (Model0.model a))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 63 4 63 40] result = Unsat0.unsat self a } = var _0 : bool; @@ -3265,7 +3244,7 @@ module CreuSat_Lit_Impl1_LitUnsat } BB0 { _4 <- self_1; - _3 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 65 14 65 32] IsPositive0.is_positive _4); + _3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 65 14 65 32] IsPositive0.is_positive _4); goto BB1 } BB1 { @@ -3277,31 +3256,31 @@ module CreuSat_Lit_Impl1_LitUnsat BB2 { _12 <- a_2; _14 <- self_1; - _13 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 67 24 67 36] Index0.index _14); + _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 67 24 67 36] Index0.index _14); goto BB6 } BB3 { _7 <- a_2; _9 <- self_1; - _8 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 66 23 66 35] Index0.index _9); + _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 66 23 66 35] Index0.index _9); goto BB4 } BB4 { - _6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 66 21 66 36] Index1.index _7 _8); + _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 66 21 66 36] Index1.index _7 _8); goto BB5 } BB5 { _5 <- _6; - _0 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 66 20 66 42] _5 = (0 : uint8)); + _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 66 20 66 42] _5 = (0 : uint8)); goto BB8 } BB6 { - _11 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 67 22 67 37] Index1.index _12 _13); + _11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 67 22 67 37] Index1.index _12 _13); goto BB7 } BB7 { _10 <- _11; - _0 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 67 21 67 43] _10 = (1 : uint8)); + _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 67 21 67 43] _10 = (1 : uint8)); goto BB8 } BB8 { @@ -3313,14 +3292,13 @@ module CreuSat_Lit_Impl1_LitUnset_Interface use seq.Seq use Type use prelude.Prelude + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy clone CreuSat_Logic_LogicLit_Impl1_Unset_Interface as Unset0 clone CreuSat_Logic_LogicLit_Impl1_Invariant_Interface as Invariant0 - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments val lit_unset [@cfg:stackify] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) : bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 73 4 73 43] Invariant0.invariant' self (Seq.length (Model0.model a))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 74 4 74 40] result = Unset0.unset self a } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 73 4 73 43] Invariant0.invariant' self (Seq.length (Model0.model a))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 74 4 74 40] result = Unset0.unset self a } end module CreuSat_Lit_Impl1_LitUnset @@ -3329,22 +3307,23 @@ module CreuSat_Lit_Impl1_LitUnset use prelude.Prelude use mach.int.Int use prelude.UInt8 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_UnsetInner as UnsetInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Unset as Unset0 with function Model0.model = Model1.model, - predicate UnsetInner0.unset_inner = UnsetInner0.unset_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = Invariant0.index_logic, + function IndexLogic0.index_logic = UnsetInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_UnsetInner as UnsetInner0 with predicate UnsetInner0.unset_inner = Unset0.unset_inner + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model0.model, + function Model0.model = Unset0.model + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicLit_Impl1_Unset as Unset0 + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant0 + clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_assignments_assignments use mach.int.UInt64 - clone CreuSat_Lit_Impl1_Index_Interface as Index0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Assignments_Impl0_Index_Interface as Index1 with function Model0.model = Model0.model - let rec cfg lit_unset [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 75 4 75 51] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) : bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 73 4 73 43] Invariant0.invariant' self (Seq.length (Model0.model a))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 74 4 74 40] result = Unset0.unset self a } + clone CreuSat_Assignments_Impl0_Index_Interface as Index1 + clone CreuSat_Lit_Impl1_Index_Interface as Index0 + let rec cfg lit_unset [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 75 4 75 51] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) : bool + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 73 4 73 43] Invariant0.invariant' self (Seq.length (Model0.model a))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 74 4 74 40] result = Unset0.unset self a } = var _0 : bool; @@ -3363,16 +3342,16 @@ module CreuSat_Lit_Impl1_LitUnset BB0 { _5 <- a_2; _7 <- self_1; - _6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 76 10 76 22] Index0.index _7); + _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 76 10 76 22] Index0.index _7); goto BB1 } BB1 { - _4 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 76 8 76 23] Index1.index _5 _6); + _4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 76 8 76 23] Index1.index _5 _6); goto BB2 } BB2 { _3 <- _4; - _0 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 76 8 76 28] _3 >= (2 : uint8)); + _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 76 8 76 28] _3 >= (2 : uint8)); return _0 } @@ -3384,19 +3363,18 @@ module CreuSat_Clause_Impl3_UnitAndUnset_Interface use mach.int.Int32 use prelude.Prelude use Type + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy clone CreuSat_Logic_LogicLit_Impl1_Unset_Interface as Unset0 clone CreuSat_Logic_LogicClause_Impl2_Unit_Interface as Unit0 clone CreuSat_Logic_LogicAssignments_Impl1_Invariant_Interface as Invariant0 clone CreuSat_Logic_LogicClause_InvariantInternal_Interface as InvariantInternal0 - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause val unit_and_unset [@cfg:stackify] (self : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) (_f : Type.creusat_formula_formula) : bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 150 4 150 56] InvariantInternal0.invariant_internal (Model0.model self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 151 4 151 33] Invariant0.invariant' a _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 152 4 152 34] Seq.length (Model0.model self) > 1} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 153 4 153 40] result -> Unit0.unit self a } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 154 4 154 47] result -> Unset0.unset (Seq.get (Model0.model self) 0) a } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 150 4 150 56] InvariantInternal0.invariant_internal (Model0.model self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 151 4 151 33] Invariant0.invariant' a _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 152 4 152 34] Seq.length (Model0.model self) > 1} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 153 4 153 40] result -> Unit0.unit self a } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 154 4 154 47] result -> Unset0.unset (Seq.get (Model0.model self) 0) a } end module CreuSat_Clause_Impl3_UnitAndUnset @@ -3407,55 +3385,52 @@ module CreuSat_Clause_Impl3_UnitAndUnset use prelude.Prelude use Type use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model0.model = Model4.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant0 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant1.invariant' - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat0 with function Model0.model = Model2.model, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_UnsetInner as UnsetInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Unset as Unset0 with function Model0.model = Model2.model, - predicate UnsetInner0.unset_inner = UnsetInner0.unset_inner - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = UnsetInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic, function IndexLogic0.index_logic = Invariant1.index_logic, + function IndexLogic0.index_logic = SatInner1.index_logic + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = SatInner0.sat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model3.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner0 with function Model0.model = Model1.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicClause_Impl2_VarsInRange as VarsInRange0 with function Model0.model = Model1.model, - predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner - clone CreuSat_Logic_LogicClause_Impl2_UnitInner as UnitInner0 with predicate VarsInRange0.vars_in_range = VarsInRange0.vars_in_range, - predicate SatInner0.sat_inner = SatInner0.sat_inner, function Model0.model = Model1.model, - predicate UnsetInner0.unset_inner = UnsetInner0.unset_inner - clone CreuSat_Logic_LogicClause_Impl2_Unit as Unit0 with function Model0.model = Model2.model, - predicate UnitInner0.unit_inner = UnitInner0.unit_inner - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy1 + type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model0.model, + function Model0.model = UnitInner0.model, function Model0.model = VarsInRange0.model, + function Model0.model = SatInner0.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = UnitInner0.sat_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner, + predicate VarsInRangeInner0.vars_in_range_inner = VarsInRange0.vars_in_range_inner + clone CreuSat_Logic_LogicClause_Impl2_VarsInRange as VarsInRange0 with predicate VarsInRange0.vars_in_range = UnitInner0.vars_in_range + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model2.model, axiom . + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner + clone CreuSat_Logic_LogicLit_Impl1_UnsetInner as UnsetInner0 with predicate UnsetInner0.unset_inner = Unset0.unset_inner, + predicate UnsetInner0.unset_inner = UnitInner0.unset_inner + clone CreuSat_Logic_LogicClause_Impl2_UnitInner as UnitInner0 with predicate UnitInner0.unit_inner = Unit0.unit_inner + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model0.model = Invariant0.model, + function Model0.model = Unit0.model, function Model0.model = Unset0.model, function Model0.model = Unsat0.model + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat0 + clone CreuSat_Logic_LogicLit_Impl1_Unset as Unset0 + clone CreuSat_Logic_LogicClause_Impl2_Unit as Unit0 + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant0 + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 + clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_clause_clause + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model5.modelTy clone CreusotContracts_Logic_Model_Impl0_Model as Model5 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model2.model - clone CreuSat_Lit_Impl1_LitUnsat_Interface as LitUnsat0 with function Model0.model = Model5.model, - predicate Invariant0.invariant' = Invariant1.invariant', predicate Unsat0.unsat = Unsat0.unsat - clone CreuSat_Lit_Impl1_LitUnset_Interface as LitUnset0 with function Model0.model = Model5.model, - predicate Invariant0.invariant' = Invariant1.invariant', predicate Unset0.unset = Unset0.unset - clone CreuSat_Clause_Impl0_Index_Interface as Index0 with function Model0.model = Model0.model - clone CreuSat_Clause_Impl3_Len_Interface as Len0 with function Model0.model = Model0.model - let rec cfg unit_and_unset [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 155 4 155 71] (self : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) (_f : Type.creusat_formula_formula) : bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 150 4 150 56] InvariantInternal0.invariant_internal (Model0.model self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 151 4 151 33] Invariant0.invariant' a _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 152 4 152 34] Seq.length (Model0.model self) > 1} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 153 4 153 40] result -> Unit0.unit self a } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 154 4 154 47] result -> Unset0.unset (Seq.get (Model0.model self) 0) a } + function Model0.model = LitUnsat0.model, function Model0.model = LitUnset0.model + clone CreuSat_Lit_Impl1_LitUnset_Interface as LitUnset0 + clone CreuSat_Lit_Impl1_LitUnsat_Interface as LitUnsat0 + clone CreuSat_Clause_Impl0_Index_Interface as Index0 + clone CreuSat_Clause_Impl3_Len_Interface as Len0 + let rec cfg unit_and_unset [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 155 4 155 71] (self : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) (_f : Type.creusat_formula_formula) : bool + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 150 4 150 56] InvariantInternal0.invariant_internal (Model0.model self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 151 4 151 33] Invariant0.invariant' a _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 152 4 152 34] Seq.length (Model0.model self) > 1} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 153 4 153 40] result -> Unit0.unit self a } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 154 4 154 47] result -> Unset0.unset (Seq.get (Model0.model self) 0) a } = var _0 : bool; @@ -3496,14 +3471,14 @@ module CreuSat_Clause_Impl3_UnitAndUnset goto BB1 } BB1 { - invariant unsat { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 157 8 157 85] forall j : (int) . 1 <= j && j < UInt64.to_int i_4 -> Unsat0.unsat (Seq.get (Model0.model self_1) j) a_2 }; + invariant unsat { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 157 8 157 85] forall j : (int) . 1 <= j && j < UInt64.to_int i_4 -> Unsat0.unsat (Seq.get (Model0.model self_1) j) a_2 }; _8 <- i_4; _10 <- self_1; - _9 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 158 18 158 28] Len0.len _10); + _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 158 18 158 28] Len0.len _10); goto BB2 } BB2 { - _7 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 158 14 158 28] _8 < _9); + _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 158 14 158 28] _8 < _9); switch (_7) | False -> goto BB8 | _ -> goto BB3 @@ -3512,13 +3487,13 @@ module CreuSat_Clause_Impl3_UnitAndUnset BB3 { _16 <- self_1; _17 <- i_4; - _15 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 159 16 159 23] Index0.index _16 _17); + _15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 159 16 159 23] Index0.index _16 _17); goto BB4 } BB4 { _14 <- _15; _18 <- a_2; - _13 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 159 16 159 36] LitUnsat0.lit_unsat _14 _18); + _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 159 16 159 36] LitUnsat0.lit_unsat _14 _18); goto BB5 } BB5 { @@ -3534,20 +3509,20 @@ module CreuSat_Clause_Impl3_UnitAndUnset } BB7 { _11 <- (); - i_4 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 162 12 162 18] i_4 + (1 : usize)); + i_4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 162 12 162 18] i_4 + (1 : usize)); _6 <- (); goto BB1 } BB8 { _5 <- (); _25 <- self_1; - _24 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 164 8 164 15] Index0.index _25 (0 : usize)); + _24 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 164 8 164 15] Index0.index _25 (0 : usize)); goto BB9 } BB9 { _23 <- _24; _26 <- a_2; - _0 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 164 8 164 28] LitUnset0.lit_unset _23 _26); + _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 164 8 164 28] LitUnset0.lit_unset _23 _26); goto BB10 } BB10 { @@ -3572,10 +3547,10 @@ module CreuSat_Logic_LogicAssignments_CompleteInner use prelude.UInt8 use mach.int.Int32 clone CreuSat_Logic_Logic_Unset_Interface as Unset0 - predicate complete_inner [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_assignments.rs" 33 0 33 52] (a : Seq.seq uint8) + predicate complete_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 33 0 33 52] (a : Seq.seq uint8) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_assignments.rs" 34 4 36 5] forall i : (int) . 0 <= i && i < Seq.length a -> not Unset0.unset (Seq.get a i) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 34 4 36 5] forall i : (int) . 0 <= i && i < Seq.length a -> not Unset0.unset (Seq.get a i) end module CreuSat_Logic_LogicFormula_FormulaSatInner_Interface use seq.Seq @@ -3593,10 +3568,10 @@ module CreuSat_Logic_LogicFormula_FormulaSatInner use prelude.UInt8 use mach.int.Int32 clone CreuSat_Logic_LogicClause_Impl2_SatInner_Interface as SatInner0 - predicate formula_sat_inner [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 32 0 32 78] (f : (Seq.seq (Type.creusat_clause_clause), int)) (a : Seq.seq uint8) + predicate formula_sat_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 39 0 39 78] (f : (Seq.seq (Type.creusat_clause_clause), int)) (a : Seq.seq uint8) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 33 4 36 5] forall i : (int) . 0 <= i && i < Seq.length (let (a, _) = f in a) -> SatInner0.sat_inner (Seq.get (let (a, _) = f in a) i) a + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 40 4 43 5] forall i : (int) . 0 <= i && i < Seq.length (let (a, _) = f in a) -> SatInner0.sat_inner (Seq.get (let (a, _) = f in a) i) a end module CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss_Interface use seq.Seq @@ -3612,10 +3587,10 @@ module CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss use prelude.UInt8 clone CreuSat_Logic_LogicFormula_FormulaSatInner_Interface as FormulaSatInner0 clone CreuSat_Logic_LogicAssignments_CompleteInner_Interface as CompleteInner0 - predicate eventually_sat_complete_no_ass [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 40 0 40 68] (f : (Seq.seq (Type.creusat_clause_clause), int)) + predicate eventually_sat_complete_no_ass [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 47 0 47 68] (f : (Seq.seq (Type.creusat_clause_clause), int)) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 41 4 43 5] exists a2 : (Seq.seq uint8) . Seq.length a2 = (let (_, a) = f in a) && CompleteInner0.complete_inner a2 && FormulaSatInner0.formula_sat_inner f a2 + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 48 4 50 5] exists a2 : (Seq.seq uint8) . Seq.length a2 = (let (_, a) = f in a) && CompleteInner0.complete_inner a2 && FormulaSatInner0.formula_sat_inner f a2 end module CreuSat_Logic_LogicClause_EquisatExtensionInner_Interface use Type @@ -3628,10 +3603,10 @@ module CreuSat_Logic_LogicClause_EquisatExtensionInner use seq.Seq use mach.int.Int clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss_Interface as EventuallySatCompleteNoAss0 - predicate equisat_extension_inner [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 34 0 34 72] (c : Type.creusat_clause_clause) (f : (Seq.seq (Type.creusat_clause_clause), int)) + predicate equisat_extension_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 34 0 34 72] (c : Type.creusat_clause_clause) (f : (Seq.seq (Type.creusat_clause_clause), int)) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 35 4 37 5] EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass f -> EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass (Seq.snoc (let (a, _) = f in a) c, let (_, a) = f in a) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 35 4 37 5] EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass f -> EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass (Seq.snoc (let (a, _) = f in a) c, let (_, a) = f in a) end module CreuSat_Logic_LogicClause_Impl2_EquisatExtension_Interface use Type @@ -3641,10 +3616,10 @@ module CreuSat_Logic_LogicClause_Impl2_EquisatExtension use Type clone CreuSat_Logic_LogicClause_EquisatExtensionInner_Interface as EquisatExtensionInner0 clone CreuSat_Logic_LogicFormula_Impl0_Model_Interface as Model0 - predicate equisat_extension [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 87 4 87 54] (self : Type.creusat_clause_clause) (f : Type.creusat_formula_formula) + predicate equisat_extension [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 87 4 87 54] (self : Type.creusat_clause_clause) (f : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 88 8 88 55] EquisatExtensionInner0.equisat_extension_inner self (Model0.model f) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 88 8 88 55] EquisatExtensionInner0.equisat_extension_inner self (Model0.model f) end module CreuSat_Logic_LogicClause_Impl2_UnsatInner_Interface use Type @@ -3663,10 +3638,10 @@ module CreuSat_Logic_LogicClause_Impl2_UnsatInner use mach.int.Int32 clone CreuSat_Logic_LogicLit_Impl1_UnsatInner_Interface as UnsatInner0 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 - predicate unsat_inner [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 145 4 145 59] (self : Type.creusat_clause_clause) (a : Seq.seq uint8) + predicate unsat_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 145 4 145 59] (self : Type.creusat_clause_clause) (a : Seq.seq uint8) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 146 8 149 9] forall i : (int) . 0 <= i && i < Seq.length (Model0.model self) -> UnsatInner0.unsat_inner (Seq.get (Model0.model self) i) a + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 146 8 149 9] forall i : (int) . 0 <= i && i < Seq.length (Model0.model self) -> UnsatInner0.unsat_inner (Seq.get (Model0.model self) i) a end module CreuSat_Logic_LogicClause_Impl2_Equisat_Interface use Type @@ -3680,10 +3655,10 @@ module CreuSat_Logic_LogicClause_Impl2_Equisat use prelude.UInt8 clone CreuSat_Logic_LogicClause_Impl2_UnsatInner_Interface as UnsatInner0 clone CreuSat_Logic_LogicClause_Impl2_SatInner_Interface as SatInner0 - predicate equisat [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 220 4 220 43] (self : Type.creusat_clause_clause) (o : Type.creusat_clause_clause) + predicate equisat [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 220 4 220 43] (self : Type.creusat_clause_clause) (o : Type.creusat_clause_clause) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 221 8 224 9] (forall a : (Seq.seq uint8) . SatInner0.sat_inner self a = SatInner0.sat_inner o a) && (forall a : (Seq.seq uint8) . UnsatInner0.unsat_inner self a = UnsatInner0.unsat_inner o a) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 221 8 224 9] (forall a : (Seq.seq uint8) . SatInner0.sat_inner self a = SatInner0.sat_inner o a) && (forall a : (Seq.seq uint8) . UnsatInner0.unsat_inner self a = UnsatInner0.unsat_inner o a) end module CreuSat_Logic_LogicClause_Impl2_Equisat2_Interface use Type @@ -3700,10 +3675,10 @@ module CreuSat_Logic_LogicClause_Impl2_Equisat2 clone CreuSat_Logic_LogicClause_Impl2_UnsatInner_Interface as UnsatInner0 clone CreuSat_Logic_LogicClause_Impl2_SatInner_Interface as SatInner0 clone CreuSat_Logic_LogicAssignments_CompleteInner_Interface as CompleteInner0 - predicate equisat2 [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 229 4 229 56] (self : Type.creusat_clause_clause) (o : Type.creusat_clause_clause) (f : Type.creusat_formula_formula) + predicate equisat2 [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 229 4 229 56] (self : Type.creusat_clause_clause) (o : Type.creusat_clause_clause) (f : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 230 8 233 9] (forall a : (Seq.seq uint8) . Seq.length a = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) && CompleteInner0.complete_inner a -> SatInner0.sat_inner self a = SatInner0.sat_inner o a) && (forall a : (Seq.seq uint8) . Seq.length a = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) && CompleteInner0.complete_inner a -> UnsatInner0.unsat_inner self a = UnsatInner0.unsat_inner o a) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 230 8 233 9] (forall a : (Seq.seq uint8) . Seq.length a = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) && CompleteInner0.complete_inner a -> SatInner0.sat_inner self a = SatInner0.sat_inner o a) && (forall a : (Seq.seq uint8) . Seq.length a = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) && CompleteInner0.complete_inner a -> UnsatInner0.unsat_inner self a = UnsatInner0.unsat_inner o a) end module CreuSat_Clause_Impl3_SwapLitsInClause_Interface use seq.Seq @@ -3711,20 +3686,19 @@ module CreuSat_Clause_Impl3_SwapLitsInClause_Interface use mach.int.Int use prelude.Prelude use Type + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension_Interface as EquisatExtension0 clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant0 - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_clause_clause val swap_lits_in_clause [@cfg:stackify] (self : borrowed (Type.creusat_clause_clause)) (_f : Type.creusat_formula_formula) (j : usize) (k : usize) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 169 4 169 35] Seq.length (Model0.model self) > UInt64.to_int j} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 170 4 170 35] Seq.length (Model0.model self) > UInt64.to_int k} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 171 4 171 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 172 4 172 51] EquisatExtension0.equisat_extension ( * self) _f} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 171 4 171 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 172 4 172 51] EquisatExtension0.equisat_extension ( ^ self) _f } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 173 4 173 49] Seq.length (Model0.model self) = Seq.length (Model1.model ( ^ self)) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 169 4 169 35] Seq.length (Model0.model self) > UInt64.to_int j} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 170 4 170 35] Seq.length (Model0.model self) > UInt64.to_int k} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 171 4 171 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 172 4 172 51] EquisatExtension0.equisat_extension ( * self) _f} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 171 4 171 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 172 4 172 51] EquisatExtension0.equisat_extension ( ^ self) _f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 173 4 173 49] Seq.length (Model0.model self) = Seq.length (Model1.model ( ^ self)) } end module CreuSat_Clause_Impl3_SwapLitsInClause @@ -3735,65 +3709,64 @@ module CreuSat_Clause_Impl3_SwapLitsInClause use Type use seq.Permut use mach.int.Int32 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant1.invariant' - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner1.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = SatInner1.index_logic, function IndexLogic0.index_logic = UnsatInner1.index_logic, + function IndexLogic0.index_logic = Invariant1.index_logic + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner1 with predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = SatInner0.sat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model3 with function Model0.model = Model5.model - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy1 - clone CreusotContracts_Logic_Model_Impl0_Model as Model2 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model3.model + type a = Type.alloc_alloc_global, function Model0.model = Model3.model, axiom . + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model4.model - clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner0 with function Model0.model = Model1.model, - predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner0 with function Model0.model = Model1.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with function Model0.model = Model3.model, - predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner - clone CreuSat_Logic_LogicClause_Impl2_Equisat2 as Equisat20 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate SatInner0.sat_inner = SatInner0.sat_inner, predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicClause_Impl2_Equisat as Equisat0 with predicate SatInner0.sat_inner = SatInner0.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant0 with function Model0.model = Model1.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = seq (Type.creusat_lit_lit) - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy2 with type t = Type.creusat_lit_lit - clone CreusotContracts_Std1_Slice_Impl0_Model as Model6 with type t = Type.creusat_lit_lit, axiom . + type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model0.model, + function Model0.model = Invariant0.model, function Model0.model = SatInner0.model, + function Model0.model = UnsatInner0.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = Equisat0.sat_inner, + predicate SatInner0.sat_inner = Equisat20.sat_inner, predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner + clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss0.formula_sat_inner + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model2.modelTy + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = Equisat20.complete_inner, + predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner + clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = Equisat0.unsat_inner, + predicate UnsatInner0.unsat_inner = Equisat20.unsat_inner + clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtension0.equisat_extension_inner + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model3 with function Model0.model = EquisatExtension0.model, + function Model0.model = Model2.model + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant0.invariant_internal + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model as Model2 with type t = Type.creusat_formula_formula + clone CreuSat_Logic_LogicClause_Impl2_Equisat2 as Equisat20 + clone CreuSat_Logic_LogicClause_Impl2_Equisat as Equisat0 + clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant0 + clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_clause_clause + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy2 with type t = Type.creusat_lit_lit, + type ModelTy0.modelTy = Model7.modelTy + clone CreusotContracts_Std1_Slice_Impl0_Model as Model6 with type t = Type.creusat_lit_lit, + function Model0.model = DerefMut0.model, function Model1.model = Swap0.model, function Model0.model = Model7.model, + axiom . clone CreusotContracts_Logic_Model_Impl1_Model as Model7 with type t = seq (Type.creusat_lit_lit), - type ModelTy0.modelTy = ModelTy2.modelTy, function Model0.model = Model6.model - clone Core_Slice_Impl0_Swap_Interface as Swap0 with type t = Type.creusat_lit_lit, - function Model0.model = Model7.model, function Model1.model = Model6.model - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_clause_clause + function Model0.model = Swap0.model + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = seq (Type.creusat_lit_lit) + clone Core_Slice_Impl0_Swap_Interface as Swap0 with type t = Type.creusat_lit_lit clone Alloc_Vec_Impl11_DerefMut_Interface as DerefMut0 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model6.model, function Model1.model = Model4.model - let rec cfg swap_lits_in_clause [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 174 4 174 75] (self : borrowed (Type.creusat_clause_clause)) (_f : Type.creusat_formula_formula) (j : usize) (k : usize) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 169 4 169 35] Seq.length (Model0.model self) > UInt64.to_int j} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 170 4 170 35] Seq.length (Model0.model self) > UInt64.to_int k} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 171 4 171 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 172 4 172 51] EquisatExtension0.equisat_extension ( * self) _f} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 171 4 171 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 172 4 172 51] EquisatExtension0.equisat_extension ( ^ self) _f } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 173 4 173 49] Seq.length (Model0.model self) = Seq.length (Model1.model ( ^ self)) } + type a = Type.alloc_alloc_global + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_clause_clause + let rec cfg swap_lits_in_clause [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 174 4 174 75] (self : borrowed (Type.creusat_clause_clause)) (_f : Type.creusat_formula_formula) (j : usize) (k : usize) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 169 4 169 35] Seq.length (Model0.model self) > UInt64.to_int j} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 170 4 170 35] Seq.length (Model0.model self) > UInt64.to_int k} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 171 4 171 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 172 4 172 51] EquisatExtension0.equisat_extension ( * self) _f} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 171 4 171 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 172 4 172 51] EquisatExtension0.equisat_extension ( ^ self) _f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 173 4 173 49] Seq.length (Model0.model self) = Seq.length (Model1.model ( ^ self)) } = var _0 : (); @@ -3828,14 +3801,14 @@ module CreuSat_Clause_Impl3_SwapLitsInClause } BB0 { _6 <- (); - old_c_5 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 175 20 175 35] self_1); + old_c_5 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 175 20 175 35] self_1); goto BB1 } BB1 { _10 <- borrow_mut (Type.creusat_clause_clause_Clause_lits ( * self_1)); self_1 <- { self_1 with current = (let Type.CreuSat_Clause_Clause a b c d = * self_1 in Type.CreuSat_Clause_Clause a b c ( ^ _10)) }; assume { Resolve0.resolve self_1 }; - _9 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 176 8 176 28] DerefMut0.deref_mut _10); + _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 176 8 176 28] DerefMut0.deref_mut _10); goto BB2 } BB2 { @@ -3843,30 +3816,30 @@ module CreuSat_Clause_Impl3_SwapLitsInClause _9 <- { _9 with current = ( ^ _8) }; _11 <- j_3; _12 <- k_4; - _7 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 176 8 176 28] Swap0.swap _8 _11 _12); + _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 176 8 176 28] Swap0.swap _8 _11 _12); goto BB3 } BB3 { assume { Resolve1.resolve _9 }; - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 177 8 177 46] ^ old_c_5 = ^ self_1 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 177 8 177 46] ^ old_c_5 = ^ self_1 }; _13 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 178 8 178 51] EquisatExtension0.equisat_extension ( * old_c_5) _f_2 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 178 8 178 51] EquisatExtension0.equisat_extension ( * old_c_5) _f_2 }; _14 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 179 8 179 51] Invariant0.invariant' ( * self_1) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f_2)) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 179 8 179 51] Invariant0.invariant' ( * self_1) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f_2)) }; _15 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 180 8 180 55] Permut.exchange (Model0.model self_1) (Model0.model old_c_5) (UInt64.to_int j_3) (UInt64.to_int k_4) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 180 8 180 55] Permut.exchange (Model0.model self_1) (Model0.model old_c_5) (UInt64.to_int j_3) (UInt64.to_int k_4) }; _16 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 181 8 181 63] Permut.permut (Model0.model old_c_5) (Model0.model self_1) 0 (Seq.length (Model0.model self_1)) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 181 8 181 63] Permut.permut (Model0.model old_c_5) (Model0.model self_1) 0 (Seq.length (Model0.model self_1)) }; _17 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 182 8 182 51] Equisat0.equisat ( * self_1) ( * old_c_5) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 182 8 182 51] Equisat0.equisat ( * self_1) ( * old_c_5) }; _18 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 183 8 183 57] Equisat20.equisat2 ( * self_1) ( * old_c_5) _f_2 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 183 8 183 57] Equisat20.equisat2 ( * self_1) ( * old_c_5) _f_2 }; _19 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 184 8 184 46] ^ old_c_5 = ^ self_1 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 184 8 184 46] ^ old_c_5 = ^ self_1 }; _20 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 186 8 187 96] EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass (Seq.snoc (let (a, _) = Model2.model _f_2 in a) ( * self_1), let (_, a) = Model2.model _f_2 in a) = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass (Seq.snoc (let (a, _) = Model2.model _f_2 in a) ( * old_c_5), let (_, a) = Model2.model _f_2 in a) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 186 8 187 96] EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass (Seq.snoc (let (a, _) = Model2.model _f_2 in a) ( * self_1), let (_, a) = Model2.model _f_2 in a) = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass (Seq.snoc (let (a, _) = Model2.model _f_2 in a) ( * old_c_5), let (_, a) = Model2.model _f_2 in a) }; _21 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 188 8 188 50] EquisatExtension0.equisat_extension ( * self_1) _f_2 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 188 8 188 50] EquisatExtension0.equisat_extension ( * self_1) _f_2 }; _22 <- (); _0 <- (); return _0 @@ -3883,8 +3856,8 @@ module CreuSat_Clause_Impl3_CalcLbd_Interface clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = usize, type a = Type.alloc_alloc_global, axiom . val calc_lbd [@cfg:stackify] (self : Type.creusat_clause_clause) (_f : Type.creusat_formula_formula) (s : borrowed (Type.creusat_solver_solver)) (t : Type.creusat_trail_trail) : usize - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 192 4 192 58] Seq.length (Model0.model (Type.creusat_trail_trail_Trail_lit_to_level t)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 193 4 193 45] Invariant0.invariant' self (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 192 4 192 58] Seq.length (Model0.model (Type.creusat_trail_trail_Trail_lit_to_level t)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 193 4 193 45] Invariant0.invariant' self (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} end module CreuSat_Clause_Impl3_CalcLbd @@ -3893,44 +3866,41 @@ module CreuSat_Clause_Impl3_CalcLbd use prelude.Prelude use Type use mach.int.Int - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant1.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = Invariant1.index_logic + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant0 with function Model0.model = Model1.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal + type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant0.invariant_internal + clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Invariant0.model + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant0 clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_solver_solver - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = usize - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = usize + clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = usize, + predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = usize - clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 - clone CreuSat_Lit_Impl1_Index_Interface as Index1 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize, type Output0.output = Index2.output, + type Output0.output = IndexMut0.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize, + predicate HasValue0.has_value = Index2.has_value, predicate HasValue0.has_value = IndexMut0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize, + predicate InBounds0.in_bounds = Index2.in_bounds, predicate InBounds0.in_bounds = IndexMut0.in_bounds + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model3.modelTy clone CreusotContracts_Logic_Model_Impl0_Model as Model3 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model - clone CreuSat_Clause_Impl0_Index_Interface as Index0 with function Model0.model = Model3.model - clone CreuSat_Clause_Impl3_Len_Interface as Len0 with function Model0.model = Model3.model + function Model0.model = Len0.model, function Model0.model = Index0.model + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_solver_solver + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = usize clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = usize, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - predicate ResolveElswhere0.resolve_elswhere = ResolveElswhere0.resolve_elswhere, type Output0.output = Output0.output - clone Alloc_Vec_Impl1_Len_Interface as Len1 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Model0.model - clone Alloc_Vec_Impl16_Index_Interface as Index2 with type t = usize, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - type Output0.output = Output0.output - let rec cfg calc_lbd [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 194 4 194 76] (self : Type.creusat_clause_clause) (_f : Type.creusat_formula_formula) (s : borrowed (Type.creusat_solver_solver)) (t : Type.creusat_trail_trail) : usize - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 192 4 192 58] Seq.length (Model0.model (Type.creusat_trail_trail_Trail_lit_to_level t)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 193 4 193 45] Invariant0.invariant' self (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + type a = Type.alloc_alloc_global + clone Alloc_Vec_Impl1_Len_Interface as Len1 with type t = usize, type a = Type.alloc_alloc_global + clone Alloc_Vec_Impl16_Index_Interface as Index2 with type t = usize, type i = usize, type a = Type.alloc_alloc_global + clone CreuSat_Lit_Impl1_Index_Interface as Index1 + clone CreuSat_Clause_Impl0_Index_Interface as Index0 + clone CreuSat_Clause_Impl3_Len_Interface as Len0 + let rec cfg calc_lbd [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 194 4 194 76] (self : Type.creusat_clause_clause) (_f : Type.creusat_formula_formula) (s : borrowed (Type.creusat_solver_solver)) (t : Type.creusat_trail_trail) : usize + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 192 4 192 58] Seq.length (Model0.model (Type.creusat_trail_trail_Trail_lit_to_level t)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 193 4 193 45] Invariant0.invariant' self (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} = var _0 : usize; @@ -3986,14 +3956,14 @@ module CreuSat_Clause_Impl3_CalcLbd goto BB1 } BB1 { - invariant lbd_bound { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 197 8 197 43] UInt64.to_int lbd_6 <= UInt64.to_int i_5 }; + invariant lbd_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 197 8 197 43] UInt64.to_int lbd_6 <= UInt64.to_int i_5 }; _10 <- i_5; _12 <- self_1; - _11 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 198 18 198 28] Len0.len _12); + _11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 198 18 198 28] Len0.len _12); goto BB2 } BB2 { - _9 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 198 14 198 28] _10 < _11); + _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 198 14 198 28] _10 < _11); switch (_9) | False -> goto BB16 | _ -> goto BB3 @@ -4003,23 +3973,23 @@ module CreuSat_Clause_Impl3_CalcLbd _15 <- Type.creusat_trail_trail_Trail_lit_to_level t_4; _19 <- self_1; _20 <- i_5; - _18 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 199 39 199 46] Index0.index _19 _20); + _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 199 39 199 46] Index0.index _19 _20); goto BB4 } BB4 { _17 <- _18; - _16 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 199 39 199 54] Index1.index _17); + _16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 199 39 199 54] Index1.index _17); goto BB5 } BB5 { - _14 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 199 24 199 55] Index2.index _15 _16); + _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 199 24 199 55] Index2.index _15 _16); goto BB6 } BB6 { level_13 <- _14; _24 <- level_13; _26 <- Type.creusat_solver_solver_Solver_perm_diff ( * s_3); - _25 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 200 23 200 40] Len1.len _26); + _25 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 200 23 200 40] Len1.len _26); goto BB10 } BB7 { @@ -4029,7 +3999,7 @@ module CreuSat_Clause_Impl3_CalcLbd BB8 { _30 <- Type.creusat_solver_solver_Solver_perm_diff ( * s_3); _31 <- level_13; - _29 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 201 16 201 34] Index2.index _30 _31); + _29 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 201 16 201 34] Index2.index _30 _31); goto BB11 } BB9 { @@ -4039,7 +4009,7 @@ module CreuSat_Clause_Impl3_CalcLbd end } BB10 { - _23 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 200 15 200 40] _24 < _25); + _23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 200 15 200 40] _24 < _25); switch (_23) | False -> goto BB7 | _ -> goto BB8 @@ -4048,7 +4018,7 @@ module CreuSat_Clause_Impl3_CalcLbd BB11 { _28 <- _29; _32 <- Type.creusat_solver_solver_Solver_num_conflicts ( * s_3); - _27 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 201 16 201 53] _28 <> _32); + _27 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 201 16 201 53] _28 <> _32); _22 <- _27; goto BB9 } @@ -4057,13 +4027,13 @@ module CreuSat_Clause_Impl3_CalcLbd _35 <- borrow_mut (Type.creusat_solver_solver_Solver_perm_diff ( * s_3)); s_3 <- { s_3 with current = (let Type.CreuSat_Solver_Solver a b c d e f g h = * s_3 in Type.CreuSat_Solver_Solver a b c d e f g ( ^ _35)) }; _36 <- level_13; - _34 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 203 16 203 34] IndexMut0.index_mut _35 _36); + _34 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 203 16 203 34] IndexMut0.index_mut _35 _36); goto BB13 } BB13 { _34 <- { _34 with current = _33 }; assume { Resolve0.resolve _34 }; - lbd_6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 204 16 204 24] lbd_6 + (1 : usize)); + lbd_6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 204 16 204 24] lbd_6 + (1 : usize)); _21 <- (); goto BB15 } @@ -4072,7 +4042,7 @@ module CreuSat_Clause_Impl3_CalcLbd goto BB15 } BB15 { - i_5 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/clause.rs" 206 12 206 18] i_5 + (1 : usize)); + i_5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 206 12 206 18] i_5 + (1 : usize)); _8 <- (); goto BB1 } @@ -4096,10 +4066,10 @@ module CreuSat_Logic_LogicLit_IdxInLogic use Type use mach.int.Int32 clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - predicate idx_in_logic [@inline:trivial] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 10 0 10 50] (idx : int) (c : Seq.seq (Type.creusat_lit_lit)) + predicate idx_in_logic [@inline:trivial] [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 10 0 10 50] (idx : int) (c : Seq.seq (Type.creusat_lit_lit)) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 11 4 14 5] exists i : (int) . 0 <= i && i < Seq.length c && IndexLogic0.index_logic (Seq.get c i) = idx + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 11 4 14 5] exists i : (int) . 0 <= i && i < Seq.length c && IndexLogic0.index_logic (Seq.get c i) = idx end module CreuSat_ConflictAnalysis_IdxIn_Interface use seq.Seq @@ -4108,21 +4078,20 @@ module CreuSat_ConflictAnalysis_IdxIn_Interface use mach.int.Int32 use prelude.Prelude use Type + clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy1 with type t = bool, type a = Type.alloc_alloc_global, + type ModelTy0.modelTy = Model1.modelTy + clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_lit_lit, + type a = Type.alloc_alloc_global, type ModelTy0.modelTy = Model0.modelTy clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 clone CreuSat_Logic_LogicLit_IdxInLogic_Interface as IdxInLogic0 clone CreuSat_Logic_LogicClause_VarsInRangeInner_Interface as VarsInRangeInner0 - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy1 with type t = bool, type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model1 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global), - type ModelTy0.modelTy = ModelTy1.modelTy - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.alloc_vec_vec (Type.creusat_lit_lit) (Type.alloc_alloc_global), - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model1 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global) + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.alloc_vec_vec (Type.creusat_lit_lit) (Type.alloc_alloc_global) val idx_in [@cfg:stackify] (c : Type.alloc_vec_vec (Type.creusat_lit_lit) (Type.alloc_alloc_global)) (idx : usize) (seen : Type.alloc_vec_vec bool (Type.alloc_alloc_global)) : bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 23 0 23 51] VarsInRangeInner0.vars_in_range_inner (Model0.model c) (Seq.length (Model1.model seen))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 24 0 24 33] UInt64.to_int idx < Seq.length (Model1.model seen)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 25 0 25 52] Seq.get (Model1.model seen) (UInt64.to_int idx) = IdxInLogic0.idx_in_logic (UInt64.to_int idx) (Model0.model c)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 26 0 26 96] result = (exists i : (int) . 0 <= i && i < Seq.length (Model0.model c) && IndexLogic0.index_logic (Seq.get (Model0.model c) i) = UInt64.to_int idx) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 23 0 23 51] VarsInRangeInner0.vars_in_range_inner (Model0.model c) (Seq.length (Model1.model seen))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 24 0 24 33] UInt64.to_int idx < Seq.length (Model1.model seen)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 25 0 25 52] Seq.get (Model1.model seen) (UInt64.to_int idx) = IdxInLogic0.idx_in_logic (UInt64.to_int idx) (Model0.model c)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 26 0 26 96] result = (exists i : (int) . 0 <= i && i < Seq.length (Model0.model c) && IndexLogic0.index_logic (Seq.get (Model0.model c) i) = UInt64.to_int idx) } end module CreuSat_ConflictAnalysis_IdxIn @@ -4132,32 +4101,33 @@ module CreuSat_ConflictAnalysis_IdxIn use mach.int.Int32 use prelude.Prelude use Type - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant0.invariant' - clone CreuSat_Logic_LogicLit_IdxInLogic as IdxInLogic0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = bool, type a = Type.alloc_alloc_global, axiom . - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy1 with type t = bool, type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Model_Impl0_Model as Model1 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global), - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model3.model + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = IdxInLogic0.index_logic, + function IndexLogic0.index_logic = Invariant0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant0 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = bool, type a = Type.alloc_alloc_global, + function Model0.model = Model1.model, axiom . + clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy1 with type t = bool, type a = Type.alloc_alloc_global, + type ModelTy0.modelTy = Model1.modelTy clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . + type a = Type.alloc_alloc_global, function Model0.model = Model0.model, axiom . clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.alloc_vec_vec (Type.creusat_lit_lit) (Type.alloc_alloc_global), - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model2.model + type a = Type.alloc_alloc_global, type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicLit_IdxInLogic as IdxInLogic0 + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 + clone CreusotContracts_Logic_Model_Impl0_Model as Model1 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global) + clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.alloc_vec_vec (Type.creusat_lit_lit) (Type.alloc_alloc_global) clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy2 with type t = bool - clone Core_Slice_Index_Impl2_Output as Output0 with type t = bool - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = bool - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = bool - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = bool, type i = usize, type a = Type.alloc_alloc_global, - function Model0.model = Model3.model, predicate InBounds0.in_bounds = InBounds0.in_bounds, - predicate HasValue0.has_value = HasValue0.has_value, type Output0.output = Output0.output - let rec cfg idx_in [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 27 0 27 61] (c : Type.alloc_vec_vec (Type.creusat_lit_lit) (Type.alloc_alloc_global)) (idx : usize) (seen : Type.alloc_vec_vec bool (Type.alloc_alloc_global)) : bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 23 0 23 51] VarsInRangeInner0.vars_in_range_inner (Model0.model c) (Seq.length (Model1.model seen))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 24 0 24 33] UInt64.to_int idx < Seq.length (Model1.model seen)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 25 0 25 52] Seq.get (Model1.model seen) (UInt64.to_int idx) = IdxInLogic0.idx_in_logic (UInt64.to_int idx) (Model0.model c)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 26 0 26 96] result = (exists i : (int) . 0 <= i && i < Seq.length (Model0.model c) && IndexLogic0.index_logic (Seq.get (Model0.model c) i) = UInt64.to_int idx) } + clone Core_Slice_Index_Impl2_Output as Output0 with type t = bool, type Output0.output = Index0.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = bool, + predicate HasValue0.has_value = Index0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = bool, + predicate InBounds0.in_bounds = Index0.in_bounds + clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = bool, type i = usize, type a = Type.alloc_alloc_global + let rec cfg idx_in [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 27 0 27 61] (c : Type.alloc_vec_vec (Type.creusat_lit_lit) (Type.alloc_alloc_global)) (idx : usize) (seen : Type.alloc_vec_vec bool (Type.alloc_alloc_global)) : bool + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 23 0 23 51] VarsInRangeInner0.vars_in_range_inner (Model0.model c) (Seq.length (Model1.model seen))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 24 0 24 33] UInt64.to_int idx < Seq.length (Model1.model seen)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 25 0 25 52] Seq.get (Model1.model seen) (UInt64.to_int idx) = IdxInLogic0.idx_in_logic (UInt64.to_int idx) (Model0.model c)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 26 0 26 96] result = (exists i : (int) . 0 <= i && i < Seq.length (Model0.model c) && IndexLogic0.index_logic (Seq.get (Model0.model c) i) = UInt64.to_int idx) } = var _0 : bool; @@ -4176,7 +4146,7 @@ module CreuSat_ConflictAnalysis_IdxIn BB0 { _5 <- seen_3; _6 <- idx_2; - _4 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 28 4 28 13] Index0.index _5 _6); + _4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 28 4 28 13] Index0.index _5 _6); goto BB1 } BB1 { @@ -4196,10 +4166,10 @@ module CreuSat_Logic_LogicLit_Impl1_LitIdxIn use seq.Seq clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 - predicate lit_idx_in [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 68 4 68 46] (self : Type.creusat_lit_lit) (c : Type.creusat_clause_clause) + predicate lit_idx_in [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 68 4 68 46] (self : Type.creusat_lit_lit) (c : Type.creusat_clause_clause) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 69 8 72 9] exists i : (int) . 0 <= i && i < Seq.length (Model0.model c) && IndexLogic0.index_logic (Seq.get (Model0.model c) i) = IndexLogic0.index_logic self + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 69 8 72 9] exists i : (int) . 0 <= i && i < Seq.length (Model0.model c) && IndexLogic0.index_logic (Seq.get (Model0.model c) i) = IndexLogic0.index_logic self end module CreuSat_Logic_LogicTrail_LitIsUniqueInner_Interface use seq.Seq @@ -4212,10 +4182,10 @@ module CreuSat_Logic_LogicTrail_LitIsUniqueInner use mach.int.Int use mach.int.Int32 clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - predicate lit_is_unique_inner [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 210 0 210 48] (trail : Seq.seq (Type.creusat_trail_step)) + predicate lit_is_unique_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 210 0 210 48] (trail : Seq.seq (Type.creusat_trail_step)) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 211 4 215 5] forall i : (int) . 0 <= i && i < Seq.length trail -> (forall j : (int) . 0 <= j && j < i -> IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit (Seq.get trail j)) <> IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit (Seq.get trail i))) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 211 4 215 5] forall i : (int) . 0 <= i && i < Seq.length trail -> (forall j : (int) . 0 <= j && j < i -> IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit (Seq.get trail j)) <> IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit (Seq.get trail i))) end module CreuSat_Logic_LogicUtil_SortedRange_Interface use seq.Seq @@ -4229,10 +4199,10 @@ module CreuSat_Logic_LogicUtil_SortedRange use mach.int.Int use prelude.Prelude use mach.int.UInt64 - predicate sorted_range [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 20 0 20 58] (s : Seq.seq usize) (l : int) (u : int) + predicate sorted_range [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 20 0 20 58] (s : Seq.seq usize) (l : int) (u : int) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 21 4 23 5] forall j : (int) . forall i : (int) . l <= i && i < j && j < u -> Seq.get s i <= Seq.get s j + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 21 4 23 5] forall j : (int) . forall i : (int) . l <= i && i < j && j < u -> Seq.get s i <= Seq.get s j end module CreuSat_Logic_LogicUtil_Sorted_Interface use seq.Seq @@ -4248,8 +4218,8 @@ module CreuSat_Logic_LogicUtil_Sorted use mach.int.UInt64 use mach.int.Int32 clone CreuSat_Logic_LogicUtil_SortedRange_Interface as SortedRange0 - predicate sorted [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 27 0 27 36] (s : Seq.seq usize) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 28 4 30 5] SortedRange0.sorted_range s 0 (Seq.length s) + predicate sorted [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 27 0 27 36] (s : Seq.seq usize) = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 28 4 30 5] SortedRange0.sorted_range s 0 (Seq.length s) end module CreuSat_Logic_LogicTrail_UnitAreSat_Interface use seq.Seq @@ -4267,10 +4237,10 @@ module CreuSat_Logic_LogicTrail_UnitAreSat clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . - predicate unit_are_sat [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 241 0 241 69] (trail : Seq.seq (Type.creusat_trail_step)) (f : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) + predicate unit_are_sat [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 241 0 241 69] (trail : Seq.seq (Type.creusat_trail_step)) (f : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 242 4 250 5] forall j : (int) . 0 <= j && j < Seq.length trail -> match (Type.creusat_trail_step_Step_reason (Seq.get trail j)) with + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 242 4 250 5] forall j : (int) . 0 <= j && j < Seq.length trail -> match (Type.creusat_trail_step_Step_reason (Seq.get trail j)) with | Type.CreuSat_Trail_Reason_Unit k -> Type.creusat_trail_step_Step_lit (Seq.get trail j) = Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int k))) 0 && Sat0.sat (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int k))) 0) a | _ -> true end @@ -4301,10 +4271,10 @@ module CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, axiom . clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - predicate invariant_no_decision_mirror [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 67 4 67 61] (self : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) + predicate invariant_no_decision_mirror [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 67 4 67 61] (self : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 68 8 83 9] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) = Seq.length (Model0.model (Type.creusat_trail_trail_Trail_assignments self)) && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model (Type.creusat_trail_trail_Trail_assignments self)) -> UInt8.to_int (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments self)) i) <= 3) && (forall i : (int) . 0 <= i && i < Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail self)) -> Invariant0.invariant' (Seq.get (Model1.model (Type.creusat_trail_trail_Trail_trail self)) i) f) && Seq.length (Model2.model (Type.creusat_trail_trail_Trail_lit_to_level self)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) && (forall i : (int) . 0 <= i && i < Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail self)) -> (forall j : (int) . 0 <= j && j < i -> match (Type.creusat_trail_step_Step_reason (Seq.get (Model1.model (Type.creusat_trail_trail_Trail_trail self)) j)) with + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 68 8 83 9] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) = Seq.length (Model0.model (Type.creusat_trail_trail_Trail_assignments self)) && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model (Type.creusat_trail_trail_Trail_assignments self)) -> UInt8.to_int (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments self)) i) <= 3) && (forall i : (int) . 0 <= i && i < Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail self)) -> Invariant0.invariant' (Seq.get (Model1.model (Type.creusat_trail_trail_Trail_trail self)) i) f) && Seq.length (Model2.model (Type.creusat_trail_trail_Trail_lit_to_level self)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) && (forall i : (int) . 0 <= i && i < Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail self)) -> (forall j : (int) . 0 <= j && j < i -> match (Type.creusat_trail_step_Step_reason (Seq.get (Model1.model (Type.creusat_trail_trail_Trail_trail self)) j)) with | Type.CreuSat_Trail_Reason_Long cref -> not LitIdxIn0.lit_idx_in (Type.creusat_trail_step_Step_lit (Seq.get (Model1.model (Type.creusat_trail_trail_Trail_trail self)) i)) (Seq.get (Model3.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)) | _ -> true end)) && LitIsUniqueInner0.lit_is_unique_inner (Model1.model (Type.creusat_trail_trail_Trail_trail self)) && LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail self)) f (Model0.model (Type.creusat_trail_trail_Trail_assignments self)) && (forall j : (int) . 0 <= j && j < Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail self)) -> Sat0.sat (Type.creusat_trail_step_Step_lit (Seq.get (Model1.model (Type.creusat_trail_trail_Trail_trail self)) j)) (Type.creusat_trail_trail_Trail_assignments self)) && Sorted0.sorted (Model2.model (Type.creusat_trail_trail_Trail_decisions self)) && UnitAreSat0.unit_are_sat (Model1.model (Type.creusat_trail_trail_Trail_trail self)) f (Type.creusat_trail_trail_Trail_assignments self) @@ -4323,10 +4293,10 @@ module CreuSat_Logic_LogicTrail_LitToLevelInvariant use prelude.Prelude use mach.int.UInt64 use Type - predicate lit_to_level_invariant [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 163 0 163 71] (lit_to_level : Seq.seq usize) (f : Type.creusat_formula_formula) + predicate lit_to_level_invariant [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 163 0 163 71] (lit_to_level : Seq.seq usize) (f : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 164 4 166 5] Seq.length lit_to_level = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 164 4 166 5] Seq.length lit_to_level = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) end module CreuSat_Logic_LogicTrail_LitNotInLessInner_Interface use seq.Seq @@ -4342,10 +4312,10 @@ module CreuSat_Logic_LogicTrail_LitNotInLessInner clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn_Interface as LitIdxIn0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . - predicate lit_not_in_less_inner [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 144 0 144 62] (t : Seq.seq (Type.creusat_trail_step)) (f : Type.creusat_formula_formula) + predicate lit_not_in_less_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 144 0 144 62] (t : Seq.seq (Type.creusat_trail_step)) (f : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 145 4 152 5] forall i : (int) . 0 <= i && i < Seq.length t -> (forall j : (int) . 0 <= j && j < i -> match (Type.creusat_trail_step_Step_reason (Seq.get t j)) with + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 145 4 152 5] forall i : (int) . 0 <= i && i < Seq.length t -> (forall j : (int) . 0 <= j && j < i -> match (Type.creusat_trail_step_Step_reason (Seq.get t j)) with | Type.CreuSat_Trail_Reason_Long cref -> not LitIdxIn0.lit_idx_in (Type.creusat_trail_step_Step_lit (Seq.get t i)) (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)) | _ -> true end) @@ -4359,10 +4329,10 @@ module CreuSat_Logic_LogicTrail_Impl2_LitNotInLess clone CreuSat_Logic_LogicTrail_LitNotInLessInner_Interface as LitNotInLessInner0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, axiom . - predicate lit_not_in_less [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 127 4 127 52] (self : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) + predicate lit_not_in_less [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 127 4 127 52] (self : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 128 8 131 9] LitNotInLessInner0.lit_not_in_less_inner (Model0.model (Type.creusat_trail_trail_Trail_trail self)) f + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 128 8 131 9] LitNotInLessInner0.lit_not_in_less_inner (Model0.model (Type.creusat_trail_trail_Trail_trail self)) f end module CreuSat_Logic_LogicTrail_Impl2_LitIsUnique_Interface use Type @@ -4373,10 +4343,10 @@ module CreuSat_Logic_LogicTrail_Impl2_LitIsUnique clone CreuSat_Logic_LogicTrail_LitIsUniqueInner_Interface as LitIsUniqueInner0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, axiom . - predicate lit_is_unique [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 136 4 136 38] (self : Type.creusat_trail_trail) + predicate lit_is_unique [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 136 4 136 38] (self : Type.creusat_trail_trail) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 137 8 139 9] LitIsUniqueInner0.lit_is_unique_inner (Model0.model (Type.creusat_trail_trail_Trail_trail self)) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 137 8 139 9] LitIsUniqueInner0.lit_is_unique_inner (Model0.model (Type.creusat_trail_trail_Trail_trail self)) end module CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner_Interface use seq.Seq @@ -4394,10 +4364,10 @@ module CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner use prelude.UInt8 use mach.int.Int32 clone CreuSat_Logic_LogicLit_Impl1_SatInner_Interface as SatInner0 - predicate trail_entries_are_assigned_inner [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 179 0 179 80] (t : Seq.seq (Type.creusat_trail_step)) (a : Seq.seq uint8) + predicate trail_entries_are_assigned_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 179 0 179 80] (t : Seq.seq (Type.creusat_trail_step)) (a : Seq.seq uint8) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 180 4 183 5] forall j : (int) . 0 <= j && j < Seq.length t -> SatInner0.sat_inner (Type.creusat_trail_step_Step_lit (Seq.get t j)) a + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 180 4 183 5] forall j : (int) . 0 <= j && j < Seq.length t -> SatInner0.sat_inner (Type.creusat_trail_step_Step_lit (Seq.get t j)) a end module CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned_Interface use Type @@ -4409,10 +4379,10 @@ module CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model1 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, axiom . - predicate trail_entries_are_assigned [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 113 4 113 51] (self : Type.creusat_trail_trail) + predicate trail_entries_are_assigned [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 113 4 113 51] (self : Type.creusat_trail_trail) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 114 8 116 9] TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner (Model0.model (Type.creusat_trail_trail_Trail_trail self)) (Model1.model (Type.creusat_trail_trail_Trail_assignments self)) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 114 8 116 9] TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner (Model0.model (Type.creusat_trail_trail_Trail_trail self)) (Model1.model (Type.creusat_trail_trail_Trail_assignments self)) end module CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted_Interface use Type @@ -4426,10 +4396,10 @@ module CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted clone CreuSat_Logic_LogicUtil_Sorted_Interface as Sorted0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = usize, type a = Type.alloc_alloc_global, axiom . - predicate decisions_are_sorted [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 120 4 120 45] (self : Type.creusat_trail_trail) + predicate decisions_are_sorted [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 120 4 120 45] (self : Type.creusat_trail_trail) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 121 8 123 9] Sorted0.sorted (Model0.model (Type.creusat_trail_trail_Trail_decisions self)) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 121 8 123 9] Sorted0.sorted (Model0.model (Type.creusat_trail_trail_Trail_decisions self)) end module CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision_Interface use Type @@ -4456,11 +4426,11 @@ module CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, axiom . clone CreuSat_Logic_LogicAssignments_Impl1_Invariant_Interface as Invariant0 - predicate invariant_no_decision [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 88 4 88 58] (self : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) + predicate invariant_no_decision [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 88 4 88 58] (self : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 89 8 101 9] Invariant0.invariant' (Type.creusat_trail_trail_Trail_assignments self) f && TrailInvariant0.trail_invariant (Model0.model (Type.creusat_trail_trail_Trail_trail self)) f && LitToLevelInvariant0.lit_to_level_invariant (Model1.model (Type.creusat_trail_trail_Trail_lit_to_level self)) f && LitNotInLess0.lit_not_in_less self f && LitIsUnique0.lit_is_unique self && LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail self)) f (Model2.model (Type.creusat_trail_trail_Trail_assignments self)) && TrailEntriesAreAssigned0.trail_entries_are_assigned self && DecisionsAreSorted0.decisions_are_sorted self && UnitAreSat0.unit_are_sat (Model0.model (Type.creusat_trail_trail_Trail_trail self)) f (Type.creusat_trail_trail_Trail_assignments self) - axiom invariant_no_decision_spec : forall self : Type.creusat_trail_trail, f : Type.creusat_formula_formula . [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 87 4 87 62] invariant_no_decision self f = InvariantNoDecisionMirror0.invariant_no_decision_mirror self f + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 89 8 101 9] Invariant0.invariant' (Type.creusat_trail_trail_Trail_assignments self) f && TrailInvariant0.trail_invariant (Model0.model (Type.creusat_trail_trail_Trail_trail self)) f && LitToLevelInvariant0.lit_to_level_invariant (Model1.model (Type.creusat_trail_trail_Trail_lit_to_level self)) f && LitNotInLess0.lit_not_in_less self f && LitIsUnique0.lit_is_unique self && LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail self)) f (Model2.model (Type.creusat_trail_trail_Trail_assignments self)) && TrailEntriesAreAssigned0.trail_entries_are_assigned self && DecisionsAreSorted0.decisions_are_sorted self && UnitAreSat0.unit_are_sat (Model0.model (Type.creusat_trail_trail_Trail_trail self)) f (Type.creusat_trail_trail_Trail_assignments self) + axiom invariant_no_decision_spec : forall self : Type.creusat_trail_trail, f : Type.creusat_formula_formula . [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 87 4 87 62] invariant_no_decision self f = InvariantNoDecisionMirror0.invariant_no_decision_mirror self f end module CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision_Impl use Type @@ -4468,71 +4438,70 @@ module CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision_Impl use prelude.Prelude use prelude.UInt8 use mach.int.UInt64 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model5 with function Model0.model = Model6.model - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model5.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner0.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant2 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model5.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model0.model = Model4.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model2.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant0 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 + type a = Type.alloc_alloc_global, function Model0.model = Model5.model, axiom . + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = Invariant2.index_logic, function IndexLogic0.index_logic = SatInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner + clone CreuSat_Logic_LogicClause_Impl0_Model as Model5 with function Model1.model = UnitAreSat0.model, + function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, + function Model1.model = Invariant3.model clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant3 with function Model0.model = Model3.model, - function Model1.model = Model5.model - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = Invariant2.invariant', - predicate Invariant1.invariant' = Invariant3.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant1.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model3.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model3.model, - function Model1.model = Model5.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model3.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model1.model, - predicate Sorted0.sorted = Sorted0.sorted + type a = Type.alloc_alloc_global, function Model3.model = InvariantNoDecisionMirror0.model, + function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant3.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant3 with predicate Invariant1.invariant' = Invariant1.invariant' + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant2 with predicate Invariant0.invariant' = Invariant1.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model2.model, axiom . + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model0.model = InvariantNoDecisionMirror0.model, + function Model0.model = Invariant0.model, function Model1.model = TrailEntriesAreAssigned0.model, + function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = usize, type a = Type.alloc_alloc_global, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model0.model, - function Model1.model = Model2.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model0.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model0.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model2.model, - function Model1.model = Model0.model, predicate Invariant0.invariant' = Invariant1.invariant', - function Model2.model = Model1.model, function Model3.model = Model3.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat + type a = Type.alloc_alloc_global, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant0 + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 let rec ghost function invariant_no_decision (self : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) : bool - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 87 4 87 62] result = InvariantNoDecisionMirror0.invariant_no_decision_mirror self f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 87 4 87 62] result = InvariantNoDecisionMirror0.invariant_no_decision_mirror self f } = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 89 8 101 9] (let a' = Type.creusat_trail_trail_Trail_assignments self in Invariant0.invariant' a' f) && (let a' = let a' = Type.creusat_trail_trail_Trail_trail self in Model0.model a' in TrailInvariant0.trail_invariant a' f) && (let a' = let a' = Type.creusat_trail_trail_Trail_lit_to_level self in Model1.model a' in LitToLevelInvariant0.lit_to_level_invariant a' f) && LitNotInLess0.lit_not_in_less self f && LitIsUnique0.lit_is_unique self && (let a' = let a' = Type.creusat_trail_trail_Trail_trail self in Model0.model a' in let c' = let a' = Type.creusat_trail_trail_Trail_assignments self in Model2.model a' in LongArePostUnitInner0.long_are_post_unit_inner a' f c') && TrailEntriesAreAssigned0.trail_entries_are_assigned self && DecisionsAreSorted0.decisions_are_sorted self && (let a' = let a' = Type.creusat_trail_trail_Trail_trail self in Model0.model a' in let c' = Type.creusat_trail_trail_Trail_assignments self in UnitAreSat0.unit_are_sat a' f c') + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 89 8 101 9] (let a' = Type.creusat_trail_trail_Trail_assignments self in Invariant0.invariant' a' f) && (let a' = let a' = Type.creusat_trail_trail_Trail_trail self in Model0.model a' in TrailInvariant0.trail_invariant a' f) && (let a' = let a' = Type.creusat_trail_trail_Trail_lit_to_level self in Model1.model a' in LitToLevelInvariant0.lit_to_level_invariant a' f) && LitNotInLess0.lit_not_in_less self f && LitIsUnique0.lit_is_unique self && (let a' = let a' = Type.creusat_trail_trail_Trail_trail self in Model0.model a' in let c' = let a' = Type.creusat_trail_trail_Trail_assignments self in Model2.model a' in LongArePostUnitInner0.long_are_post_unit_inner a' f c') && TrailEntriesAreAssigned0.trail_entries_are_assigned self && DecisionsAreSorted0.decisions_are_sorted self && (let a' = let a' = Type.creusat_trail_trail_Trail_trail self in Model0.model a' in let c' = Type.creusat_trail_trail_Trail_assignments self in UnitAreSat0.unit_are_sat a' f c') end module CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface use Type @@ -4545,17 +4514,16 @@ module CreuSat_Logic_LogicTrail_Impl2_Invariant use seq.Seq use mach.int.UInt64 use prelude.Prelude + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror_Interface as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, axiom . clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror_Interface as InvariantNoDecisionMirror0 - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision_Interface as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - axiom . - predicate invariant' [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 59 4 59 46] (self : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision_Interface as InvariantNoDecision0 with axiom . + predicate invariant' [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 59 4 59 46] (self : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 60 8 63 9] InvariantNoDecision0.invariant_no_decision self f && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions self)) -> UInt64.to_int (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_decisions self)) i) <= Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail self))) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 60 8 63 9] InvariantNoDecision0.invariant_no_decision self f && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions self)) -> UInt64.to_int (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_decisions self)) i) <= Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail self))) end module CreuSat_Logic_LogicClause_Impl2_InFormula_Interface use Type @@ -4568,10 +4536,10 @@ module CreuSat_Logic_LogicClause_Impl2_InFormula use seq.Seq clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . - predicate in_formula [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 114 4 114 47] (self : Type.creusat_clause_clause) (f : Type.creusat_formula_formula) + predicate in_formula [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 114 4 114 47] (self : Type.creusat_clause_clause) (f : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 115 8 118 9] exists i : (int) . 0 <= i && i < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) && Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) i = self + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 115 8 118 9] exists i : (int) . 0 <= i && i < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) && Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) i = self end module CreuSat_Logic_LogicLit_Impl1_IsOpp_Interface use Type @@ -4581,10 +4549,10 @@ module CreuSat_Logic_LogicLit_Impl1_IsOpp use Type clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic_Interface as IsPositiveLogic0 clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - predicate is_opp [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 47 4 47 39] (self : Type.creusat_lit_lit) (o : Type.creusat_lit_lit) + predicate is_opp [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 47 4 47 39] (self : Type.creusat_lit_lit) (o : Type.creusat_lit_lit) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 48 8 50 9] IndexLogic0.index_logic self = IndexLogic0.index_logic o && IsPositiveLogic0.is_positive_logic self <> IsPositiveLogic0.is_positive_logic o + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 48 8 50 9] IndexLogic0.index_logic self = IndexLogic0.index_logic o && IsPositiveLogic0.is_positive_logic self <> IsPositiveLogic0.is_positive_logic o end module CreuSat_Logic_LogicClause_Impl2_SameIdxSamePolarityExcept_Interface use Type @@ -4600,10 +4568,10 @@ module CreuSat_Logic_LogicClause_Impl2_SameIdxSamePolarityExcept clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic_Interface as IsPositiveLogic0 clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 - predicate same_idx_same_polarity_except [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 92 4 92 85] (self : Type.creusat_clause_clause) (other : Type.creusat_clause_clause) (exception' : int) + predicate same_idx_same_polarity_except [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 92 4 92 85] (self : Type.creusat_clause_clause) (other : Type.creusat_clause_clause) (exception' : int) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 93 8 98 9] forall j : (int) . forall i : (int) . 0 <= i && i < Seq.length (Model0.model self) && 0 <= j && j < Seq.length (Model0.model other) -> IndexLogic0.index_logic (Seq.get (Model0.model self) i) <> exception' && IndexLogic0.index_logic (Seq.get (Model0.model self) i) = IndexLogic0.index_logic (Seq.get (Model0.model other) j) -> IsPositiveLogic0.is_positive_logic (Seq.get (Model0.model self) i) = IsPositiveLogic0.is_positive_logic (Seq.get (Model0.model other) j) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 93 8 98 9] forall j : (int) . forall i : (int) . 0 <= i && i < Seq.length (Model0.model self) && 0 <= j && j < Seq.length (Model0.model other) -> IndexLogic0.index_logic (Seq.get (Model0.model self) i) <> exception' && IndexLogic0.index_logic (Seq.get (Model0.model self) i) = IndexLogic0.index_logic (Seq.get (Model0.model other) j) -> IsPositiveLogic0.is_positive_logic (Seq.get (Model0.model self) i) = IsPositiveLogic0.is_positive_logic (Seq.get (Model0.model other) j) end module CreuSat_Logic_LogicUtil_ElemsLessThan_Interface use seq.Seq @@ -4618,10 +4586,10 @@ module CreuSat_Logic_LogicUtil_ElemsLessThan use prelude.Prelude use mach.int.UInt64 use mach.int.Int32 - predicate elems_less_than [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 58 0 58 53] (v : Seq.seq usize) (n : int) + predicate elems_less_than [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 58 0 58 53] (v : Seq.seq usize) (n : int) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 59 4 59 68] forall i : (int) . 0 <= i && i < Seq.length v -> UInt64.to_int (Seq.get v i) < n + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 59 4 59 68] forall i : (int) . 0 <= i && i < Seq.length v -> UInt64.to_int (Seq.get v i) < n end module CreuSat_Logic_LogicClause_Impl2_ClauseIsSeen_Interface use Type @@ -4637,10 +4605,10 @@ module CreuSat_Logic_LogicClause_Impl2_ClauseIsSeen clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = bool, type a = Type.alloc_alloc_global, axiom . - predicate clause_is_seen [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 237 4 237 56] (self : Type.creusat_clause_clause) (seen : Type.alloc_vec_vec bool (Type.alloc_alloc_global)) + predicate clause_is_seen [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 237 4 237 56] (self : Type.creusat_clause_clause) (seen : Type.alloc_vec_vec bool (Type.alloc_alloc_global)) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 238 8 241 9] forall idx : (int) . 0 <= idx && idx < Seq.length (Model0.model seen) -> Seq.get (Model0.model seen) idx = IdxInLogic0.idx_in_logic idx (Model1.model self) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 238 8 241 9] forall idx : (int) . 0 <= idx && idx < Seq.length (Model0.model seen) -> Seq.get (Model0.model seen) idx = IdxInLogic0.idx_in_logic idx (Model1.model self) end module CreuSat_Logic_LogicClause_Impl2_Unsat_Interface use Type @@ -4650,10 +4618,10 @@ module CreuSat_Logic_LogicClause_Impl2_Unsat use Type clone CreuSat_Logic_LogicClause_Impl2_UnsatInner_Interface as UnsatInner0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - predicate unsat [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 153 4 153 46] (self : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) + predicate unsat [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 153 4 153 46] (self : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 154 8 154 42] UnsatInner0.unsat_inner self (Model0.model a) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 154 8 154 42] UnsatInner0.unsat_inner self (Model0.model a) end module CreusotContracts_Logic_Int_Impl18_ModelTy use mach.int.Int @@ -4674,10 +4642,10 @@ module CreuSat_Logic_LogicClause_Impl2_ResolventOf clone CreuSat_Logic_LogicLit_Impl1_IsOpp_Interface as IsOpp0 clone CreuSat_Logic_LogicLit_Impl1_LitIn_Interface as LitIn0 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 - predicate resolvent_of [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 102 4 102 76] (self : Type.creusat_clause_clause) (c : Type.creusat_clause_clause) (c2 : Type.creusat_clause_clause) (k : int) (m : int) + predicate resolvent_of [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 102 4 102 76] (self : Type.creusat_clause_clause) (c : Type.creusat_clause_clause) (c2 : Type.creusat_clause_clause) (k : int) (m : int) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 103 8 110 9] (forall i : (int) . 0 <= i && i < Seq.length (Model0.model c) && i <> m -> LitIn0.lit_in (Seq.get (Model0.model c) i) self) && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model c2) && i <> k -> LitIn0.lit_in (Seq.get (Model0.model c2) i) self) && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model self) -> LitIn0.lit_in (Seq.get (Model0.model self) i) c || LitIn0.lit_in (Seq.get (Model0.model self) i) c2) && not LitIn0.lit_in (Seq.get (Model0.model c) m) self && not LitIn0.lit_in (Seq.get (Model0.model c2) k) self && IsOpp0.is_opp (Seq.get (Model0.model c2) k) (Seq.get (Model0.model c) m) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 103 8 110 9] (forall i : (int) . 0 <= i && i < Seq.length (Model0.model c) && i <> m -> LitIn0.lit_in (Seq.get (Model0.model c) i) self) && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model c2) && i <> k -> LitIn0.lit_in (Seq.get (Model0.model c2) i) self) && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model self) -> LitIn0.lit_in (Seq.get (Model0.model self) i) c || LitIn0.lit_in (Seq.get (Model0.model self) i) c2) && not LitIn0.lit_in (Seq.get (Model0.model c) m) self && not LitIn0.lit_in (Seq.get (Model0.model c2) k) self && IsOpp0.is_opp (Seq.get (Model0.model c2) k) (Seq.get (Model0.model c) m) end module CreuSat_Logic_LogicClause_Impl2_InFormulaInner_Interface use Type @@ -4690,10 +4658,10 @@ module CreuSat_Logic_LogicClause_Impl2_InFormulaInner use seq.Seq use mach.int.Int use mach.int.Int32 - predicate in_formula_inner [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 122 4 122 64] (self : Type.creusat_clause_clause) (f : (Seq.seq (Type.creusat_clause_clause), int)) + predicate in_formula_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 122 4 122 64] (self : Type.creusat_clause_clause) (f : (Seq.seq (Type.creusat_clause_clause), int)) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 123 8 125 9] exists i : (int) . 0 <= i && i < Seq.length (let (a, _) = f in a) && Seq.get (let (a, _) = f in a) i = self + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 123 8 125 9] exists i : (int) . 0 <= i && i < Seq.length (let (a, _) = f in a) && Seq.get (let (a, _) = f in a) i = self end module CreuSat_Logic_LogicClause_Impl2_Equals_Interface use Type @@ -4705,10 +4673,10 @@ module CreuSat_Logic_LogicClause_Impl2_Equals use mach.int.Int use mach.int.Int32 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 - predicate equals [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 210 4 210 42] (self : Type.creusat_clause_clause) (o : Type.creusat_clause_clause) + predicate equals [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 210 4 210 42] (self : Type.creusat_clause_clause) (o : Type.creusat_clause_clause) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 211 8 215 9] Seq.length (Model0.model self) = Seq.length (Model0.model o) && (forall j : (int) . 0 <= j && j < Seq.length (Model0.model self) -> Seq.get (Model0.model self) j = Seq.get (Model0.model o) j) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 211 8 215 9] Seq.length (Model0.model self) = Seq.length (Model0.model o) && (forall j : (int) . 0 <= j && j < Seq.length (Model0.model self) -> Seq.get (Model0.model self) j = Seq.get (Model0.model o) j) end module CreuSat_Logic_LogicConflictAnalysis_LemmaEqFormulas_Interface use seq.Seq @@ -4729,40 +4697,39 @@ module CreuSat_Logic_LogicConflictAnalysis_LemmaEqFormulas clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 clone CreuSat_Logic_LogicClause_Impl2_Equals_Interface as Equals0 clone CreuSat_Logic_LogicFormula_FormulaInvariant_Interface as FormulaInvariant0 - function lemma_eq_formulas [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_conflict_analysis.rs" 17 0 17 78] (f : (Seq.seq (Type.creusat_clause_clause), int)) (f2 : (Seq.seq (Type.creusat_clause_clause), int)) (c : Type.creusat_clause_clause) : () + function lemma_eq_formulas [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 17 0 17 78] (f : (Seq.seq (Type.creusat_clause_clause), int)) (f2 : (Seq.seq (Type.creusat_clause_clause), int)) (c : Type.creusat_clause_clause) : () = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_conflict_analysis.rs" 9 0 9 8] () - axiom lemma_eq_formulas_spec : forall f : (Seq.seq (Type.creusat_clause_clause), int), f2 : (Seq.seq (Type.creusat_clause_clause), int), c : Type.creusat_clause_clause . ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_conflict_analysis.rs" 10 0 10 32] (let (a, _) = f2 in a) = Seq.snoc (let (a, _) = f in a) c) -> ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_conflict_analysis.rs" 11 0 11 33] FormulaInvariant0.formula_invariant f) -> ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_conflict_analysis.rs" 14 0 14 41] Model0.model (Seq.get (let (a, _) = f2 in a) (Seq.length (let (a, _) = f2 in a) - 1)) = Model0.model c) && ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_conflict_analysis.rs" 13 0 13 85] forall i : (int) . 0 <= i && i < Seq.length (let (a, _) = f in a) -> Equals0.equals (Seq.get (let (a, _) = f in a) i) (Seq.get (let (a, _) = f2 in a) i)) && ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_conflict_analysis.rs" 12 0 12 43] Seq.length (let (a, _) = f in a) + 1 = Seq.length (let (a, _) = f2 in a)) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 9 0 9 8] () + axiom lemma_eq_formulas_spec : forall f : (Seq.seq (Type.creusat_clause_clause), int), f2 : (Seq.seq (Type.creusat_clause_clause), int), c : Type.creusat_clause_clause . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 10 0 10 32] (let (a, _) = f2 in a) = Seq.snoc (let (a, _) = f in a) c) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 11 0 11 33] FormulaInvariant0.formula_invariant f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 14 0 14 41] Model0.model (Seq.get (let (a, _) = f2 in a) (Seq.length (let (a, _) = f2 in a) - 1)) = Model0.model c) && ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 13 0 13 85] forall i : (int) . 0 <= i && i < Seq.length (let (a, _) = f in a) -> Equals0.equals (Seq.get (let (a, _) = f in a) i) (Seq.get (let (a, _) = f2 in a) i)) && ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 12 0 12 43] Seq.length (let (a, _) = f in a) + 1 = Seq.length (let (a, _) = f2 in a)) end module CreuSat_Logic_LogicConflictAnalysis_LemmaEqFormulas_Impl use seq.Seq use mach.int.Int use mach.int.Int32 use Type - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant1.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = Invariant1.index_logic + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant0.invariant_internal clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model0 with function Model0.model = Model1.model - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant0 with function Model0.model = Model0.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant0.invariant', - function Model0.model = Model0.model - clone CreuSat_Logic_LogicClause_Impl2_Equals as Equals0 with function Model0.model = Model0.model + type a = Type.alloc_alloc_global, function Model0.model = Model0.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model0 with function Model0.model = FormulaInvariant0.model, + function Model0.model = Equals0.model, function Model0.model = Invariant0.model + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant0 with predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicClause_Impl2_Equals as Equals0 + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 let rec ghost function lemma_eq_formulas (f : (Seq.seq (Type.creusat_clause_clause), int)) (f2 : (Seq.seq (Type.creusat_clause_clause), int)) (c : Type.creusat_clause_clause) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_conflict_analysis.rs" 10 0 10 32] (let (a, _) = f2 in a) = Seq.snoc (let (a, _) = f in a) c} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_conflict_analysis.rs" 11 0 11 33] FormulaInvariant0.formula_invariant f} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_conflict_analysis.rs" 12 0 12 43] Seq.length (let (a, _) = f in a) + 1 = Seq.length (let (a, _) = f2 in a) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_conflict_analysis.rs" 13 0 13 85] forall i : (int) . 0 <= i && i < Seq.length (let (a, _) = f in a) -> Equals0.equals (Seq.get (let (a, _) = f in a) i) (Seq.get (let (a, _) = f2 in a) i) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_conflict_analysis.rs" 14 0 14 41] Model0.model (Seq.get (let (a, _) = f2 in a) (Seq.length (let (a, _) = f2 in a) - 1)) = Model0.model c } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 10 0 10 32] (let (a, _) = f2 in a) = Seq.snoc (let (a, _) = f in a) c} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 11 0 11 33] FormulaInvariant0.formula_invariant f} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 12 0 12 43] Seq.length (let (a, _) = f in a) + 1 = Seq.length (let (a, _) = f2 in a) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 13 0 13 85] forall i : (int) . 0 <= i && i < Seq.length (let (a, _) = f in a) -> Equals0.equals (Seq.get (let (a, _) = f in a) i) (Seq.get (let (a, _) = f2 in a) i) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 14 0 14 41] Model0.model (Seq.get (let (a, _) = f2 in a) (Seq.length (let (a, _) = f2 in a) - 1)) = Model0.model c } = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_conflict_analysis.rs" 9 0 9 8] () + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 9 0 9 8] () end module CreuSat_Logic_LogicConflictAnalysis_LemmaResolventOfEquisatExtensionIsEquisat_Interface use seq.Seq @@ -4783,62 +4750,58 @@ module CreuSat_Logic_LogicConflictAnalysis_LemmaResolventOfEquisatExtensionIsEqu clone CreuSat_Logic_LogicClause_Impl2_InFormulaInner_Interface as InFormulaInner0 clone CreuSat_Logic_LogicClause_EquisatExtensionInner_Interface as EquisatExtensionInner0 clone CreuSat_Logic_LogicFormula_FormulaInvariant_Interface as FormulaInvariant0 - clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 - clone CreuSat_Logic_LogicClause_Impl2_Equals_Interface as Equals0 - clone CreuSat_Logic_LogicConflictAnalysis_LemmaEqFormulas_Interface as LemmaEqFormulas0 with predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, - predicate Equals0.equals = Equals0.equals, function Model0.model = Model0.model, axiom . - function lemma_resolvent_of_equisat_extension_is_equisat [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_conflict_analysis.rs" 26 0 28 1] (f : (Seq.seq (Type.creusat_clause_clause), int)) (c : Type.creusat_clause_clause) (c2 : Type.creusat_clause_clause) (c3 : Type.creusat_clause_clause) (k : int) (m : int) : () + clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 with function Model0.model = LemmaEqFormulas0.model + clone CreuSat_Logic_LogicClause_Impl2_Equals_Interface as Equals0 with predicate Equals0.equals = LemmaEqFormulas0.equals + clone CreuSat_Logic_LogicConflictAnalysis_LemmaEqFormulas_Interface as LemmaEqFormulas0 with axiom . + function lemma_resolvent_of_equisat_extension_is_equisat [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 26 0 28 1] (f : (Seq.seq (Type.creusat_clause_clause), int)) (c : Type.creusat_clause_clause) (c2 : Type.creusat_clause_clause) (c3 : Type.creusat_clause_clause) (k : int) (m : int) : () = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_conflict_analysis.rs" 20 0 20 8] let _ = LemmaEqFormulas0.lemma_eq_formulas f (Seq.snoc (let (a, _) = f in a) c3, let (_, a) = f in a) c3 in () - axiom lemma_resolvent_of_equisat_extension_is_equisat_spec : forall f : (Seq.seq (Type.creusat_clause_clause), int), c : Type.creusat_clause_clause, c2 : Type.creusat_clause_clause, c3 : Type.creusat_clause_clause, k : int, m : int . ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_conflict_analysis.rs" 21 0 21 33] FormulaInvariant0.formula_invariant f) -> ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_conflict_analysis.rs" 22 0 22 42] EquisatExtensionInner0.equisat_extension_inner c f) -> ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_conflict_analysis.rs" 23 0 23 35] InFormulaInner0.in_formula_inner c2 f) -> ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_conflict_analysis.rs" 24 0 24 41] ResolventOf0.resolvent_of c3 c c2 k m) -> ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_conflict_analysis.rs" 25 0 25 42] EquisatExtensionInner0.equisat_extension_inner c3 f) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 20 0 20 8] let _ = LemmaEqFormulas0.lemma_eq_formulas f (Seq.snoc (let (a, _) = f in a) c3, let (_, a) = f in a) c3 in () + axiom lemma_resolvent_of_equisat_extension_is_equisat_spec : forall f : (Seq.seq (Type.creusat_clause_clause), int), c : Type.creusat_clause_clause, c2 : Type.creusat_clause_clause, c3 : Type.creusat_clause_clause, k : int, m : int . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 21 0 21 33] FormulaInvariant0.formula_invariant f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 22 0 22 42] EquisatExtensionInner0.equisat_extension_inner c f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 23 0 23 35] InFormulaInner0.in_formula_inner c2 f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 24 0 24 41] ResolventOf0.resolvent_of c3 c c2 k m) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 25 0 25 42] EquisatExtensionInner0.equisat_extension_inner c3 f) end module CreuSat_Logic_LogicConflictAnalysis_LemmaResolventOfEquisatExtensionIsEquisat_Impl use seq.Seq use Type use mach.int.Int - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant1.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_IsOpp as IsOpp0 with function IndexLogic0.index_logic = IndexLogic0.index_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = IsOpp0.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = Invariant1.index_logic, function IndexLogic0.index_logic = SatInner1.index_logic + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = IsOpp0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = SatInner0.sat_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model0 with function Model0.model = Model1.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner0 with function Model0.model = Model0.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicClause_Impl2_Equals as Equals0 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicLit_Impl1_LitIn as LitIn0 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicClause_Impl2_ResolventOf as ResolventOf0 with function Model0.model = Model0.model, - predicate LitIn0.lit_in = LitIn0.lit_in, predicate IsOpp0.is_opp = IsOpp0.is_opp - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant0 with function Model0.model = Model0.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant0.invariant', - function Model0.model = Model0.model - clone CreuSat_Logic_LogicConflictAnalysis_LemmaEqFormulas as LemmaEqFormulas0 with predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, - predicate Equals0.equals = Equals0.equals, function Model0.model = Model0.model, axiom . + type a = Type.alloc_alloc_global, function Model0.model = Model0.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model0 with function Model0.model = FormulaInvariant0.model, + function Model0.model = ResolventOf0.model, function Model0.model = LemmaEqFormulas0.model, + function Model0.model = Invariant0.model, function Model0.model = LitIn0.model, function Model0.model = Equals0.model, + function Model0.model = SatInner0.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss0.formula_sat_inner + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant0.invariant_internal + clone CreuSat_Logic_LogicClause_Impl2_Equals as Equals0 with predicate Equals0.equals = LemmaEqFormulas0.equals + clone CreuSat_Logic_LogicLit_Impl1_IsOpp as IsOpp0 with predicate IsOpp0.is_opp = ResolventOf0.is_opp + clone CreuSat_Logic_LogicLit_Impl1_LitIn as LitIn0 with predicate LitIn0.lit_in = ResolventOf0.lit_in + clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant0 with predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = LemmaEqFormulas0.formula_invariant + clone CreuSat_Logic_LogicConflictAnalysis_LemmaEqFormulas as LemmaEqFormulas0 with axiom . + clone CreuSat_Logic_LogicClause_Impl2_ResolventOf as ResolventOf0 clone CreuSat_Logic_LogicClause_Impl2_InFormulaInner as InFormulaInner0 + clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 let rec ghost function lemma_resolvent_of_equisat_extension_is_equisat (f : (Seq.seq (Type.creusat_clause_clause), int)) (c : Type.creusat_clause_clause) (c2 : Type.creusat_clause_clause) (c3 : Type.creusat_clause_clause) (k : int) (m : int) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_conflict_analysis.rs" 21 0 21 33] FormulaInvariant0.formula_invariant f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_conflict_analysis.rs" 22 0 22 42] EquisatExtensionInner0.equisat_extension_inner c f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_conflict_analysis.rs" 23 0 23 35] InFormulaInner0.in_formula_inner c2 f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_conflict_analysis.rs" 24 0 24 41] ResolventOf0.resolvent_of c3 c c2 k m} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_conflict_analysis.rs" 25 0 25 42] EquisatExtensionInner0.equisat_extension_inner c3 f } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 21 0 21 33] FormulaInvariant0.formula_invariant f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 22 0 22 42] EquisatExtensionInner0.equisat_extension_inner c f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 23 0 23 35] InFormulaInner0.in_formula_inner c2 f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 24 0 24 41] ResolventOf0.resolvent_of c3 c c2 k m} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 25 0 25 42] EquisatExtensionInner0.equisat_extension_inner c3 f } = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_conflict_analysis.rs" 20 0 20 8] let _ = LemmaEqFormulas0.lemma_eq_formulas f (Seq.snoc (let (a, _) = f in a) c3, let (_, a) = f in a) c3 in () + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 20 0 20 8] let _ = LemmaEqFormulas0.lemma_eq_formulas f (Seq.snoc (let (a, _) = f in a) c3, let (_, a) = f in a) c3 in () end module CreusotContracts_Logic_Int_Impl18 @@ -4887,7 +4850,7 @@ module CreuSat_Trail_Impl0_DecisionLevel_Interface clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = usize, type a = Type.alloc_alloc_global, axiom . val decision_level [@cfg:stackify] (self : Type.creusat_trail_trail) : usize - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 36 4 36 50] UInt64.to_int result = Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions self)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 36 4 36 50] UInt64.to_int result = Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions self)) } end module CreuSat_Trail_Impl0_DecisionLevel @@ -4897,10 +4860,9 @@ module CreuSat_Trail_Impl0_DecisionLevel use Type use mach.int.Int clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Model0.model - let rec cfg decision_level [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 37 4 37 41] (self : Type.creusat_trail_trail) : usize - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 36 4 36 50] UInt64.to_int result = Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions self)) } + clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = usize, type a = Type.alloc_alloc_global + let rec cfg decision_level [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 37 4 37 41] (self : Type.creusat_trail_trail) : usize + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 36 4 36 50] UInt64.to_int result = Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions self)) } = var _0 : usize; @@ -4912,7 +4874,7 @@ module CreuSat_Trail_Impl0_DecisionLevel } BB0 { _2 <- Type.creusat_trail_trail_Trail_decisions self_1; - _0 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 38 8 38 28] Len0.len _2); + _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 38 8 38 28] Len0.len _2); goto BB1 } BB1 { @@ -4927,6 +4889,15 @@ module CreuSat_ConflictAnalysis_Resolve_Interface use mach.int.Int32 use prelude.Prelude use Type + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy4 with type ModelTy0.modelTy = Model6.modelTy + clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy3 with type t = usize, type a = Type.alloc_alloc_global, + type ModelTy0.modelTy = Model5.modelTy + clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy2 with type t = bool, type a = Type.alloc_alloc_global, + type ModelTy0.modelTy = Model4.modelTy + clone CreusotContracts_Logic_Int_Impl18_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model3.modelTy + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy, + type ModelTy0.modelTy = Model1.modelTy + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model9 with type t = usize, type a = Type.alloc_alloc_global, axiom . clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model8 with type t = bool, type a = Type.alloc_alloc_global, @@ -4936,58 +4907,45 @@ module CreuSat_ConflictAnalysis_Resolve_Interface clone CreuSat_Logic_LogicClause_Impl2_Unsat_Interface as Unsat0 clone CreuSat_Logic_LogicClause_Impl2_ClauseIsSeen_Interface as ClauseIsSeen0 clone CreuSat_Logic_LogicClause_EquisatExtensionInner_Interface as EquisatExtensionInner0 - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy4 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model6 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy4.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model6 with type t = Type.creusat_formula_formula clone CreuSat_Logic_LogicUtil_ElemsLessThan_Interface as ElemsLessThan0 - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy3 with type t = usize, type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model5 with type t = Type.alloc_vec_vec usize (Type.alloc_alloc_global), - type ModelTy0.modelTy = ModelTy3.modelTy - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy2 with type t = bool, type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model4 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global), - type ModelTy0.modelTy = ModelTy2.modelTy - clone CreusotContracts_Logic_Int_Impl18_ModelTy as ModelTy1 - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model3 with type t = usize, - type ModelTy0.modelTy = ModelTy1.modelTy + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model5 with type t = Type.alloc_vec_vec usize (Type.alloc_alloc_global) + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model4 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global) + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model3 with type t = usize clone CreuSat_Logic_LogicLit_Impl1_SatInner_Interface as SatInner0 clone CreuSat_Logic_LogicLit_Impl1_UnsatInner_Interface as UnsatInner0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model2 clone CreuSat_Logic_LogicClause_Impl2_SameIdxSamePolarityExcept_Interface as SameIdxSamePolarityExcept0 clone CreuSat_Logic_LogicLit_Impl1_IsOpp_Interface as IsOpp0 + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model1 with type t = Type.creusat_clause_clause clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model1 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy0.modelTy - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_clause_clause clone CreuSat_Logic_LogicClause_Impl2_InFormula_Interface as InFormula0 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val resolve [@cfg:stackify] (_f : Type.creusat_formula_formula) (c : borrowed (Type.creusat_clause_clause)) (o : Type.creusat_clause_clause) (idx : usize) (c_idx : usize) (trail : Type.creusat_trail_trail) (seen : borrowed (Type.alloc_vec_vec bool (Type.alloc_alloc_global))) (path_c : borrowed usize) (to_bump : borrowed (Type.alloc_vec_vec usize (Type.alloc_alloc_global))) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 32 0 32 27] Invariant0.invariant' _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 33 0 33 33] Invariant1.invariant' trail _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 34 0 34 32] UInt64.to_int idx < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 35 0 35 30] InFormula0.in_formula o _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 36 0 39 2] UInt64.to_int c_idx < Seq.length (Model0.model c) && IndexLogic0.index_logic (Seq.get (Model0.model c) (UInt64.to_int c_idx)) = UInt64.to_int idx && IsOpp0.is_opp (Seq.get (Model1.model o) 0) (Seq.get (Model0.model c) (UInt64.to_int c_idx))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 40 0 40 54] SameIdxSamePolarityExcept0.same_idx_same_polarity_except ( * c) o (UInt64.to_int idx)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 42 0 42 96] forall j : (int) . 1 <= j && j < Seq.length (Model1.model o) -> UnsatInner0.unsat_inner (Seq.get (Model1.model o) j) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 43 0 43 50] SatInner0.sat_inner (Seq.get (Model1.model o) 0) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 44 0 44 49] Model3.model path_c > 0 && Model3.model path_c <= Seq.length (Model0.model c)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 47 0 47 42] Seq.length (Model4.model seen) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 49 0 49 52] ElemsLessThan0.elems_less_than (Model5.model to_bump) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 51 0 51 49] EquisatExtensionInner0.equisat_extension_inner ( * c) (Model6.model _f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 52 0 52 46] ClauseIsSeen0.clause_is_seen ( * c) ( * seen)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 53 0 53 46] Unsat0.unsat ( * c) (Type.creusat_trail_trail_Trail_assignments trail)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 54 0 54 45] Invariant2.invariant' ( * c) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 45 0 45 35] UInt64.to_int ( ^ path_c) <= Seq.length (Model7.model ( ^ c)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 48 0 48 42] Seq.length (Model8.model ( ^ seen)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 50 0 50 52] ElemsLessThan0.elems_less_than (Model9.model ( ^ to_bump)) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 51 0 51 49] EquisatExtensionInner0.equisat_extension_inner ( ^ c) (Model6.model _f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 52 0 52 46] ClauseIsSeen0.clause_is_seen ( ^ c) ( ^ seen) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 53 0 53 46] Unsat0.unsat ( ^ c) (Type.creusat_trail_trail_Trail_assignments trail) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 54 0 54 45] Invariant2.invariant' ( ^ c) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 32 0 32 27] Invariant0.invariant' _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 33 0 33 33] Invariant1.invariant' trail _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 34 0 34 32] UInt64.to_int idx < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 35 0 35 30] InFormula0.in_formula o _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 36 0 39 2] UInt64.to_int c_idx < Seq.length (Model0.model c) && IndexLogic0.index_logic (Seq.get (Model0.model c) (UInt64.to_int c_idx)) = UInt64.to_int idx && IsOpp0.is_opp (Seq.get (Model1.model o) 0) (Seq.get (Model0.model c) (UInt64.to_int c_idx))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 40 0 40 54] SameIdxSamePolarityExcept0.same_idx_same_polarity_except ( * c) o (UInt64.to_int idx)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 42 0 42 96] forall j : (int) . 1 <= j && j < Seq.length (Model1.model o) -> UnsatInner0.unsat_inner (Seq.get (Model1.model o) j) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 43 0 43 50] SatInner0.sat_inner (Seq.get (Model1.model o) 0) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 44 0 44 49] Model3.model path_c > 0 && Model3.model path_c <= Seq.length (Model0.model c)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 47 0 47 42] Seq.length (Model4.model seen) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 49 0 49 52] ElemsLessThan0.elems_less_than (Model5.model to_bump) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 51 0 51 49] EquisatExtensionInner0.equisat_extension_inner ( * c) (Model6.model _f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 52 0 52 46] ClauseIsSeen0.clause_is_seen ( * c) ( * seen)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 53 0 53 46] Unsat0.unsat ( * c) (Type.creusat_trail_trail_Trail_assignments trail)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 54 0 54 45] Invariant2.invariant' ( * c) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 45 0 45 35] UInt64.to_int ( ^ path_c) <= Seq.length (Model7.model ( ^ c)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 48 0 48 42] Seq.length (Model8.model ( ^ seen)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 50 0 50 52] ElemsLessThan0.elems_less_than (Model9.model ( ^ to_bump)) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 51 0 51 49] EquisatExtensionInner0.equisat_extension_inner ( ^ c) (Model6.model _f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 52 0 52 46] ClauseIsSeen0.clause_is_seen ( ^ c) ( ^ seen) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 53 0 53 46] Unsat0.unsat ( ^ c) (Type.creusat_trail_trail_Trail_assignments trail) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 54 0 54 45] Invariant2.invariant' ( ^ c) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } end module CreuSat_ConflictAnalysis_Resolve @@ -4998,213 +4956,203 @@ module CreuSat_ConflictAnalysis_Resolve use prelude.Prelude use Type use prelude.UInt8 - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreuSat_Logic_LogicClause_Impl2_InFormulaInner as InFormulaInner0 + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = IsOpp0.index_logic, + function IndexLogic0.index_logic = SameIdxSamePolarityExcept0.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic, function IndexLogic0.index_logic = SatInner0.index_logic, + function IndexLogic0.index_logic = IdxInLogic0.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = Invariant5.index_logic + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = IsOpp0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = SameIdxSamePolarityExcept0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, + predicate SatInner0.sat_inner = SatInner1.sat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model15 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model7 with function Model0.model = Model15.model - clone CreuSat_Logic_LogicClause_Impl2_Equals as Equals0 with function Model0.model = Model7.model - clone CreuSat_Logic_LogicLit_Impl1_LitIn as LitIn0 with function Model0.model = Model7.model - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy4 - clone CreuSat_Logic_LogicUtil_ElemsLessThan as ElemsLessThan0 - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy3 with type t = usize, type a = Type.alloc_alloc_global - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = bool, type a = Type.alloc_alloc_global, axiom . - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy2 with type t = bool, type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Model_Impl1_Model as Model4 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global), - type ModelTy0.modelTy = ModelTy2.modelTy, function Model0.model = Model8.model - clone CreusotContracts_Logic_Int_Impl18_Model as Model14 - clone CreusotContracts_Logic_Int_Impl18_ModelTy as ModelTy1 - clone CreusotContracts_Logic_Model_Impl1_Model as Model3 with type t = usize, - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model14.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model13 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model0.model = Model13.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant3 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant5 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with function Model0.model = Model7.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant2.invariant', - function Model0.model = Model7.model - clone CreuSat_Logic_LogicConflictAnalysis_LemmaEqFormulas as LemmaEqFormulas0 with predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, - predicate Equals0.equals = Equals0.equals, function Model0.model = Model7.model, axiom . - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model7.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_IdxInLogic as IdxInLogic0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_Impl2_ClauseIsSeen as ClauseIsSeen0 with function Model0.model = Model8.model, - function Model1.model = Model7.model, predicate IdxInLogic0.idx_in_logic = IdxInLogic0.idx_in_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner1 with function Model0.model = Model7.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model2.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model7.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner0.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner1 with function Model0.model = Model7.model, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat0 with function Model0.model = Model2.model, - predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner - clone CreuSat_Logic_LogicClause_Impl2_SameIdxSamePolarityExcept as SameIdxSamePolarityExcept0 with function Model0.model = Model7.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl1_IsOpp as IsOpp0 with function IndexLogic0.index_logic = IndexLogic0.index_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic - clone CreuSat_Logic_LogicClause_Impl2_ResolventOf as ResolventOf0 with function Model0.model = Model7.model, - predicate LitIn0.lit_in = LitIn0.lit_in, predicate IsOpp0.is_opp = IsOpp0.is_opp - clone CreuSat_Logic_LogicConflictAnalysis_LemmaResolventOfEquisatExtensionIsEquisat as LemmaResolventOfEquisatExtensionIsEquisat0 with predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, - predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner, - predicate InFormulaInner0.in_formula_inner = InFormulaInner0.in_formula_inner, - predicate ResolventOf0.resolvent_of = ResolventOf0.resolvent_of, - function LemmaEqFormulas0.lemma_eq_formulas = LemmaEqFormulas0.lemma_eq_formulas, - predicate Equals0.equals = Equals0.equals, function Model0.model = Model7.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model1 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model7.model - clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model7.model + type a = Type.alloc_alloc_global, function Model0.model = Model7.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model7 with function Model0.model = Model0.model, + function Model0.model = Model1.model, function Model0.model = SameIdxSamePolarityExcept0.model, + function Model1.model = ClauseIsSeen0.model, function Model0.model = Invariant2.model, + function Model0.model = LitIn0.model, function Model0.model = ResolventOf0.model, + function Model0.model = LemmaResolventOfEquisatExtensionIsEquisat0.model, + function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, + function Model0.model = UnsatInner1.model, function Model0.model = LemmaEqFormulas0.model, + function Model0.model = Equals0.model, function Model1.model = UnitAreSat0.model, + function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, + function Model1.model = Invariant6.model, function Model0.model = SatInner1.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner1 with predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range clone CreusotContracts_Std1_Vec_Impl0_Model as Model12 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant6 with function Model0.model = Model12.model, - function Model1.model = Model7.model - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = Invariant5.invariant', - predicate Invariant1.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant4.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model12.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model12.model, - function Model1.model = Model7.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model12.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model10 with function Model0.model = Model12.model - clone CreusotContracts_Logic_Model_Impl0_Model as Model6 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy4.modelTy, function Model0.model = Model10.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model12.model, - predicate Invariant0.invariant' = Invariant2.invariant', function Model1.model = Model7.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model10.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreuSat_Logic_LogicClause_Impl2_InFormula as InFormula0 with function Model0.model = Model12.model + type a = Type.alloc_alloc_global, function Model0.model = InFormula0.model, + function Model0.model = InvariantMirror0.model, function Model0.model = Model10.model, + function Model3.model = InvariantNoDecisionMirror0.model, function Model0.model = LongArePostUnitInner0.model, + function Model0.model = UnitAreSat0.model, function Model0.model = LitNotInLessInner0.model, + function Model0.model = Invariant6.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant6 with predicate Invariant1.invariant' = Invariant4.invariant' + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = Invariant4.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner, + predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss0.formula_sat_inner + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreusotContracts_Std1_Vec_Impl0_Model as Model13 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model2.model, axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model0.model = Unsat0.model, + function Model2.model = InvariantNoDecision0.model, function Model0.model = InvariantNoDecisionMirror0.model, + function Model0.model = Invariant3.model, function Model1.model = TrailEntriesAreAssigned0.model, + function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant1.model, function Model0.model = Model5.model, + function Model1.model = InvariantNoDecision0.model, function Model2.model = InvariantNoDecisionMirror0.model, + function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted clone CreusotContracts_Std1_Vec_Impl0_Model as Model11 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model11.model, - function Model1.model = Model2.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model11.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model11.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model9.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model2.model, - function Model1.model = Model11.model, predicate Invariant0.invariant' = Invariant4.invariant', - function Model2.model = Model9.model, function Model3.model = Model12.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant3.invariant', function Model0.model = Model11.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model9.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model2.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model9.model, function Model1.model = Model11.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror - clone CreusotContracts_Logic_Model_Impl1_Model as Model5 with type t = Type.alloc_vec_vec usize (Type.alloc_alloc_global), - type ModelTy0.modelTy = ModelTy3.modelTy, function Model0.model = Model9.model + type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicClause_Impl2_Equals as Equals0 with predicate Equals0.equals = LemmaResolventOfEquisatExtensionIsEquisat0.equals, + predicate Equals0.equals = LemmaEqFormulas0.equals + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant2.invariant_internal + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant, + predicate FormulaInvariant0.formula_invariant = LemmaResolventOfEquisatExtensionIsEquisat0.formula_invariant, + predicate FormulaInvariant0.formula_invariant = LemmaEqFormulas0.formula_invariant + clone CreuSat_Logic_LogicConflictAnalysis_LemmaEqFormulas as LemmaEqFormulas0 with function LemmaEqFormulas0.lemma_eq_formulas = LemmaResolventOfEquisatExtensionIsEquisat0.lemma_eq_formulas, + axiom . + clone CreuSat_Logic_LogicClause_Impl2_InFormulaInner as InFormulaInner0 with predicate InFormulaInner0.in_formula_inner = LemmaResolventOfEquisatExtensionIsEquisat0.in_formula_inner + clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner1 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner + clone CreuSat_Logic_LogicLit_IdxInLogic as IdxInLogic0 with predicate IdxInLogic0.idx_in_logic = ClauseIsSeen0.idx_in_logic + clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy4 with type ModelTy0.modelTy = Model6.modelTy + clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy3 with type t = usize, type a = Type.alloc_alloc_global, + type ModelTy0.modelTy = Model5.modelTy + clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy2 with type t = bool, type a = Type.alloc_alloc_global, + type ModelTy0.modelTy = Model4.modelTy + clone CreusotContracts_Logic_Int_Impl18_Model as Model14 with function Model0.model = Model3.model + clone CreusotContracts_Logic_Int_Impl18_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model3.modelTy + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy, + type ModelTy0.modelTy = Model1.modelTy + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model10 with function Model0.model = Invariant0.model, + function Model0.model = Model6.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicLit_Impl1_IsOpp as IsOpp0 with predicate IsOpp0.is_opp = ResolventOf0.is_opp + clone CreuSat_Logic_LogicLit_Impl1_LitIn as LitIn0 with predicate LitIn0.lit_in = ResolventOf0.lit_in + clone CreuSat_Logic_LogicClause_Impl2_ResolventOf as ResolventOf0 with predicate ResolventOf0.resolvent_of = LemmaResolventOfEquisatExtensionIsEquisat0.resolvent_of + clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EquisatExtensionInner0.equisat_extension_inner = LemmaResolventOfEquisatExtensionIsEquisat0.equisat_extension_inner + clone CreuSat_Logic_LogicConflictAnalysis_LemmaResolventOfEquisatExtensionIsEquisat as LemmaResolventOfEquisatExtensionIsEquisat0 with axiom . + clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = bool, type a = Type.alloc_alloc_global, + function Model0.model = Model4.model, function Model0.model = ClauseIsSeen0.model, axiom . + clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat0 + clone CreuSat_Logic_LogicClause_Impl2_ClauseIsSeen as ClauseIsSeen0 + clone CreusotContracts_Logic_Model_Impl0_Model as Model6 with type t = Type.creusat_formula_formula + clone CreuSat_Logic_LogicUtil_ElemsLessThan as ElemsLessThan0 + clone CreusotContracts_Logic_Model_Impl1_Model as Model5 with type t = Type.alloc_vec_vec usize (Type.alloc_alloc_global) + clone CreusotContracts_Logic_Model_Impl1_Model as Model4 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global) + clone CreusotContracts_Logic_Model_Impl1_Model as Model3 with type t = usize + clone CreuSat_Logic_LogicClause_Impl2_SameIdxSamePolarityExcept as SameIdxSamePolarityExcept0 + clone CreusotContracts_Logic_Model_Impl0_Model as Model1 with type t = Type.creusat_clause_clause + clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_clause_clause + clone CreuSat_Logic_LogicClause_Impl2_InFormula as InFormula0 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy7 with type t = usize + clone Core_Slice_Index_Impl2_Output as Output1 with type t = usize, type Output0.output = Index2.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = usize, + predicate HasValue0.has_value = Index2.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = usize, + predicate InBounds0.in_bounds = Index2.in_bounds + clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy6 with type t = Type.creusat_lit_lit, + type a = Type.alloc_alloc_global, type ModelTy0.modelTy = Model16.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model as Model17 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global), + function Model1.model = IdxIn0.model + clone CreusotContracts_Logic_Model_Impl0_Model as Model16 with type t = Type.alloc_vec_vec (Type.creusat_lit_lit) (Type.alloc_alloc_global), + function Model0.model = IdxIn0.model + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy5 with type t = bool + clone Core_Slice_Index_Impl2_Output as Output0 with type t = bool, type Output0.output = IndexMut0.output + clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = bool, + predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = bool, + predicate HasValue0.has_value = IndexMut0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = bool, + predicate InBounds0.in_bounds = IndexMut0.in_bounds clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve4 with type t = Type.alloc_vec_vec usize (Type.alloc_alloc_global) clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve3 with type t = usize clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global) clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy7 with type t = usize - clone Core_Slice_Index_Impl2_Output as Output1 with type t = usize - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = usize - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = usize - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy6 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global + clone CreuSat_Trail_Impl0_DecisionLevel_Interface as DecisionLevel0 + clone Alloc_Vec_Impl16_Index_Interface as Index2 with type t = usize, type i = usize, type a = Type.alloc_alloc_global + clone Alloc_Vec_Impl1_Push_Interface as Push1 with type t = Type.creusat_lit_lit, type a = Type.alloc_alloc_global + clone Alloc_Vec_Impl1_Push_Interface as Push0 with type t = usize, type a = Type.alloc_alloc_global + clone CreuSat_ConflictAnalysis_IdxIn_Interface as IdxIn0 + clone CreuSat_Lit_Impl1_Index_Interface as Index1 + clone CreuSat_Clause_Impl0_Index_Interface as Index0 + clone CreuSat_Clause_Impl3_Len_Interface as Len0 clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = bool - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy5 with type t = bool - clone Core_Slice_Index_Impl2_Output as Output0 with type t = bool - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = bool - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = bool - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = bool - clone CreusotContracts_Logic_Model_Impl0_Model as Model16 with type t = Type.alloc_vec_vec (Type.creusat_lit_lit) (Type.alloc_alloc_global), - type ModelTy0.modelTy = ModelTy6.modelTy, function Model0.model = Model15.model - clone Alloc_Vec_Impl1_Push_Interface as Push1 with type t = Type.creusat_lit_lit, type a = Type.alloc_alloc_global, - function Model0.model = Model15.model clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = bool, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model8.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - predicate ResolveElswhere0.resolve_elswhere = ResolveElswhere0.resolve_elswhere, type Output0.output = Output0.output - clone CreusotContracts_Logic_Model_Impl0_Model as Model17 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global), - type ModelTy0.modelTy = ModelTy2.modelTy, function Model0.model = Model8.model - clone CreuSat_Lit_Impl1_Index_Interface as Index1 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_ConflictAnalysis_IdxIn_Interface as IdxIn0 with function Model0.model = Model16.model, - function Model1.model = Model17.model, - predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate IdxInLogic0.idx_in_logic = IdxInLogic0.idx_in_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Clause_Impl0_Index_Interface as Index0 with function Model0.model = Model1.model - clone CreuSat_Clause_Impl3_Len_Interface as Len0 with function Model0.model = Model1.model - clone CreuSat_Clause_Impl3_RemoveFromClause_Interface as RemoveFromClause0 with predicate Invariant0.invariant' = Invariant2.invariant', - function Model0.model = Model0.model, function Model1.model = Model7.model, predicate LitIn0.lit_in = LitIn0.lit_in - clone CreuSat_Trail_Impl0_DecisionLevel_Interface as DecisionLevel0 with function Model0.model = Model9.model - clone Alloc_Vec_Impl16_Index_Interface as Index2 with type t = usize, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model9.model, - predicate InBounds0.in_bounds = InBounds1.in_bounds, predicate HasValue0.has_value = HasValue1.has_value, - type Output0.output = Output1.output - clone Alloc_Vec_Impl1_Push_Interface as Push0 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Model9.model - let rec cfg resolve [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 55 0 58 1] (_f : Type.creusat_formula_formula) (c : borrowed (Type.creusat_clause_clause)) (o : Type.creusat_clause_clause) (idx : usize) (c_idx : usize) (trail : Type.creusat_trail_trail) (seen : borrowed (Type.alloc_vec_vec bool (Type.alloc_alloc_global))) (path_c : borrowed usize) (to_bump : borrowed (Type.alloc_vec_vec usize (Type.alloc_alloc_global))) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 32 0 32 27] Invariant0.invariant' _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 33 0 33 33] Invariant1.invariant' trail _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 34 0 34 32] UInt64.to_int idx < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 35 0 35 30] InFormula0.in_formula o _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 36 0 39 2] UInt64.to_int c_idx < Seq.length (Model0.model c) && IndexLogic0.index_logic (Seq.get (Model0.model c) (UInt64.to_int c_idx)) = UInt64.to_int idx && IsOpp0.is_opp (Seq.get (Model1.model o) 0) (Seq.get (Model0.model c) (UInt64.to_int c_idx))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 40 0 40 54] SameIdxSamePolarityExcept0.same_idx_same_polarity_except ( * c) o (UInt64.to_int idx)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 42 0 42 96] forall j : (int) . 1 <= j && j < Seq.length (Model1.model o) -> UnsatInner0.unsat_inner (Seq.get (Model1.model o) j) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 43 0 43 50] SatInner0.sat_inner (Seq.get (Model1.model o) 0) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 44 0 44 49] Model3.model path_c > 0 && Model3.model path_c <= Seq.length (Model0.model c)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 47 0 47 42] Seq.length (Model4.model seen) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 49 0 49 52] ElemsLessThan0.elems_less_than (Model5.model to_bump) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 51 0 51 49] EquisatExtensionInner0.equisat_extension_inner ( * c) (Model6.model _f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 52 0 52 46] ClauseIsSeen0.clause_is_seen ( * c) ( * seen)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 53 0 53 46] Unsat0.unsat ( * c) (Type.creusat_trail_trail_Trail_assignments trail)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 54 0 54 45] Invariant2.invariant' ( * c) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 45 0 45 35] UInt64.to_int ( ^ path_c) <= Seq.length (Model7.model ( ^ c)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 48 0 48 42] Seq.length (Model8.model ( ^ seen)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 50 0 50 52] ElemsLessThan0.elems_less_than (Model9.model ( ^ to_bump)) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 51 0 51 49] EquisatExtensionInner0.equisat_extension_inner ( ^ c) (Model6.model _f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 52 0 52 46] ClauseIsSeen0.clause_is_seen ( ^ c) ( ^ seen) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 53 0 53 46] Unsat0.unsat ( ^ c) (Type.creusat_trail_trail_Trail_assignments trail) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 54 0 54 45] Invariant2.invariant' ( ^ c) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } + type a = Type.alloc_alloc_global + clone CreuSat_Clause_Impl3_RemoveFromClause_Interface as RemoveFromClause0 + let rec cfg resolve [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 55 0 58 1] (_f : Type.creusat_formula_formula) (c : borrowed (Type.creusat_clause_clause)) (o : Type.creusat_clause_clause) (idx : usize) (c_idx : usize) (trail : Type.creusat_trail_trail) (seen : borrowed (Type.alloc_vec_vec bool (Type.alloc_alloc_global))) (path_c : borrowed usize) (to_bump : borrowed (Type.alloc_vec_vec usize (Type.alloc_alloc_global))) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 32 0 32 27] Invariant0.invariant' _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 33 0 33 33] Invariant1.invariant' trail _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 34 0 34 32] UInt64.to_int idx < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 35 0 35 30] InFormula0.in_formula o _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 36 0 39 2] UInt64.to_int c_idx < Seq.length (Model0.model c) && IndexLogic0.index_logic (Seq.get (Model0.model c) (UInt64.to_int c_idx)) = UInt64.to_int idx && IsOpp0.is_opp (Seq.get (Model1.model o) 0) (Seq.get (Model0.model c) (UInt64.to_int c_idx))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 40 0 40 54] SameIdxSamePolarityExcept0.same_idx_same_polarity_except ( * c) o (UInt64.to_int idx)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 42 0 42 96] forall j : (int) . 1 <= j && j < Seq.length (Model1.model o) -> UnsatInner0.unsat_inner (Seq.get (Model1.model o) j) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 43 0 43 50] SatInner0.sat_inner (Seq.get (Model1.model o) 0) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 44 0 44 49] Model3.model path_c > 0 && Model3.model path_c <= Seq.length (Model0.model c)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 47 0 47 42] Seq.length (Model4.model seen) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 49 0 49 52] ElemsLessThan0.elems_less_than (Model5.model to_bump) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 51 0 51 49] EquisatExtensionInner0.equisat_extension_inner ( * c) (Model6.model _f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 52 0 52 46] ClauseIsSeen0.clause_is_seen ( * c) ( * seen)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 53 0 53 46] Unsat0.unsat ( * c) (Type.creusat_trail_trail_Trail_assignments trail)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 54 0 54 45] Invariant2.invariant' ( * c) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 45 0 45 35] UInt64.to_int ( ^ path_c) <= Seq.length (Model7.model ( ^ c)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 48 0 48 42] Seq.length (Model8.model ( ^ seen)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 50 0 50 52] ElemsLessThan0.elems_less_than (Model9.model ( ^ to_bump)) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 51 0 51 49] EquisatExtensionInner0.equisat_extension_inner ( ^ c) (Model6.model _f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 52 0 52 46] ClauseIsSeen0.clause_is_seen ( ^ c) ( ^ seen) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 53 0 53 46] Unsat0.unsat ( ^ c) (Type.creusat_trail_trail_Trail_assignments trail) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 54 0 54 45] Invariant2.invariant' ( ^ c) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } = var _0 : (); @@ -5317,86 +5265,86 @@ module CreuSat_ConflictAnalysis_Resolve } BB0 { _11 <- (); - old_c_10 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 59 16 59 25] c_2); + old_c_10 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 59 16 59 25] c_2); goto BB1 } BB1 { _13 <- (); - old_seen_12 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 60 19 60 31] seen_7); + old_seen_12 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 60 19 60 31] seen_7); goto BB2 } BB2 { _15 <- (); - old_path_c_14 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 61 21 61 35] path_c_8); + old_path_c_14 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 61 21 61 35] path_c_8); goto BB3 } BB3 { _17 <- (); - old_to_bump_16 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 62 22 62 37] to_bump_9); + old_to_bump_16 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 62 22 62 37] to_bump_9); goto BB4 } BB4 { - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 64 4 64 42] ClauseIsSeen0.clause_is_seen ( * c_2) ( * seen_7) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 64 4 64 42] ClauseIsSeen0.clause_is_seen ( * c_2) ( * seen_7) }; _18 <- (); _20 <- borrow_mut ( * c_2); c_2 <- { c_2 with current = ( ^ _20) }; _21 <- c_idx_5; _22 <- _f_1; - _19 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 66 4 66 35] RemoveFromClause0.remove_from_clause _20 _21 _22); + _19 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 66 4 66 35] RemoveFromClause0.remove_from_clause _20 _21 _22); goto BB5 } BB5 { - path_c_8 <- { path_c_8 with current = ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 68 4 68 16] * path_c_8 - (1 : usize)) }; + path_c_8 <- { path_c_8 with current = ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 68 4 68 16] * path_c_8 - (1 : usize)) }; _24 <- borrow_mut ( * seen_7); seen_7 <- { seen_7 with current = ( ^ _24) }; _25 <- idx_4; - _23 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 69 4 69 13] IndexMut0.index_mut _24 _25); + _23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 69 4 69 13] IndexMut0.index_mut _24 _25); goto BB6 } BB6 { _23 <- { _23 with current = false }; assume { Resolve0.resolve _23 }; - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 71 4 71 45] ^ seen_7 = ^ old_seen_12 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 71 4 71 45] ^ seen_7 = ^ old_seen_12 }; _26 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 72 4 72 42] ClauseIsSeen0.clause_is_seen ( * c_2) ( * seen_7) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 72 4 72 42] ClauseIsSeen0.clause_is_seen ( * c_2) ( * seen_7) }; _27 <- (); _29 <- (); - old_c2_28 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 73 17 73 26] c_2); + old_c2_28 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 73 17 73 26] c_2); goto BB7 } BB7 { - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 74 4 74 47] not LitIn0.lit_in (Seq.get (Model0.model old_c_10) (UInt64.to_int c_idx_5)) ( * c_2) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 74 4 74 47] not LitIn0.lit_in (Seq.get (Model0.model old_c_10) (UInt64.to_int c_idx_5)) ( * c_2) }; _30 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 75 4 75 39] ^ c_2 = ^ old_c_10 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 75 4 75 39] ^ c_2 = ^ old_c_10 }; _31 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 76 4 77 50] forall j : (int) . 0 <= j && j < Seq.length (Model0.model old_c_10) && j <> UInt64.to_int c_idx_5 -> LitIn0.lit_in (Seq.get (Model0.model old_c_10) j) ( * c_2) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 76 4 77 50] forall j : (int) . 0 <= j && j < Seq.length (Model0.model old_c_10) && j <> UInt64.to_int c_idx_5 -> LitIn0.lit_in (Seq.get (Model0.model old_c_10) j) ( * c_2) }; _32 <- (); i_33 <- (1 : usize); goto BB8 } BB8 { - invariant inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 81 4 81 48] Invariant2.invariant' ( * c_2) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f_1)) }; - invariant all_unsat { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 82 4 82 55] Unsat0.unsat ( * c_2) (Type.creusat_trail_trail_Trail_assignments trail_6) }; - invariant i_bound { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 83 4 83 54] 1 <= UInt64.to_int i_33 && UInt64.to_int i_33 <= Seq.length (Model1.model o_3) }; - invariant not_in { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 84 4 84 77] not LitIn0.lit_in (Seq.get (Model0.model old_c_10) (UInt64.to_int c_idx_5)) ( * c_2) && not LitIn0.lit_in (Seq.get (Model1.model o_3) 0) ( * c_2) }; - invariant all_in { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 85 4 85 80] forall j : (int) . 1 <= j && j < UInt64.to_int i_33 -> LitIn0.lit_in (Seq.get (Model1.model o_3) j) ( * c_2) }; - invariant all_in2 { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 86 4 87 51] forall j : (int) . 0 <= j && j < Seq.length (Model0.model old_c_10) && j <> UInt64.to_int c_idx_5 -> LitIn0.lit_in (Seq.get (Model0.model old_c_10) j) ( * c_2) }; - invariant from_c_or_o { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 88 4 89 78] forall j : (int) . 0 <= j && j < Seq.length (Model0.model c_2) -> LitIn0.lit_in (Seq.get (Model0.model c_2) j) ( * old_c_10) || LitIn0.lit_in (Seq.get (Model0.model c_2) j) o_3 }; - invariant path_c_less { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 90 4 90 52] Model3.model path_c_8 <= Seq.length (Model0.model c_2) }; - invariant seen_is_clause { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 91 4 91 57] ClauseIsSeen0.clause_is_seen ( * c_2) ( * seen_7) }; - invariant seen_len { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 92 4 92 57] Seq.length (Model4.model seen_7) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f_1) }; - invariant elems_less { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 93 4 93 69] ElemsLessThan0.elems_less_than (Model5.model to_bump_9) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f_1)) }; - invariant proph_c { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 94 4 94 47] ^ c_2 = ^ old_c_10 }; - invariant proph_seen { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 95 4 95 56] ^ seen_7 = ^ old_seen_12 }; - invariant proph_path_c { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 96 4 96 62] ^ path_c_8 = ^ old_path_c_14 }; - invariant proph_to_bump { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 97 4 97 65] ^ to_bump_9 = ^ old_to_bump_16 }; + invariant inv { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 81 4 81 48] Invariant2.invariant' ( * c_2) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f_1)) }; + invariant all_unsat { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 82 4 82 55] Unsat0.unsat ( * c_2) (Type.creusat_trail_trail_Trail_assignments trail_6) }; + invariant i_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 83 4 83 54] 1 <= UInt64.to_int i_33 && UInt64.to_int i_33 <= Seq.length (Model1.model o_3) }; + invariant not_in { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 84 4 84 77] not LitIn0.lit_in (Seq.get (Model0.model old_c_10) (UInt64.to_int c_idx_5)) ( * c_2) && not LitIn0.lit_in (Seq.get (Model1.model o_3) 0) ( * c_2) }; + invariant all_in { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 85 4 85 80] forall j : (int) . 1 <= j && j < UInt64.to_int i_33 -> LitIn0.lit_in (Seq.get (Model1.model o_3) j) ( * c_2) }; + invariant all_in2 { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 86 4 87 51] forall j : (int) . 0 <= j && j < Seq.length (Model0.model old_c_10) && j <> UInt64.to_int c_idx_5 -> LitIn0.lit_in (Seq.get (Model0.model old_c_10) j) ( * c_2) }; + invariant from_c_or_o { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 88 4 89 78] forall j : (int) . 0 <= j && j < Seq.length (Model0.model c_2) -> LitIn0.lit_in (Seq.get (Model0.model c_2) j) ( * old_c_10) || LitIn0.lit_in (Seq.get (Model0.model c_2) j) o_3 }; + invariant path_c_less { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 90 4 90 52] Model3.model path_c_8 <= Seq.length (Model0.model c_2) }; + invariant seen_is_clause { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 91 4 91 57] ClauseIsSeen0.clause_is_seen ( * c_2) ( * seen_7) }; + invariant seen_len { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 92 4 92 57] Seq.length (Model4.model seen_7) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f_1) }; + invariant elems_less { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 93 4 93 69] ElemsLessThan0.elems_less_than (Model5.model to_bump_9) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f_1)) }; + invariant proph_c { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 94 4 94 47] ^ c_2 = ^ old_c_10 }; + invariant proph_seen { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 95 4 95 56] ^ seen_7 = ^ old_seen_12 }; + invariant proph_path_c { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 96 4 96 62] ^ path_c_8 = ^ old_path_c_14 }; + invariant proph_to_bump { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 97 4 97 65] ^ to_bump_9 = ^ old_to_bump_16 }; _37 <- i_33; _39 <- o_3; - _38 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 98 14 98 21] Len0.len _39); + _38 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 98 14 98 21] Len0.len _39); goto BB9 } BB9 { - _36 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 98 10 98 21] _37 < _38); + _36 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 98 10 98 21] _37 < _38); switch (_36) | False -> goto BB33 | _ -> goto BB10 @@ -5404,28 +5352,28 @@ module CreuSat_ConflictAnalysis_Resolve } BB10 { _41 <- (); - old_c3_40 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 99 21 99 30] c_2); + old_c3_40 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 99 21 99 30] c_2); goto BB11 } BB11 { - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 100 8 100 44] ^ c_2 = ^ old_c3_40 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 100 8 100 44] ^ c_2 = ^ old_c3_40 }; _42 <- (); _46 <- Type.creusat_clause_clause_Clause_lits ( * c_2); _45 <- _46; _50 <- o_3; _51 <- i_33; - _49 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 101 27 101 31] Index0.index _50 _51); + _49 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 101 27 101 31] Index0.index _50 _51); goto BB12 } BB12 { _48 <- _49; - _47 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 101 27 101 39] Index1.index _48); + _47 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 101 27 101 39] Index1.index _48); goto BB13 } BB13 { _53 <- seen_7; _52 <- * _53; - _44 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 101 11 101 47] IdxIn0.idx_in _45 _47 _52); + _44 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 101 11 101 47] IdxIn0.idx_in _45 _47 _52); goto BB14 } BB14 { @@ -5435,9 +5383,9 @@ module CreuSat_ConflictAnalysis_Resolve end } BB15 { - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 103 12 103 46] LitIn0.lit_in (Seq.get (Model1.model o_3) (UInt64.to_int i_33)) ( * c_2) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 103 12 103 46] LitIn0.lit_in (Seq.get (Model1.model o_3) (UInt64.to_int i_33)) ( * c_2) }; _54 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 104 12 104 40] Model0.model c_2 = Model0.model old_c3_40 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 104 12 104 40] Model0.model c_2 = Model0.model old_c3_40 }; _55 <- (); _43 <- (); goto BB32 @@ -5447,16 +5395,16 @@ module CreuSat_ConflictAnalysis_Resolve seen_7 <- { seen_7 with current = ( ^ _57) }; _61 <- o_3; _62 <- i_33; - _60 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 106 17 106 21] Index0.index _61 _62); + _60 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 106 17 106 21] Index0.index _61 _62); goto BB17 } BB17 { _59 <- _60; - _58 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 106 17 106 29] Index1.index _59); + _58 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 106 17 106 29] Index1.index _59); goto BB18 } BB18 { - _56 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 106 12 106 30] IndexMut0.index_mut _57 _58); + _56 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 106 12 106 30] IndexMut0.index_mut _57 _58); goto BB19 } BB19 { @@ -5466,16 +5414,16 @@ module CreuSat_ConflictAnalysis_Resolve to_bump_9 <- { to_bump_9 with current = ( ^ _64) }; _68 <- o_3; _69 <- i_33; - _67 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 107 25 107 29] Index0.index _68 _69); + _67 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 107 25 107 29] Index0.index _68 _69); goto BB20 } BB20 { _66 <- _67; - _65 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 107 25 107 37] Index1.index _66); + _65 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 107 25 107 37] Index1.index _66); goto BB21 } BB21 { - _63 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 107 12 107 38] Push0.push _64 _65); + _63 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 107 12 107 38] Push0.push _64 _65); goto BB22 } BB22 { @@ -5483,45 +5431,45 @@ module CreuSat_ConflictAnalysis_Resolve c_2 <- { c_2 with current = (let Type.CreuSat_Clause_Clause a b c d = * c_2 in Type.CreuSat_Clause_Clause a b c ( ^ _71)) }; _74 <- o_3; _75 <- i_33; - _73 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 108 24 108 28] Index0.index _74 _75); + _73 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 108 24 108 28] Index0.index _74 _75); goto BB23 } BB23 { _72 <- _73; - _70 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 108 12 108 29] Push1.push _71 _72); + _70 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 108 12 108 29] Push1.push _71 _72); goto BB24 } BB24 { _80 <- Type.creusat_trail_trail_Trail_lit_to_level trail_6; _84 <- o_3; _85 <- i_33; - _83 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 109 34 109 38] Index0.index _84 _85); + _83 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 109 34 109 38] Index0.index _84 _85); goto BB25 } BB25 { _82 <- _83; - _81 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 109 34 109 46] Index1.index _82); + _81 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 109 34 109 46] Index1.index _82); goto BB26 } BB26 { - _79 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 109 15 109 47] Index2.index _80 _81); + _79 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 109 15 109 47] Index2.index _80 _81); goto BB27 } BB27 { _78 <- _79; _87 <- trail_6; - _86 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 109 51 109 73] DecisionLevel0.decision_level _87); + _86 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 109 51 109 73] DecisionLevel0.decision_level _87); goto BB28 } BB28 { - _77 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 109 15 109 73] _78 >= _86); + _77 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 109 15 109 73] _78 >= _86); switch (_77) | False -> goto BB30 | _ -> goto BB29 end } BB29 { - path_c_8 <- { path_c_8 with current = ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 110 16 110 28] * path_c_8 + (1 : usize)) }; + path_c_8 <- { path_c_8 with current = ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 110 16 110 28] * path_c_8 + (1 : usize)) }; _76 <- (); goto BB31 } @@ -5530,17 +5478,17 @@ module CreuSat_ConflictAnalysis_Resolve goto BB31 } BB31 { - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 112 12 112 57] Model0.model c_2 = Seq.snoc (Model0.model old_c3_40) (Seq.get (Model1.model o_3) (UInt64.to_int i_33)) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 112 12 112 57] Model0.model c_2 = Seq.snoc (Model0.model old_c3_40) (Seq.get (Model1.model o_3) (UInt64.to_int i_33)) }; _88 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 113 12 113 46] LitIn0.lit_in (Seq.get (Model1.model o_3) (UInt64.to_int i_33)) ( * c_2) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 113 12 113 46] LitIn0.lit_in (Seq.get (Model1.model o_3) (UInt64.to_int i_33)) ( * c_2) }; _89 <- (); _43 <- (); goto BB32 } BB32 { - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 115 8 116 38] forall j : (int) . 0 <= j && j < Seq.length (Model0.model old_c3_40) -> Seq.get (Model0.model old_c3_40) j = Seq.get (Model0.model c_2) j }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 115 8 116 38] forall j : (int) . 0 <= j && j < Seq.length (Model0.model old_c3_40) -> Seq.get (Model0.model old_c3_40) j = Seq.get (Model0.model c_2) j }; _90 <- (); - i_33 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 117 8 117 14] i_33 + (1 : usize)); + i_33 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 117 8 117 14] i_33 + (1 : usize)); _35 <- (); goto BB8 } @@ -5550,9 +5498,9 @@ module CreuSat_ConflictAnalysis_Resolve assume { Resolve3.resolve path_c_8 }; assume { Resolve4.resolve to_bump_9 }; _34 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 119 4 119 64] ResolventOf0.resolvent_of ( * c_2) ( * old_c_10) o_3 0 (UInt64.to_int c_idx_5) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 119 4 119 64] ResolventOf0.resolvent_of ( * c_2) ( * old_c_10) o_3 0 (UInt64.to_int c_idx_5) }; _94 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 120 4 120 111] let _ = LemmaResolventOfEquisatExtensionIsEquisat0.lemma_resolvent_of_equisat_extension_is_equisat (Model6.model _f_1) ( * old_c_10) o_3 ( * c_2) (UInt64.to_int c_idx_5) 0 in true }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 120 4 120 111] let _ = LemmaResolventOfEquisatExtensionIsEquisat0.lemma_resolvent_of_equisat_extension_is_equisat (Model6.model _f_1) ( * old_c_10) o_3 ( * c_2) (UInt64.to_int c_idx_5) 0 in true }; _95 <- (); _0 <- (); return _0 @@ -5566,27 +5514,25 @@ module CreuSat_ConflictAnalysis_ChooseLiteral_Interface use Type use prelude.Prelude use mach.int.Int32 + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy2 with type ModelTy0.modelTy = Model3.modelTy + clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy1 with type t = bool, type a = Type.alloc_alloc_global, + type ModelTy0.modelTy = Model2.modelTy + clone CreusotContracts_Logic_Int_Impl18_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 clone CreuSat_Logic_LogicLit_Impl1_IsOpp_Interface as IsOpp0 - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy2 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model3 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy2.modelTy - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy1 with type t = bool, type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model2 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global), - type ModelTy0.modelTy = ModelTy1.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model3 with type t = Type.creusat_clause_clause + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model2 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global) clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, axiom . - clone CreusotContracts_Logic_Int_Impl18_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = usize, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = usize clone CreuSat_Logic_LogicClause_Impl2_Unsat_Interface as Unsat0 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant0 val choose_literal [@cfg:stackify] (c : Type.creusat_clause_clause) (trail : Type.creusat_trail_trail) (i : borrowed usize) (_f : Type.creusat_formula_formula) (seen : Type.alloc_vec_vec bool (Type.alloc_alloc_global)) : Type.core_option_option usize - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 125 0 125 33] Invariant0.invariant' trail _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 126 0 126 39] Unsat0.unsat c (Type.creusat_trail_trail_Trail_assignments trail)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 127 0 127 39] Model0.model i <= Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail trail))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 128 0 128 42] Seq.length (Model2.model seen) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 129 0 137 3] match (result) with + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 125 0 125 33] Invariant0.invariant' trail _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 126 0 126 39] Unsat0.unsat c (Type.creusat_trail_trail_Trail_assignments trail)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 127 0 127 39] Model0.model i <= Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail trail))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 128 0 128 42] Seq.length (Model2.model seen) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 129 0 137 3] match (result) with | Type.Core_Option_Option_Some r -> UInt64.to_int r < Seq.length (Model3.model c) && IsOpp0.is_opp (Seq.get (Model3.model c) (UInt64.to_int r)) (Type.creusat_trail_step_Step_lit (Seq.get (Model1.model (Type.creusat_trail_trail_Trail_trail trail)) (UInt64.to_int ( ^ i)))) && IndexLogic0.index_logic (Seq.get (Model3.model c) (UInt64.to_int r)) = IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit (Seq.get (Model1.model (Type.creusat_trail_trail_Trail_trail trail)) (UInt64.to_int ( ^ i)))) && UInt64.to_int ( ^ i) < Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail trail)) | Type.Core_Option_Option_None -> UInt64.to_int ( ^ i) = 0 end } @@ -5600,121 +5546,117 @@ module CreuSat_ConflictAnalysis_ChooseLiteral use prelude.Prelude use mach.int.Int32 use prelude.UInt8 - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = IsOpp0.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner1.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = Invariant3.index_logic, function IndexLogic0.index_logic = SatInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = IsOpp0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner1.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model11 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model8 with function Model0.model = Model11.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model5 with function Model0.model = Model10.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant1 with function Model0.model = Model5.model + type a = Type.alloc_alloc_global, function Model0.model = Model8.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model8 with function Model0.model = Model3.model, + function Model0.model = UnsatInner0.model, function Model1.model = UnitAreSat0.model, + function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, + function Model1.model = Invariant4.model clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant4 with function Model0.model = Model9.model, - function Model1.model = Model8.model - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model5.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model9.model, - function Model1.model = Model8.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant2 with predicate Invariant0.invariant' = Invariant3.invariant', - predicate Invariant1.invariant' = Invariant4.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant2.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model8.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner0.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model9.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner0 with function Model0.model = Model8.model, - predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner - clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat0 with function Model0.model = Model5.model, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model8.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model9.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicLit_Impl1_IsOpp as IsOpp0 with function IndexLogic0.index_logic = IndexLogic0.index_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy2 - clone CreusotContracts_Logic_Model_Impl0_Model as Model3 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy2.modelTy, function Model0.model = Model8.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = bool, type a = Type.alloc_alloc_global, axiom . - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy1 with type t = bool, type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Model_Impl0_Model as Model2 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global), - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model7.model - clone CreusotContracts_Logic_Int_Impl18_Model as Model6 - clone CreusotContracts_Logic_Int_Impl18_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = usize, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model6.model + type a = Type.alloc_alloc_global, function Model3.model = InvariantNoDecisionMirror0.model, + function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant4.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant4 with predicate Invariant1.invariant' = Invariant2.invariant' + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = Invariant2.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner1 with predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner, + predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model5.model, axiom . + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model5 with function Model0.model = Unsat0.model, + function Model2.model = InvariantNoDecision0.model, function Model0.model = InvariantNoDecisionMirror0.model, + function Model0.model = Invariant1.model, function Model1.model = TrailEntriesAreAssigned0.model, + function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant0.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model1.model, - function Model1.model = Model5.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model1.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model1.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model4.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model5.model, - function Model1.model = Model1.model, predicate Invariant0.invariant' = Invariant2.invariant', - function Model2.model = Model4.model, function Model3.model = Model9.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant1.invariant', function Model0.model = Model1.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model4.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model5.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant0 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model4.model, function Model1.model = Model1.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = usize + type a = Type.alloc_alloc_global, function Model1.model = Invariant0.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy2 with type ModelTy0.modelTy = Model3.modelTy + clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = bool, type a = Type.alloc_alloc_global, + function Model0.model = Model2.model, axiom . + clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy1 with type t = bool, type a = Type.alloc_alloc_global, + type ModelTy0.modelTy = Model2.modelTy + clone CreusotContracts_Logic_Int_Impl18_Model as Model6 with function Model0.model = Model0.model + clone CreusotContracts_Logic_Int_Impl18_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant0.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant0.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicLit_Impl1_IsOpp as IsOpp0 + clone CreusotContracts_Logic_Model_Impl0_Model as Model3 with type t = Type.creusat_clause_clause + clone CreusotContracts_Logic_Model_Impl0_Model as Model2 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global) + clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = usize + clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat0 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant0 clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy4 with type t = bool - clone Core_Slice_Index_Impl2_Output as Output1 with type t = bool - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = bool - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = bool + clone Core_Slice_Index_Impl2_Output as Output1 with type t = bool, type Output0.output = Index2.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = bool, + predicate HasValue0.has_value = Index2.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = bool, + predicate InBounds0.in_bounds = Index2.in_bounds clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy3 with type t = Type.creusat_trail_step - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_trail_step - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_trail_step - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_trail_step - clone CreuSat_Lit_Impl1_Index_Interface as Index1 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Clause_Impl0_Index_Interface as Index3 with function Model0.model = Model3.model - clone CreuSat_Clause_Impl3_Len_Interface as Len0 with function Model0.model = Model3.model - clone Alloc_Vec_Impl16_Index_Interface as Index2 with type t = bool, type i = usize, type a = Type.alloc_alloc_global, - function Model0.model = Model7.model, predicate InBounds0.in_bounds = InBounds1.in_bounds, - predicate HasValue0.has_value = HasValue1.has_value, type Output0.output = Output1.output + clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_trail_step, + type Output0.output = Index0.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_trail_step, + predicate HasValue0.has_value = Index0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_trail_step, + predicate InBounds0.in_bounds = Index0.in_bounds + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = usize + clone CreuSat_Clause_Impl0_Index_Interface as Index3 + clone CreuSat_Clause_Impl3_Len_Interface as Len0 + clone Alloc_Vec_Impl16_Index_Interface as Index2 with type t = bool, type i = usize, type a = Type.alloc_alloc_global + clone CreuSat_Lit_Impl1_Index_Interface as Index1 clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.creusat_trail_step, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - type Output0.output = Output0.output - let rec cfg choose_literal [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 138 0 138 108] (c : Type.creusat_clause_clause) (trail : Type.creusat_trail_trail) (i : borrowed usize) (_f : Type.creusat_formula_formula) (seen : Type.alloc_vec_vec bool (Type.alloc_alloc_global)) : Type.core_option_option usize - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 125 0 125 33] Invariant0.invariant' trail _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 126 0 126 39] Unsat0.unsat c (Type.creusat_trail_trail_Trail_assignments trail)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 127 0 127 39] Model0.model i <= Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail trail))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 128 0 128 42] Seq.length (Model2.model seen) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 129 0 137 3] match (result) with + type a = Type.alloc_alloc_global + let rec cfg choose_literal [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 138 0 138 108] (c : Type.creusat_clause_clause) (trail : Type.creusat_trail_trail) (i : borrowed usize) (_f : Type.creusat_formula_formula) (seen : Type.alloc_vec_vec bool (Type.alloc_alloc_global)) : Type.core_option_option usize + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 125 0 125 33] Invariant0.invariant' trail _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 126 0 126 39] Unsat0.unsat c (Type.creusat_trail_trail_Trail_assignments trail)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 127 0 127 39] Model0.model i <= Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail trail))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 128 0 128 42] Seq.length (Model2.model seen) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 129 0 137 3] match (result) with | Type.Core_Option_Option_Some r -> UInt64.to_int r < Seq.length (Model3.model c) && IsOpp0.is_opp (Seq.get (Model3.model c) (UInt64.to_int r)) (Type.creusat_trail_step_Step_lit (Seq.get (Model1.model (Type.creusat_trail_trail_Trail_trail trail)) (UInt64.to_int ( ^ i)))) && IndexLogic0.index_logic (Seq.get (Model3.model c) (UInt64.to_int r)) = IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit (Seq.get (Model1.model (Type.creusat_trail_trail_Trail_trail trail)) (UInt64.to_int ( ^ i)))) && UInt64.to_int ( ^ i) < Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail trail)) | Type.Core_Option_Option_None -> UInt64.to_int ( ^ i) = 0 end } @@ -5775,37 +5717,37 @@ module CreuSat_ConflictAnalysis_ChooseLiteral } BB0 { _7 <- (); - old_i_6 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 139 16 139 26] i_3); + old_i_6 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 139 16 139 26] i_3); goto BB1 } BB1 { goto BB2 } BB2 { - invariant i_bound { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 140 4 140 64] 0 <= Model0.model i_3 && Model0.model i_3 <= Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail trail_2)) }; - invariant proph_i { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 141 4 141 47] ^ i_3 = ^ old_i_6 }; + invariant i_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 140 4 140 64] 0 <= Model0.model i_3 && Model0.model i_3 <= Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail trail_2)) }; + invariant proph_i { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 141 4 141 47] ^ i_3 = ^ old_i_6 }; _11 <- * i_3; - _10 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 142 10 142 16] _11 > (0 : usize)); + _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 142 10 142 16] _11 > (0 : usize)); switch (_10) | False -> goto BB20 | _ -> goto BB3 end } BB3 { - i_3 <- { i_3 with current = ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 143 8 143 15] * i_3 - (1 : usize)) }; + i_3 <- { i_3 with current = ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 143 8 143 15] * i_3 - (1 : usize)) }; _14 <- seen_5; _18 <- Type.creusat_trail_trail_Trail_trail trail_2; _19 <- * i_3; - _17 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 144 16 144 31] Index0.index _18 _19); + _17 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 144 16 144 31] Index0.index _18 _19); goto BB4 } BB4 { _16 <- Type.creusat_trail_step_Step_lit _17; - _15 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 144 16 144 43] Index1.index _16); + _15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 144 16 144 43] Index1.index _16); goto BB5 } BB5 { - _13 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 144 11 144 44] Index2.index _14 _15); + _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 144 11 144 44] Index2.index _14 _15); goto BB6 } BB6 { @@ -5820,16 +5762,16 @@ module CreuSat_ConflictAnalysis_ChooseLiteral goto BB8 } BB8 { - invariant i_bound2 { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 146 12 146 72] 0 <= Model0.model i_3 && Model0.model i_3 < Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail trail_2)) }; - invariant k_bound { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 147 12 147 62] 0 <= UInt64.to_int k_20 && UInt64.to_int k_20 <= Seq.length (Model3.model c_1) }; - invariant proph_i2 { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 148 12 148 56] ^ i_3 = ^ old_i_6 }; + invariant i_bound2 { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 146 12 146 72] 0 <= Model0.model i_3 && Model0.model i_3 < Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail trail_2)) }; + invariant k_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 147 12 147 62] 0 <= UInt64.to_int k_20 && UInt64.to_int k_20 <= Seq.length (Model3.model c_1) }; + invariant proph_i2 { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 148 12 148 56] ^ i_3 = ^ old_i_6 }; _22 <- k_20; _24 <- c_1; - _23 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 149 22 149 29] Len0.len _24); + _23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 149 22 149 29] Len0.len _24); goto BB9 } BB9 { - _21 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 149 18 149 29] _22 < _23); + _21 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 149 18 149 29] _22 < _23); switch (_21) | False -> goto BB17 | _ -> goto BB10 @@ -5838,27 +5780,27 @@ module CreuSat_ConflictAnalysis_ChooseLiteral BB10 { _30 <- Type.creusat_trail_trail_Trail_trail trail_2; _31 <- * i_3; - _29 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 150 19 150 34] Index0.index _30 _31); + _29 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 150 19 150 34] Index0.index _30 _31); goto BB11 } BB11 { _28 <- Type.creusat_trail_step_Step_lit _29; - _27 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 150 19 150 46] Index1.index _28); + _27 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 150 19 150 46] Index1.index _28); goto BB12 } BB12 { _35 <- c_1; _36 <- k_20; - _34 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 150 50 150 54] Index3.index _35 _36); + _34 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 150 50 150 54] Index3.index _35 _36); goto BB13 } BB13 { _33 <- _34; - _32 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 150 50 150 62] Index1.index _33); + _32 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 150 50 150 62] Index1.index _33); goto BB14 } BB14 { - _26 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 150 19 150 62] _27 = _32); + _26 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 150 19 150 62] _27 = _32); switch (_26) | False -> goto BB16 | _ -> goto BB15 @@ -5872,7 +5814,7 @@ module CreuSat_ConflictAnalysis_ChooseLiteral } BB16 { _25 <- (); - k_20 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 153 16 153 22] k_20 + (1 : usize)); + k_20 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 153 16 153 22] k_20 + (1 : usize)); _9 <- (); goto BB8 } @@ -5912,26 +5854,26 @@ module CreuSat_Logic_LogicDecision_Impl0_Invariant use mach.int.Int32 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_decision_node, type a = Type.alloc_alloc_global, axiom . - predicate invariant' [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_decision.rs" 9 4 9 42] (self : Type.creusat_decision_decisions) (n : int) + predicate invariant' [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_decision.rs" 9 4 9 42] (self : Type.creusat_decision_decisions) (n : int) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_decision.rs" 10 8 17 9] Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) = n && (UInt64.to_int (Type.creusat_decision_decisions_Decisions_search self) < Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) || UInt64.to_int (Type.creusat_decision_decisions_Decisions_search self) = 18446744073709551615) && UInt64.to_int (Type.creusat_decision_decisions_Decisions_start self) < Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) -> (UInt64.to_int (Type.creusat_decision_node_Node_next (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) i)) = 18446744073709551615 || UInt64.to_int (Type.creusat_decision_node_Node_next (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) i)) < n) && (UInt64.to_int (Type.creusat_decision_node_Node_prev (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) i)) = 18446744073709551615 || UInt64.to_int (Type.creusat_decision_node_Node_prev (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) i)) < n)) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_decision.rs" 10 8 17 9] Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) = n && (UInt64.to_int (Type.creusat_decision_decisions_Decisions_search self) < Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) || UInt64.to_int (Type.creusat_decision_decisions_Decisions_search self) = 18446744073709551615) && UInt64.to_int (Type.creusat_decision_decisions_Decisions_start self) < Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) -> (UInt64.to_int (Type.creusat_decision_node_Node_next (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) i)) = 18446744073709551615 || UInt64.to_int (Type.creusat_decision_node_Node_next (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) i)) < n) && (UInt64.to_int (Type.creusat_decision_node_Node_prev (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) i)) = 18446744073709551615 || UInt64.to_int (Type.creusat_decision_node_Node_prev (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) i)) < n)) end -module CreuSat_Logic_LogicFormula_Impl1_NotSatisfiable_Interface +module CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface use Type predicate not_satisfiable (self : Type.creusat_formula_formula) end -module CreuSat_Logic_LogicFormula_Impl1_NotSatisfiable +module CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable use Type use seq.Seq use mach.int.Int use mach.int.Int32 clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension_Interface as EquisatExtension0 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 - predicate not_satisfiable [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 168 4 168 40] (self : Type.creusat_formula_formula) + predicate not_satisfiable [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 175 4 175 40] (self : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 169 8 171 9] exists c : (Type.creusat_clause_clause) . Seq.length (Model0.model c) = 0 && EquisatExtension0.equisat_extension c self + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 176 8 178 9] exists c : (Type.creusat_clause_clause) . Seq.length (Model0.model c) = 0 && EquisatExtension0.equisat_extension c self end module Alloc_Vec_Impl0_New_Interface type t @@ -5963,12 +5905,11 @@ module CreuSat_Formula_Impl0_Index_Interface use mach.int.Int use prelude.Prelude use Type - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_formula_formula val index [@cfg:stackify] (self : Type.creusat_formula_formula) (ix : usize) : Type.creusat_clause_clause - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 29 4 29 38] UInt64.to_int ix < Seq.length (let (a, _) = Model0.model self in a)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 30 4 30 41] Seq.get (let (a, _) = Model0.model self in a) (UInt64.to_int ix) = result } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 29 4 29 38] UInt64.to_int ix < Seq.length (let (a, _) = Model0.model self in a)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 30 4 30 41] Seq.get (let (a, _) = Model0.model self in a) (UInt64.to_int ix) = result } end module CreuSat_Formula_Impl0_Index @@ -5978,22 +5919,22 @@ module CreuSat_Formula_Impl0_Index use prelude.Prelude use Type clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model + type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Model0.model + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_formula_formula clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_clause_clause - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause + clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause, + type Output0.output = Index0.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause, + predicate HasValue0.has_value = Index0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause, + predicate InBounds0.in_bounds = Index0.in_bounds clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.creusat_clause_clause, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model2.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - type Output0.output = Output0.output - let rec cfg index [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 31 4 31 41] (self : Type.creusat_formula_formula) (ix : usize) : Type.creusat_clause_clause - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 29 4 29 38] UInt64.to_int ix < Seq.length (let (a, _) = Model0.model self in a)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 30 4 30 41] Seq.get (let (a, _) = Model0.model self in a) (UInt64.to_int ix) = result } + type a = Type.alloc_alloc_global + let rec cfg index [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 31 4 31 41] (self : Type.creusat_formula_formula) (ix : usize) : Type.creusat_clause_clause + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 29 4 29 38] UInt64.to_int ix < Seq.length (let (a, _) = Model0.model self in a)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 30 4 30 41] Seq.get (let (a, _) = Model0.model self in a) (UInt64.to_int ix) = result } = var _0 : Type.creusat_clause_clause; @@ -6011,7 +5952,7 @@ module CreuSat_Formula_Impl0_Index BB0 { _5 <- Type.creusat_formula_formula_Formula_clauses self_1; _6 <- ix_2; - _4 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 37 9 37 25] Index0.index _5 _6); + _4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 37 9 37 25] Index0.index _5 _6); goto BB1 } BB1 { @@ -6058,10 +5999,10 @@ module CreuSat_Logic_LogicUtil_SortedRangeTupleZeroth use mach.int.Int use prelude.Prelude use mach.int.UInt64 - predicate sorted_range_tuple_zeroth [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 34 0 34 80] (s : Seq.seq (usize, usize)) (l : int) (u : int) + predicate sorted_range_tuple_zeroth [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 34 0 34 80] (s : Seq.seq (usize, usize)) (l : int) (u : int) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 35 4 37 5] forall j : (int) . forall i : (int) . l <= i && i < j && j < u -> (let (a, _) = Seq.get s i in a) <= (let (a, _) = Seq.get s j in a) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 35 4 37 5] forall j : (int) . forall i : (int) . l <= i && i < j && j < u -> (let (a, _) = Seq.get s i in a) <= (let (a, _) = Seq.get s j in a) end module CreuSat_Logic_LogicUtil_SortedTupleZeroth_Interface use seq.Seq @@ -6077,10 +6018,10 @@ module CreuSat_Logic_LogicUtil_SortedTupleZeroth use mach.int.UInt64 use mach.int.Int32 clone CreuSat_Logic_LogicUtil_SortedRangeTupleZeroth_Interface as SortedRangeTupleZeroth0 - predicate sorted_tuple_zeroth [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 41 0 41 58] (s : Seq.seq (usize, usize)) + predicate sorted_tuple_zeroth [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 41 0 41 58] (s : Seq.seq (usize, usize)) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 42 4 44 5] SortedRangeTupleZeroth0.sorted_range_tuple_zeroth s 0 (Seq.length s) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 42 4 44 5] SortedRangeTupleZeroth0.sorted_range_tuple_zeroth s 0 (Seq.length s) end module CreusotContracts_Logic_Seq_Impl2_PermutationOf_Interface type t @@ -6109,27 +6050,26 @@ module CreuSat_Logic_LogicUtil_Partition use prelude.Prelude use mach.int.UInt64 use mach.int.Int32 - predicate partition [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 48 0 48 56] (v : Seq.seq (usize, usize)) (i : int) + predicate partition [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 48 0 48 56] (v : Seq.seq (usize, usize)) (i : int) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 49 4 49 109] forall k2 : (int) . forall k1 : (int) . 0 <= k1 && k1 < i && i <= k2 && k2 < Seq.length v -> (let (a, _) = Seq.get v k1 in a) <= (let (a, _) = Seq.get v k2 in a) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 49 4 49 109] forall k2 : (int) . forall k1 : (int) . 0 <= k1 && k1 < i && i <= k2 && k2 < Seq.length v -> (let (a, _) = Seq.get v k1 in a) <= (let (a, _) = Seq.get v k2 in a) end module CreuSat_Util_Sort_Interface use prelude.Prelude use Type use mach.int.Int use mach.int.UInt64 - clone CreusotContracts_Logic_Seq_Impl2_PermutationOf_Interface as PermutationOf0 with type t = (usize, usize) clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy0 with type t = (usize, usize), - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model1 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global), - type ModelTy0.modelTy = ModelTy0.modelTy + type a = Type.alloc_alloc_global, type ModelTy0.modelTy = Model1.modelTy + clone CreusotContracts_Logic_Seq_Impl2_PermutationOf_Interface as PermutationOf0 with type t = (usize, usize) + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model1 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global) clone CreuSat_Logic_LogicUtil_SortedTupleZeroth_Interface as SortedTupleZeroth0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = (usize, usize), type a = Type.alloc_alloc_global, axiom . val sort [@cfg:stackify] (v : borrowed (Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global))) : () - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 60 0 60 36] SortedTupleZeroth0.sorted_tuple_zeroth (Model0.model ( ^ v)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 61 0 61 36] PermutationOf0.permutation_of (Model0.model ( ^ v)) (Model1.model v) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 60 0 60 36] SortedTupleZeroth0.sorted_tuple_zeroth (Model0.model ( ^ v)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 61 0 61 36] PermutationOf0.permutation_of (Model0.model ( ^ v)) (Model1.model v) } end module CreuSat_Util_Sort @@ -6139,38 +6079,37 @@ module CreuSat_Util_Sort use mach.int.UInt64 use seq.Seq use mach.int.Int32 + clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy0 with type t = (usize, usize), + type a = Type.alloc_alloc_global, type ModelTy0.modelTy = Model1.modelTy clone CreuSat_Logic_LogicUtil_Partition as Partition0 + clone CreuSat_Logic_LogicUtil_SortedRangeTupleZeroth as SortedRangeTupleZeroth0 with predicate SortedRangeTupleZeroth0.sorted_range_tuple_zeroth = SortedTupleZeroth0.sorted_range_tuple_zeroth clone CreusotContracts_Logic_Seq_Impl2_PermutationOf as PermutationOf0 with type t = (usize, usize) - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy0 with type t = (usize, usize), - type a = Type.alloc_alloc_global - clone CreuSat_Logic_LogicUtil_SortedRangeTupleZeroth as SortedRangeTupleZeroth0 - clone CreuSat_Logic_LogicUtil_SortedTupleZeroth as SortedTupleZeroth0 with predicate SortedRangeTupleZeroth0.sorted_range_tuple_zeroth = SortedRangeTupleZeroth0.sorted_range_tuple_zeroth clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = (usize, usize), type a = Type.alloc_alloc_global, + function Model0.model = Model1.model, axiom . + clone CreusotContracts_Logic_Model_Impl1_Model as Model1 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global) + clone CreuSat_Logic_LogicUtil_SortedTupleZeroth as SortedTupleZeroth0 + clone CreusotContracts_Std1_Slice_Impl0_Model as Model2 with type t = (usize, usize), + function Model0.model = DerefMut0.model, function Model1.model = Swap0.model, function Model0.model = Model3.model, axiom . - clone CreusotContracts_Logic_Model_Impl1_Model as Model1 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global), - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model0.model + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = (usize, usize), + type ModelTy0.modelTy = Model3.modelTy + clone CreusotContracts_Logic_Model_Impl1_Model as Model3 with type t = seq (usize, usize), + function Model0.model = Swap0.model + clone Core_Slice_Index_Impl2_Output as Output0 with type t = (usize, usize), type Output0.output = Index0.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = (usize, usize), + predicate HasValue0.has_value = Index0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = (usize, usize), + predicate InBounds0.in_bounds = Index0.in_bounds clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global) clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = seq (usize, usize) - clone CreusotContracts_Std1_Slice_Impl0_Model as Model2 with type t = (usize, usize), axiom . - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = (usize, usize) - clone CreusotContracts_Logic_Model_Impl1_Model as Model3 with type t = seq (usize, usize), - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model2.model - clone Core_Slice_Impl0_Swap_Interface as Swap0 with type t = (usize, usize), function Model0.model = Model3.model, - function Model1.model = Model2.model - clone Core_Slice_Index_Impl2_Output as Output0 with type t = (usize, usize) - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = (usize, usize) - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = (usize, usize) - clone Alloc_Vec_Impl11_DerefMut_Interface as DerefMut0 with type t = (usize, usize), type a = Type.alloc_alloc_global, - function Model0.model = Model2.model, function Model1.model = Model0.model + clone Core_Slice_Impl0_Swap_Interface as Swap0 with type t = (usize, usize) + clone Alloc_Vec_Impl11_DerefMut_Interface as DerefMut0 with type t = (usize, usize), type a = Type.alloc_alloc_global clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = (usize, usize), type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - type Output0.output = Output0.output - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = (usize, usize), type a = Type.alloc_alloc_global, - function Model0.model = Model0.model - let rec cfg sort [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 62 0 62 40] (v : borrowed (Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global))) : () - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 60 0 60 36] SortedTupleZeroth0.sorted_tuple_zeroth (Model0.model ( ^ v)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 61 0 61 36] PermutationOf0.permutation_of (Model0.model ( ^ v)) (Model1.model v) } + type a = Type.alloc_alloc_global + clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = (usize, usize), type a = Type.alloc_alloc_global + let rec cfg sort [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 62 0 62 40] (v : borrowed (Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global))) : () + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 60 0 60 36] SortedTupleZeroth0.sorted_tuple_zeroth (Model0.model ( ^ v)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 61 0 61 36] PermutationOf0.permutation_of (Model0.model ( ^ v)) (Model1.model v) } = var _0 : (); @@ -6221,25 +6160,25 @@ module CreuSat_Util_Sort BB0 { i_2 <- (0 : usize); _4 <- (); - old_v_3 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 64 16 64 28] v_1); + old_v_3 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 64 16 64 28] v_1); goto BB1 } BB1 { goto BB2 } BB2 { - invariant proph_const { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 65 4 65 51] ^ v_1 = ^ old_v_3 }; - invariant permutation { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 66 4 66 67] PermutationOf0.permutation_of (Model1.model v_1) (Model0.model ( * old_v_3)) }; - invariant i_bound { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 67 4 67 43] UInt64.to_int i_2 <= Seq.length (Model1.model v_1) }; - invariant sorted { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 68 4 68 62] SortedRangeTupleZeroth0.sorted_range_tuple_zeroth (Model1.model v_1) 0 (UInt64.to_int i_2) }; - invariant partition { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 69 4 69 46] Partition0.partition (Model1.model v_1) (UInt64.to_int i_2) }; + invariant proph_const { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 65 4 65 51] ^ v_1 = ^ old_v_3 }; + invariant permutation { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 66 4 66 67] PermutationOf0.permutation_of (Model1.model v_1) (Model0.model ( * old_v_3)) }; + invariant i_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 67 4 67 43] UInt64.to_int i_2 <= Seq.length (Model1.model v_1) }; + invariant sorted { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 68 4 68 62] SortedRangeTupleZeroth0.sorted_range_tuple_zeroth (Model1.model v_1) 0 (UInt64.to_int i_2) }; + invariant partition { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 69 4 69 46] Partition0.partition (Model1.model v_1) (UInt64.to_int i_2) }; _7 <- i_2; _9 <- * v_1; - _8 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 70 14 70 21] Len0.len _9); + _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 70 14 70 21] Len0.len _9); goto BB3 } BB3 { - _6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 70 10 70 21] _7 < _8); + _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 70 10 70 21] _7 < _8); switch (_6) | False -> goto BB16 | _ -> goto BB4 @@ -6248,20 +6187,20 @@ module CreuSat_Util_Sort BB4 { max_10 <- i_2; _12 <- i_2; - j_11 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 72 20 72 25] _12 + (1 : usize)); + j_11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 72 20 72 25] _12 + (1 : usize)); goto BB5 } BB5 { - invariant max_is_max { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 73 8 73 96] forall k : (int) . UInt64.to_int i_2 <= k && k < UInt64.to_int j_11 -> (let (a, _) = Seq.get (Model1.model v_1) (UInt64.to_int max_10) in a) <= (let (a, _) = Seq.get (Model1.model v_1) k in a) }; - invariant j_bound { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 74 8 74 59] UInt64.to_int i_2 <= UInt64.to_int j_11 && UInt64.to_int j_11 <= Seq.length (Model1.model v_1) }; - invariant max_bound { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 75 8 75 56] UInt64.to_int i_2 <= UInt64.to_int max_10 && UInt64.to_int max_10 < UInt64.to_int j_11 }; + invariant max_is_max { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 73 8 73 96] forall k : (int) . UInt64.to_int i_2 <= k && k < UInt64.to_int j_11 -> (let (a, _) = Seq.get (Model1.model v_1) (UInt64.to_int max_10) in a) <= (let (a, _) = Seq.get (Model1.model v_1) k in a) }; + invariant j_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 74 8 74 59] UInt64.to_int i_2 <= UInt64.to_int j_11 && UInt64.to_int j_11 <= Seq.length (Model1.model v_1) }; + invariant max_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 75 8 75 56] UInt64.to_int i_2 <= UInt64.to_int max_10 && UInt64.to_int max_10 < UInt64.to_int j_11 }; _15 <- j_11; _17 <- * v_1; - _16 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 76 18 76 25] Len0.len _17); + _16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 76 18 76 25] Len0.len _17); goto BB6 } BB6 { - _14 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 76 14 76 25] _15 < _16); + _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 76 14 76 25] _15 < _16); switch (_14) | False -> goto BB13 | _ -> goto BB7 @@ -6270,19 +6209,19 @@ module CreuSat_Util_Sort BB7 { _22 <- * v_1; _23 <- j_11; - _21 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 77 15 77 19] Index0.index _22 _23); + _21 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 77 15 77 19] Index0.index _22 _23); goto BB8 } BB8 { _20 <- (let (a, _) = _21 in a); _26 <- * v_1; _27 <- max_10; - _25 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 77 24 77 30] Index0.index _26 _27); + _25 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 77 24 77 30] Index0.index _26 _27); goto BB9 } BB9 { _24 <- (let (a, _) = _25 in a); - _19 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 77 15 77 32] _20 < _24); + _19 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 77 15 77 32] _20 < _24); switch (_19) | False -> goto BB11 | _ -> goto BB10 @@ -6299,7 +6238,7 @@ module CreuSat_Util_Sort goto BB12 } BB12 { - j_11 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 80 12 80 18] j_11 + (1 : usize)); + j_11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 80 12 80 18] j_11 + (1 : usize)); _5 <- (); goto BB5 } @@ -6307,7 +6246,7 @@ module CreuSat_Util_Sort _13 <- (); _35 <- borrow_mut ( * v_1); v_1 <- { v_1 with current = ( ^ _35) }; - _34 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 82 8 82 22] DerefMut0.deref_mut _35); + _34 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 82 8 82 22] DerefMut0.deref_mut _35); goto BB14 } BB14 { @@ -6315,12 +6254,12 @@ module CreuSat_Util_Sort _34 <- { _34 with current = ( ^ _33) }; _36 <- i_2; _37 <- max_10; - _32 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 82 8 82 22] Swap0.swap _33 _36 _37); + _32 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 82 8 82 22] Swap0.swap _33 _36 _37); goto BB15 } BB15 { assume { Resolve0.resolve _34 }; - i_2 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 83 8 83 14] i_2 + (1 : usize)); + i_2 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 83 8 83 14] i_2 + (1 : usize)); _5 <- (); goto BB2 } @@ -6342,11 +6281,11 @@ module CreuSat_Decision_Impl1_Rescore_Interface type a = Type.alloc_alloc_global, axiom . clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant0 val rescore [@cfg:stackify] (self : borrowed (Type.creusat_decision_decisions)) (_f : Type.creusat_formula_formula) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 130 4 130 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 131 4 131 56] Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self))) < 18446744073709551615} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 130 4 130 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 132 4 132 67] UInt64.to_int (Type.creusat_decision_decisions_Decisions_timestamp ( ^ self)) = Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self))) + 1 } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 133 4 133 73] Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( ^ self))) = Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self))) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 130 4 130 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 131 4 131 56] Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self))) < 18446744073709551615} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 130 4 130 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 132 4 132 67] UInt64.to_int (Type.creusat_decision_decisions_Decisions_timestamp ( ^ self)) = Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self))) + 1 } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 133 4 133 73] Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( ^ self))) = Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self))) } end module CreuSat_Decision_Impl1_Rescore @@ -6357,31 +6296,30 @@ module CreuSat_Decision_Impl1_Rescore use mach.int.Int32 use Type clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant0 with function Model0.model = Model0.model - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_decision_decisions - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_decision_node + type a = Type.alloc_alloc_global, function Model0.model = Invariant0.model, axiom . + clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant0 clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_decision_node - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_decision_node - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.creusat_decision_node - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_decision_node - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_decision_node + clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_decision_node, + type Output0.output = IndexMut0.output, type Output0.output = Index0.output + clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.creusat_decision_node, + predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_decision_node, + predicate HasValue0.has_value = IndexMut0.has_value, predicate HasValue0.has_value = Index0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_decision_node, + predicate InBounds0.in_bounds = IndexMut0.in_bounds, predicate InBounds0.in_bounds = Index0.in_bounds + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_decision_decisions clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.creusat_decision_node, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - type Output0.output = Output0.output + type a = Type.alloc_alloc_global + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_decision_node clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.creusat_decision_node, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - predicate ResolveElswhere0.resolve_elswhere = ResolveElswhere0.resolve_elswhere, type Output0.output = Output0.output - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model - let rec cfg rescore [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 134 4 134 39] (self : borrowed (Type.creusat_decision_decisions)) (_f : Type.creusat_formula_formula) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 130 4 130 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 131 4 131 56] Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self))) < 18446744073709551615} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 130 4 130 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 132 4 132 67] UInt64.to_int (Type.creusat_decision_decisions_Decisions_timestamp ( ^ self)) = Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self))) + 1 } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 133 4 133 73] Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( ^ self))) = Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self))) } + type a = Type.alloc_alloc_global + clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_decision_node, type a = Type.alloc_alloc_global + let rec cfg rescore [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 134 4 134 39] (self : borrowed (Type.creusat_decision_decisions)) (_f : Type.creusat_formula_formula) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 130 4 130 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 131 4 131 56] Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self))) < 18446744073709551615} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 130 4 130 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 132 4 132 67] UInt64.to_int (Type.creusat_decision_decisions_Decisions_timestamp ( ^ self)) = Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self))) + 1 } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 133 4 133 73] Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( ^ self))) = Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self))) } = var _0 : (); @@ -6424,12 +6362,12 @@ module CreuSat_Decision_Impl1_Rescore BB0 { iNVALID'_3 <- (18446744073709551615 : usize); _5 <- (); - old_self_4 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 136 23 136 38] self_1); + old_self_4 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 136 23 136 38] self_1); goto BB1 } BB1 { _7 <- Type.creusat_decision_decisions_Decisions_linked_list ( * self_1); - curr_score_6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 137 29 137 51] Len0.len _7); + curr_score_6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 137 29 137 51] Len0.len _7); goto BB2 } BB2 { @@ -6438,13 +6376,13 @@ module CreuSat_Decision_Impl1_Rescore goto BB3 } BB3 { - invariant curr_ok { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 140 8 140 86] curr_9 = (18446744073709551615 : usize) || UInt64.to_int curr_9 < Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self_1))) }; - invariant proph { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 141 8 141 55] ^ old_self_4 = ^ self_1 }; - invariant unch { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 142 8 145 10] forall j : (int) . 0 <= j && j < Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self_1))) -> Type.creusat_decision_node_Node_next (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self_1))) j) = Type.creusat_decision_node_Node_next (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * old_self_4))) j) && Type.creusat_decision_node_Node_prev (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self_1))) j) = Type.creusat_decision_node_Node_prev (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * old_self_4))) j) }; - invariant inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 146 8 146 55] Invariant0.invariant' ( * self_1) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f_2)) }; + invariant curr_ok { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 140 8 140 86] curr_9 = (18446744073709551615 : usize) || UInt64.to_int curr_9 < Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self_1))) }; + invariant proph { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 141 8 141 55] ^ old_self_4 = ^ self_1 }; + invariant unch { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 142 8 145 10] forall j : (int) . 0 <= j && j < Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self_1))) -> Type.creusat_decision_node_Node_next (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self_1))) j) = Type.creusat_decision_node_Node_next (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * old_self_4))) j) && Type.creusat_decision_node_Node_prev (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self_1))) j) = Type.creusat_decision_node_Node_prev (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * old_self_4))) j) }; + invariant inv { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 146 8 146 55] Invariant0.invariant' ( * self_1) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f_2)) }; _13 <- curr_9; _14 <- iNVALID'_3; - _12 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 147 14 147 29] _13 <> _14); + _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 147 14 147 29] _13 <> _14); switch (_12) | False -> goto BB9 | _ -> goto BB4 @@ -6455,25 +6393,25 @@ module CreuSat_Decision_Impl1_Rescore _17 <- borrow_mut (Type.creusat_decision_decisions_Decisions_linked_list ( * self_1)); self_1 <- { self_1 with current = (let Type.CreuSat_Decision_Decisions a b c d = * self_1 in Type.CreuSat_Decision_Decisions ( ^ _17) b c d) }; _18 <- curr_9; - _16 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 148 12 148 34] IndexMut0.index_mut _17 _18); + _16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 148 12 148 34] IndexMut0.index_mut _17 _18); goto BB5 } BB5 { _16 <- { _16 with current = (let Type.CreuSat_Decision_Node a b c = * _16 in Type.CreuSat_Decision_Node a b _15) }; assume { Resolve0.resolve _16 }; _21 <- curr_score_6; - _20 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 149 15 149 29] _21 > (0 : usize)); + _20 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 149 15 149 29] _21 > (0 : usize)); switch (_20) | False -> goto BB7 | _ -> goto BB6 end } BB6 { - curr_score_6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 150 16 150 31] curr_score_6 - (1 : usize)); + curr_score_6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 150 16 150 31] curr_score_6 - (1 : usize)); _19 <- (); _25 <- Type.creusat_decision_decisions_Decisions_linked_list ( * self_1); _26 <- curr_9; - _24 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 154 19 154 41] Index0.index _25 _26); + _24 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 154 19 154 41] Index0.index _25 _26); goto BB8 } BB7 { @@ -6492,11 +6430,11 @@ module CreuSat_Decision_Impl1_Rescore } BB10 { _31 <- Type.creusat_decision_decisions_Decisions_linked_list ( * self_1); - _30 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 156 25 156 47] Len0.len _31); + _30 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 156 25 156 47] Len0.len _31); goto BB11 } BB11 { - self_1 <- { self_1 with current = (let Type.CreuSat_Decision_Decisions a b c d = * self_1 in Type.CreuSat_Decision_Decisions a ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 156 8 156 51] _30 + (1 : usize)) c d) }; + self_1 <- { self_1 with current = (let Type.CreuSat_Decision_Decisions a b c d = * self_1 in Type.CreuSat_Decision_Decisions a ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 156 8 156 51] _30 + (1 : usize)) c d) }; assume { Resolve1.resolve self_1 }; _0 <- (); return _0 @@ -6513,10 +6451,10 @@ module CreuSat_Decision_Impl1_MoveToFront_Interface clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_decision_node, type a = Type.alloc_alloc_global, axiom . val move_to_front [@cfg:stackify] (self : borrowed (Type.creusat_decision_decisions)) (tomove : usize) (_f : Type.creusat_formula_formula) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 160 4 160 43] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f) < 18446744073709551615} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 161 4 161 52] UInt64.to_int tomove < Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 162 4 162 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 162 4 162 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 160 4 160 43] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f) < 18446744073709551615} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 161 4 161 52] UInt64.to_int tomove < Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 162 4 162 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 162 4 162 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } end module CreuSat_Decision_Impl1_MoveToFront @@ -6526,26 +6464,27 @@ module CreuSat_Decision_Impl1_MoveToFront use seq.Seq use Type clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant0 with function Model0.model = Model0.model - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_decision_node + type a = Type.alloc_alloc_global, function Model0.model = Invariant0.model, axiom . + clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant0 clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_decision_node - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_decision_node - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.creusat_decision_node - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_decision_node - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_decision_node - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_decision_decisions + clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_decision_node, + type Output0.output = IndexMut0.output + clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.creusat_decision_node, + predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_decision_node, + predicate HasValue0.has_value = IndexMut0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_decision_node, + predicate InBounds0.in_bounds = IndexMut0.in_bounds + clone CreuSat_Decision_Impl1_Rescore_Interface as Rescore0 + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_decision_node clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.creusat_decision_node, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - predicate ResolveElswhere0.resolve_elswhere = ResolveElswhere0.resolve_elswhere, type Output0.output = Output0.output - clone CreuSat_Decision_Impl1_Rescore_Interface as Rescore0 with predicate Invariant0.invariant' = Invariant0.invariant', - function Model0.model = Model0.model - let rec cfg move_to_front [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 163 4 163 60] (self : borrowed (Type.creusat_decision_decisions)) (tomove : usize) (_f : Type.creusat_formula_formula) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 160 4 160 43] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f) < 18446744073709551615} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 161 4 161 52] UInt64.to_int tomove < Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 162 4 162 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 162 4 162 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } + type a = Type.alloc_alloc_global + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_decision_decisions + let rec cfg move_to_front [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 163 4 163 60] (self : borrowed (Type.creusat_decision_decisions)) (tomove : usize) (_f : Type.creusat_formula_formula) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 160 4 160 43] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f) < 18446744073709551615} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 161 4 161 52] UInt64.to_int tomove < Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 162 4 162 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 162 4 162 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } = var _0 : (); @@ -6604,7 +6543,7 @@ module CreuSat_Decision_Impl1_MoveToFront iNVALID'_4 <- (18446744073709551615 : usize); _7 <- tomove_2; _8 <- Type.creusat_decision_decisions_Decisions_start ( * self_1); - _6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 165 11 165 31] _7 = _8); + _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 165 11 165 31] _7 = _8); switch (_6) | False -> goto BB2 | _ -> goto BB1 @@ -6620,7 +6559,7 @@ module CreuSat_Decision_Impl1_MoveToFront _12 <- borrow_mut (Type.creusat_decision_decisions_Decisions_linked_list ( * self_1)); self_1 <- { self_1 with current = (let Type.CreuSat_Decision_Decisions a b c d = * self_1 in Type.CreuSat_Decision_Decisions ( ^ _12) b c d) }; _13 <- tomove_2; - _11 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 168 30 168 54] IndexMut0.index_mut _12 _13); + _11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 168 30 168 54] IndexMut0.index_mut _12 _13); goto BB3 } BB3 { @@ -6637,7 +6576,7 @@ module CreuSat_Decision_Impl1_MoveToFront moving_10 <- { moving_10 with current = (let Type.CreuSat_Decision_Node a b c = * moving_10 in Type.CreuSat_Decision_Node a b _18) }; assume { Resolve1.resolve moving_10 }; _21 <- Type.creusat_decision_decisions_Decisions_timestamp ( * self_1); - _20 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 174 11 174 39] _21 = (18446744073709551615 : usize)); + _20 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 174 11 174 39] _21 = (18446744073709551615 : usize)); switch (_20) | False -> goto BB6 | _ -> goto BB4 @@ -6647,7 +6586,7 @@ module CreuSat_Decision_Impl1_MoveToFront _23 <- borrow_mut ( * self_1); self_1 <- { self_1 with current = ( ^ _23) }; _24 <- _f_3; - _22 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 175 12 175 28] Rescore0.rescore _23 _24); + _22 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 175 12 175 28] Rescore0.rescore _23 _24); goto BB5 } BB5 { @@ -6655,18 +6594,18 @@ module CreuSat_Decision_Impl1_MoveToFront goto BB7 } BB6 { - self_1 <- { self_1 with current = (let Type.CreuSat_Decision_Decisions a b c d = * self_1 in Type.CreuSat_Decision_Decisions a ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 177 12 177 31] Type.creusat_decision_decisions_Decisions_timestamp ( * self_1) + (1 : usize)) c d) }; + self_1 <- { self_1 with current = (let Type.CreuSat_Decision_Decisions a b c d = * self_1 in Type.CreuSat_Decision_Decisions a ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 177 12 177 31] Type.creusat_decision_decisions_Decisions_timestamp ( * self_1) + (1 : usize)) c d) }; _19 <- (); goto BB7 } BB7 { - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 179 8 179 51] UInt64.to_int (Type.creusat_decision_decisions_Decisions_start ( * self_1)) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f_3) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 179 8 179 51] UInt64.to_int (Type.creusat_decision_decisions_Decisions_start ( * self_1)) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f_3) }; _25 <- (); _26 <- tomove_2; _28 <- borrow_mut (Type.creusat_decision_decisions_Decisions_linked_list ( * self_1)); self_1 <- { self_1 with current = (let Type.CreuSat_Decision_Decisions a b c d = * self_1 in Type.CreuSat_Decision_Decisions ( ^ _28) b c d) }; _29 <- Type.creusat_decision_decisions_Decisions_start ( * self_1); - _27 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 180 8 180 36] IndexMut0.index_mut _28 _29); + _27 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 180 8 180 36] IndexMut0.index_mut _28 _29); goto BB8 } BB8 { @@ -6676,7 +6615,7 @@ module CreuSat_Decision_Impl1_MoveToFront self_1 <- { self_1 with current = (let Type.CreuSat_Decision_Decisions a b c d = * self_1 in Type.CreuSat_Decision_Decisions a b _30 d) }; _33 <- prev_14; _34 <- iNVALID'_4; - _32 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 182 11 182 26] _33 <> _34); + _32 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 182 11 182 26] _33 <> _34); switch (_32) | False -> goto BB11 | _ -> goto BB9 @@ -6687,7 +6626,7 @@ module CreuSat_Decision_Impl1_MoveToFront _37 <- borrow_mut (Type.creusat_decision_decisions_Decisions_linked_list ( * self_1)); self_1 <- { self_1 with current = (let Type.CreuSat_Decision_Decisions a b c d = * self_1 in Type.CreuSat_Decision_Decisions ( ^ _37) b c d) }; _38 <- prev_14; - _36 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 184 12 184 34] IndexMut0.index_mut _37 _38); + _36 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 184 12 184 34] IndexMut0.index_mut _37 _38); goto BB10 } BB10 { @@ -6703,7 +6642,7 @@ module CreuSat_Decision_Impl1_MoveToFront BB12 { _40 <- old_next_15; _41 <- iNVALID'_4; - _39 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 186 11 186 30] _40 <> _41); + _39 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 186 11 186 30] _40 <> _41); switch (_39) | False -> goto BB15 | _ -> goto BB13 @@ -6715,7 +6654,7 @@ module CreuSat_Decision_Impl1_MoveToFront self_1 <- { self_1 with current = (let Type.CreuSat_Decision_Decisions a b c d = * self_1 in Type.CreuSat_Decision_Decisions ( ^ _44) b c d) }; assume { Resolve0.resolve self_1 }; _45 <- old_next_15; - _43 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 187 12 187 38] IndexMut0.index_mut _44 _45); + _43 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 187 12 187 38] IndexMut0.index_mut _44 _45); goto BB14 } BB14 { @@ -6774,19 +6713,18 @@ module CreuSat_Decision_Impl1_IncrementAndMove_Interface use mach.int.Int use prelude.Prelude use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . clone CreuSat_Logic_LogicUtil_ElemsLessThan_Interface as ElemsLessThan0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = usize, type a = Type.alloc_alloc_global, axiom . val increment_and_move [@cfg:stackify] (self : borrowed (Type.creusat_decision_decisions)) (f : Type.creusat_formula_formula) (v : Type.alloc_vec_vec usize (Type.alloc_alloc_global)) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 199 4 199 49] ElemsLessThan0.elems_less_than (Model0.model v) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 200 4 200 42] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < 18446744073709551615} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 201 4 201 30] Invariant0.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 202 4 202 51] Invariant1.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 202 4 202 51] Invariant1.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 199 4 199 49] ElemsLessThan0.elems_less_than (Model0.model v) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 200 4 200 42] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < 18446744073709551615} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 201 4 201 30] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 202 4 202 51] Invariant1.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 202 4 202 51] Invariant1.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } end module CreuSat_Decision_Impl1_IncrementAndMove @@ -6796,96 +6734,90 @@ module CreuSat_Decision_Impl1_IncrementAndMove use Type use seq.Seq use mach.int.Int32 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant3.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = Invariant3.index_logic + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model5 with function Model0.model = Model6.model - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with function Model0.model = Model5.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant2.invariant', - function Model0.model = Model5.model + type a = Type.alloc_alloc_global, function Model0.model = Model5.model, axiom . + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant2.invariant_internal + clone CreuSat_Logic_LogicClause_Impl0_Model as Model5 with function Model1.model = InvariantMirror0.model, + function Model0.model = FormulaInvariant0.model, function Model0.model = Invariant2.model + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model3 with function Model0.model = Model4.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model4.model, - predicate Invariant0.invariant' = Invariant2.invariant', function Model1.model = Model5.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model3.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . + type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, + function Model0.model = Model3.model, axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model3 with function Model0.model = Invariant0.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_decision_node, + type a = Type.alloc_alloc_global, function Model0.model = Invariant1.model, axiom . clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = (usize, usize), type a = Type.alloc_alloc_global, axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant1 with function Model0.model = Model2.model + clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . clone CreuSat_Logic_LogicUtil_ElemsLessThan as ElemsLessThan0 clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicUtil_SortedRangeTupleZeroth as SortedRangeTupleZeroth0 - clone CreuSat_Logic_LogicUtil_SortedTupleZeroth as SortedTupleZeroth0 with predicate SortedRangeTupleZeroth0.sorted_range_tuple_zeroth = SortedRangeTupleZeroth0.sorted_range_tuple_zeroth - clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve6 with type t = usize + clone CreuSat_Logic_LogicUtil_SortedRangeTupleZeroth as SortedRangeTupleZeroth0 with predicate SortedRangeTupleZeroth0.sorted_range_tuple_zeroth = SortedTupleZeroth0.sorted_range_tuple_zeroth + clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve6 with type t = usize, + predicate Resolve0.resolve = Resolve4.resolve, predicate Resolve0.resolve = Resolve5.resolve, + predicate Resolve1.resolve = Resolve5.resolve clone CreusotContracts_Logic_Resolve_Impl0_Resolve as Resolve5 with type t1 = usize, type t2 = usize, - predicate Resolve0.resolve = Resolve6.resolve, predicate Resolve1.resolve = Resolve6.resolve - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_decision_decisions - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global) + predicate Resolve0.resolve = Resolve3.resolve clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy3 with type t = (usize, usize), - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Seq_Impl2_PermutationOf as PermutationOf0 with type t = (usize, usize) - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = (usize, usize) + type a = Type.alloc_alloc_global, type ModelTy0.modelTy = Model7.modelTy + clone CreusotContracts_Logic_Seq_Impl2_PermutationOf as PermutationOf0 with type t = (usize, usize), + predicate PermutationOf0.permutation_of = Sort0.permutation_of + clone CreusotContracts_Logic_Model_Impl1_Model as Model7 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global), + function Model1.model = Sort0.model + clone CreuSat_Logic_LogicUtil_SortedTupleZeroth as SortedTupleZeroth0 with predicate SortedTupleZeroth0.sorted_tuple_zeroth = Sort0.sorted_tuple_zeroth clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy2 with type t = (usize, usize) - clone Core_Slice_Index_Impl2_Output as Output2 with type t = (usize, usize) - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = (usize, usize) - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue2 with type t = (usize, usize) - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds2 with type t = (usize, usize) + clone Core_Slice_Index_Impl2_Output as Output2 with type t = (usize, usize), type Output0.output = IndexMut0.output, + type Output0.output = Index2.output + clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = (usize, usize), + predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue2 with type t = (usize, usize), + predicate HasValue0.has_value = IndexMut0.has_value, predicate HasValue0.has_value = Index2.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds2 with type t = (usize, usize), + predicate InBounds0.in_bounds = IndexMut0.in_bounds, predicate InBounds0.in_bounds = Index2.in_bounds clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_decision_node - clone Core_Slice_Index_Impl2_Output as Output1 with type t = Type.creusat_decision_node - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = Type.creusat_decision_node - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = Type.creusat_decision_node + clone Core_Slice_Index_Impl2_Output as Output1 with type t = Type.creusat_decision_node, + type Output0.output = Index1.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = Type.creusat_decision_node, + predicate HasValue0.has_value = Index1.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = Type.creusat_decision_node, + predicate InBounds0.in_bounds = Index1.in_bounds clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = usize - clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize - clone CreusotContracts_Logic_Model_Impl1_Model as Model7 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global), - type ModelTy0.modelTy = ModelTy3.modelTy, function Model0.model = Model1.model - clone CreuSat_Util_Sort_Interface as Sort0 with function Model0.model = Model1.model, - predicate SortedTupleZeroth0.sorted_tuple_zeroth = SortedTupleZeroth0.sorted_tuple_zeroth, - function Model1.model = Model7.model, predicate PermutationOf0.permutation_of = PermutationOf0.permutation_of - clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve3 with type t = (usize, usize), - function Model0.model = Model1.model, predicate Resolve0.resolve = Resolve5.resolve + clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize, type Output0.output = Index0.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize, + predicate HasValue0.has_value = Index0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize, + predicate InBounds0.in_bounds = Index0.in_bounds + clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve4 with type t = usize + clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve3 with type t = (usize, usize) + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_decision_decisions + clone CreuSat_Decision_Impl1_MoveToFront_Interface as MoveToFront0 clone Alloc_Vec_Impl16_Index_Interface as Index2 with type t = (usize, usize), type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, - predicate InBounds0.in_bounds = InBounds2.in_bounds, predicate HasValue0.has_value = HasValue2.has_value, - type Output0.output = Output2.output - clone Alloc_Vec_Impl1_Len_Interface as Len1 with type t = (usize, usize), type a = Type.alloc_alloc_global, - function Model0.model = Model1.model + type a = Type.alloc_alloc_global + clone Alloc_Vec_Impl1_Len_Interface as Len1 with type t = (usize, usize), type a = Type.alloc_alloc_global + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global) + clone CreuSat_Util_Sort_Interface as Sort0 + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = (usize, usize) clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = (usize, usize), type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, - predicate InBounds0.in_bounds = InBounds2.in_bounds, predicate HasValue0.has_value = HasValue2.has_value, - predicate ResolveElswhere0.resolve_elswhere = ResolveElswhere0.resolve_elswhere, type Output0.output = Output2.output - clone Alloc_Vec_FromElem_Interface as FromElem0 with type t = (usize, usize), function Model0.model = Model1.model + type a = Type.alloc_alloc_global clone Alloc_Vec_Impl16_Index_Interface as Index1 with type t = Type.creusat_decision_node, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model2.model, - predicate InBounds0.in_bounds = InBounds1.in_bounds, predicate HasValue0.has_value = HasValue1.has_value, - type Output0.output = Output1.output - clone CreuSat_Decision_Impl1_MoveToFront_Interface as MoveToFront0 with function Model0.model = Model2.model, - predicate Invariant0.invariant' = Invariant1.invariant' - clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve4 with type t = usize, function Model0.model = Model0.model, - predicate Resolve0.resolve = Resolve6.resolve - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = usize, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - type Output0.output = Output0.output - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Model0.model - let rec cfg increment_and_move [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 203 4 203 68] (self : borrowed (Type.creusat_decision_decisions)) (f : Type.creusat_formula_formula) (v : Type.alloc_vec_vec usize (Type.alloc_alloc_global)) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 199 4 199 49] ElemsLessThan0.elems_less_than (Model0.model v) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 200 4 200 42] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < 18446744073709551615} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 201 4 201 30] Invariant0.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 202 4 202 51] Invariant1.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 202 4 202 51] Invariant1.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } + type a = Type.alloc_alloc_global + clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = usize, type i = usize, type a = Type.alloc_alloc_global + clone Alloc_Vec_FromElem_Interface as FromElem0 with type t = (usize, usize) + clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = usize, type a = Type.alloc_alloc_global + let rec cfg increment_and_move [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 203 4 203 68] (self : borrowed (Type.creusat_decision_decisions)) (f : Type.creusat_formula_formula) (v : Type.alloc_vec_vec usize (Type.alloc_alloc_global)) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 199 4 199 49] ElemsLessThan0.elems_less_than (Model0.model v) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 200 4 200 42] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < 18446744073709551615} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 201 4 201 30] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 202 4 202 51] Invariant1.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 202 4 202 51] Invariant1.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } = var _0 : (); @@ -6951,16 +6883,16 @@ module CreuSat_Decision_Impl1_IncrementAndMove BB1 { _5 <- ((0 : usize), (0 : usize)); _7 <- v_3; - _6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 204 70 204 77] Len0.len _7); + _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 204 70 204 77] Len0.len _7); goto BB2 } BB2 { - counts_with_index_4 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 204 57 204 78] FromElem0.from_elem _5 _6); + counts_with_index_4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 204 57 204 78] FromElem0.from_elem _5 _6); goto BB3 } BB3 { _9 <- (); - old_self_8 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 205 23 205 38] self_1); + old_self_8 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 205 23 205 38] self_1); goto BB4 } BB4 { @@ -6974,17 +6906,17 @@ module CreuSat_Decision_Impl1_IncrementAndMove goto BB7 } BB7 { - invariant unch { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 207 8 207 52] old_self_8 = self_1 }; - invariant proph { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 208 8 208 55] ^ old_self_8 = ^ self_1 }; - invariant len_same { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 209 8 209 72] Seq.length (Model0.model v_3) = Seq.length (Model1.model counts_with_index_4) }; - invariant all_less { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 210 8 211 68] forall j : (int) . 0 <= j && j < UInt64.to_int i_10 -> UInt64.to_int (let (_, a) = Seq.get (Model1.model counts_with_index_4) j in a) < Seq.length (Model2.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self_1))) }; + invariant unch { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 207 8 207 52] old_self_8 = self_1 }; + invariant proph { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 208 8 208 55] ^ old_self_8 = ^ self_1 }; + invariant len_same { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 209 8 209 72] Seq.length (Model0.model v_3) = Seq.length (Model1.model counts_with_index_4) }; + invariant all_less { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 210 8 211 68] forall j : (int) . 0 <= j && j < UInt64.to_int i_10 -> UInt64.to_int (let (_, a) = Seq.get (Model1.model counts_with_index_4) j in a) < Seq.length (Model2.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self_1))) }; _14 <- i_10; _16 <- v_3; - _15 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 212 18 212 25] Len0.len _16); + _15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 212 18 212 25] Len0.len _16); goto BB8 } BB8 { - _13 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 212 14 212 25] _14 < _15); + _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 212 14 212 25] _14 < _15); switch (_13) | False -> goto BB14 | _ -> goto BB9 @@ -6994,19 +6926,19 @@ module CreuSat_Decision_Impl1_IncrementAndMove _19 <- Type.creusat_decision_decisions_Decisions_linked_list ( * self_1); _22 <- v_3; _23 <- i_10; - _21 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 213 53 213 57] Index0.index _22 _23); + _21 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 213 53 213 57] Index0.index _22 _23); goto BB10 } BB10 { _20 <- _21; - _18 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 213 36 213 58] Index1.index _19 _20); + _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 213 36 213 58] Index1.index _19 _20); goto BB11 } BB11 { _17 <- Type.creusat_decision_node_Node_ts _18; _26 <- v_3; _27 <- i_10; - _25 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 213 63 213 67] Index0.index _26 _27); + _25 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 213 63 213 67] Index0.index _26 _27); goto BB12 } BB12 { @@ -7014,13 +6946,13 @@ module CreuSat_Decision_Impl1_IncrementAndMove _29 <- borrow_mut counts_with_index_4; counts_with_index_4 <- ^ _29; _30 <- i_10; - _28 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 213 12 213 32] IndexMut0.index_mut _29 _30); + _28 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 213 12 213 32] IndexMut0.index_mut _29 _30); goto BB13 } BB13 { _28 <- { _28 with current = (_17, _24) }; assume { Resolve0.resolve _28 }; - i_10 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 214 12 214 18] i_10 + (1 : usize)); + i_10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 214 12 214 18] i_10 + (1 : usize)); _12 <- (); goto BB7 } @@ -7030,7 +6962,7 @@ module CreuSat_Decision_Impl1_IncrementAndMove counts_with_index_4 <- ^ _36; _35 <- borrow_mut ( * _36); _36 <- { _36 with current = ( ^ _35) }; - _34 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 218 8 218 36] Sort0.sort _35); + _34 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 218 8 218 36] Sort0.sort _35); goto BB15 } BB15 { @@ -7042,16 +6974,16 @@ module CreuSat_Decision_Impl1_IncrementAndMove goto BB17 } BB17 { - invariant proph { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 222 8 222 55] ^ old_self_8 = ^ self_1 }; - invariant inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 223 8 223 54] Invariant1.invariant' ( * self_1) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_2)) }; - invariant len_same { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 224 8 224 72] Seq.length (Model0.model v_3) = Seq.length (Model1.model counts_with_index_4) }; + invariant proph { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 222 8 222 55] ^ old_self_8 = ^ self_1 }; + invariant inv { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 223 8 223 54] Invariant1.invariant' ( * self_1) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_2)) }; + invariant len_same { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 224 8 224 72] Seq.length (Model0.model v_3) = Seq.length (Model1.model counts_with_index_4) }; _38 <- i_10; _40 <- counts_with_index_4; - _39 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 225 18 225 41] Len1.len _40); + _39 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 225 18 225 41] Len1.len _40); goto BB18 } BB18 { - _37 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 225 14 225 41] _38 < _39); + _37 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 225 14 225 41] _38 < _39); switch (_37) | False -> goto BB22 | _ -> goto BB19 @@ -7062,17 +6994,17 @@ module CreuSat_Decision_Impl1_IncrementAndMove self_1 <- { self_1 with current = ( ^ _42) }; _45 <- counts_with_index_4; _46 <- i_10; - _44 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 226 31 226 51] Index2.index _45 _46); + _44 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 226 31 226 51] Index2.index _45 _46); goto BB20 } BB20 { _43 <- (let (_, a) = _44 in a); _47 <- f_2; - _41 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 226 12 226 57] MoveToFront0.move_to_front _42 _43 _47); + _41 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 226 12 226 57] MoveToFront0.move_to_front _42 _43 _47); goto BB21 } BB21 { - i_10 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 227 12 227 18] i_10 + (1 : usize)); + i_10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 227 12 227 18] i_10 + (1 : usize)); _12 <- (); goto BB17 } @@ -7102,17 +7034,15 @@ module CreuSat_Formula_Impl0 use prelude.Prelude use mach.int.UInt64 clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 + type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Model0.model + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model - clone CreuSat_Formula_Impl0_Index_Interface as Index0 with function Model0.model = Model0.model - clone CreuSat_Formula_Impl0_Output as Output0 - clone Core_Ops_Index_Index_Index_Interface as Index1 with type self = Type.creusat_formula_formula, type idx = usize, - val index = Index0.index, type Output0.output = Output0.output - clone Core_Ops_Index_Index_Output as Output1 with type self = Type.creusat_formula_formula, type idx = usize, - type output = Output0.output + function Model0.model = Index0.model + clone CreuSat_Formula_Impl0_Output as Output0 with type output = Output1.output, type Output0.output = Index1.output + clone CreuSat_Formula_Impl0_Index_Interface as Index0 with val index = Index1.index + clone Core_Ops_Index_Index_Index_Interface as Index1 with type self = Type.creusat_formula_formula, type idx = usize + clone Core_Ops_Index_Index_Output as Output1 with type self = Type.creusat_formula_formula, type idx = usize end module CreusotContracts_Std1_Clone_Clone_Clone_Interface type self @@ -7130,9 +7060,8 @@ module CreusotContracts_Std1_Clone_Clone_Clone end module CreuSat_Clause_Impl2 use Type - clone CreuSat_Clause_Impl2_Clone_Interface as Clone0 - clone CreusotContracts_Std1_Clone_Clone_Clone_Interface as Clone1 with type self = Type.creusat_clause_clause, - val clone' = Clone0.clone' + clone CreuSat_Clause_Impl2_Clone_Interface as Clone0 with val clone' = Clone1.clone' + clone CreusotContracts_Std1_Clone_Clone_Clone_Interface as Clone1 with type self = Type.creusat_clause_clause end module CreuSat_ConflictAnalysis_AnalyzeConflict_Interface use mach.int.UInt64 @@ -7141,37 +7070,35 @@ module CreuSat_ConflictAnalysis_AnalyzeConflict_Interface use seq.Seq use Type use mach.int.Int32 + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model2.modelTy + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror clone CreuSat_Logic_LogicClause_EquisatExtensionInner_Interface as EquisatExtensionInner0 - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model2 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model2 with type t = Type.creusat_formula_formula clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner_Interface as NoDuplicateIndexesInner0 clone CreuSat_Logic_LogicClause_VarsInRangeInner_Interface as VarsInRangeInner0 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant3 - clone CreuSat_Logic_LogicFormula_Impl1_NotSatisfiable_Interface as NotSatisfiable0 + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface as NotSatisfiable0 clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicClause_Impl2_Unsat_Interface as Unsat0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val analyze_conflict [@cfg:stackify] (f : Type.creusat_formula_formula) (trail : Type.creusat_trail_trail) (cref : usize) (d : borrowed (Type.creusat_decision_decisions)) : Type.creusat_conflictanalysis_conflict - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 161 0 161 26] Invariant0.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 162 0 162 38] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < 18446744073709551615} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 163 0 163 32] Invariant1.invariant' trail f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 164 0 164 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 165 0 165 57] Unsat0.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)) (Type.creusat_trail_trail_Trail_assignments trail)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 191 0 191 44] Invariant2.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 166 0 190 3] match (result) with + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 161 0 161 26] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 162 0 162 38] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < 18446744073709551615} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 163 0 163 32] Invariant1.invariant' trail f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 164 0 164 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 165 0 165 57] Unsat0.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)) (Type.creusat_trail_trail_Trail_assignments trail)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 191 0 191 44] Invariant2.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 166 0 190 3] match (result) with | Type.CreuSat_ConflictAnalysis_Conflict_Ground -> NotSatisfiable0.not_satisfiable f | Type.CreuSat_ConflictAnalysis_Conflict_Unit clause -> Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) && Seq.length (Model1.model clause) = 1 && VarsInRangeInner0.vars_in_range_inner (Model1.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) && NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model clause) && EquisatExtensionInner0.equisat_extension_inner clause (Model2.model f) | Type.CreuSat_ConflictAnalysis_Conflict_Learned s_idx clause -> Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) && Seq.length (Model1.model clause) > 1 && VarsInRangeInner0.vars_in_range_inner (Model1.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) && NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model clause) && EquisatExtensionInner0.equisat_extension_inner clause (Model2.model f) && UInt64.to_int s_idx < Seq.length (Model1.model clause) | Type.CreuSat_ConflictAnalysis_Conflict_Restart clause -> Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) && Seq.length (Model1.model clause) > 1 && VarsInRangeInner0.vars_in_range_inner (Model1.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) && NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model clause) && EquisatExtensionInner0.equisat_extension_inner clause (Model2.model f) end } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 191 0 191 44] Invariant2.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 191 0 191 44] Invariant2.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } end module CreuSat_ConflictAnalysis_AnalyzeConflict @@ -7182,229 +7109,206 @@ module CreuSat_ConflictAnalysis_AnalyzeConflict use Type use mach.int.Int32 use prelude.UInt8 - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model7 with function Model0.model = Model10.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with function Model0.model = Model7.model - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicUtil_ElemsLessThan as ElemsLessThan0 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = bool, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model7.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant4 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant4.invariant' - clone CreuSat_Logic_LogicLit_IdxInLogic as IdxInLogic0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = IdxInLogic0.index_logic, + function IndexLogic0.index_logic = SameIdxSamePolarityExcept0.index_logic, + function IndexLogic0.index_logic = Invariant4.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner1.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = SatInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SameIdxSamePolarityExcept0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner1.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, + predicate SatInner0.sat_inner = SatInner1.sat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model9.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner1 with function Model0.model = Model1.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model1.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner0.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model1.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner0 with function Model0.model = Model1.model, - predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner - clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat0 with function Model0.model = Model7.model, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicClause_Impl2_SameIdxSamePolarityExcept as SameIdxSamePolarityExcept0 with function Model0.model = Model1.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with function Model0.model = Model1.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant3.invariant', - function Model0.model = Model1.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant2 with function Model0.model = Model8.model + type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = NotSatisfiable0.model, + function Model0.model = Invariant3.model, function Model0.model = SameIdxSamePolarityExcept0.model, + function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, + function Model0.model = UnsatInner0.model, function Model1.model = UnitAreSat0.model, + function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, + function Model1.model = Invariant7.model, function Model0.model = SatInner1.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner1 with predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with function Model0.model = Model0.model, - function Model1.model = Model1.model - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant4.invariant', - predicate Invariant1.invariant' = Invariant7.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model0.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model0.model, - function Model1.model = Model1.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model0.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model6 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with function Model0.model = Model6.model, - predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner - clone CreuSat_Logic_LogicFormula_Impl1_NotSatisfiable as NotSatisfiable0 with function Model0.model = Model1.model, - predicate EquisatExtension0.equisat_extension = EquisatExtension0.equisat_extension - clone CreusotContracts_Logic_Model_Impl0_Model as Model2 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model6.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model0.model, - predicate Invariant0.invariant' = Invariant3.invariant', function Model1.model = Model1.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model6.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . + type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, + function Model0.model = Model6.model, function Model3.model = InvariantNoDecisionMirror0.model, + function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant6.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner1 with predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner, + predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant', + predicate Invariant0.invariant' = Invariant6.invariant' + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss0.formula_sat_inner + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model7.model, axiom . + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model7 with function Model0.model = Unsat0.model, + function Model2.model = InvariantNoDecision0.model, function Model0.model = InvariantNoDecisionMirror0.model, + function Model0.model = Invariant5.model, function Model1.model = TrailEntriesAreAssigned0.model, + function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model5.model, - function Model1.model = Model7.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model5.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model5.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model4.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model7.model, - function Model1.model = Model5.model, predicate Invariant0.invariant' = Invariant6.invariant', - function Model2.model = Model4.model, function Model3.model = Model0.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant5.invariant', function Model0.model = Model5.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model4.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model7.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model4.model, function Model1.model = Model5.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model2.modelTy + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal + clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtension0.equisat_extension_inner + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model6 with function Model0.model = Invariant0.model, + function Model0.model = Model2.model, function Model0.model = EquisatExtension0.model + clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with predicate EquisatExtension0.equisat_extension = NotSatisfiable0.equisat_extension + clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_decision_node, + type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . + clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicClause_Impl2_SameIdxSamePolarityExcept as SameIdxSamePolarityExcept0 + clone CreuSat_Logic_LogicLit_IdxInLogic as IdxInLogic0 + clone CreuSat_Logic_LogicUtil_ElemsLessThan as ElemsLessThan0 + clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = bool, type a = Type.alloc_alloc_global, axiom . + clone CreusotContracts_Logic_Model_Impl0_Model as Model2 with type t = Type.creusat_formula_formula + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable as NotSatisfiable0 + clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant2 + clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat0 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . use mach.int.Int64 - clone CreusotContracts_Logic_Int_Impl18_Model as Model17 + clone CreusotContracts_Logic_Int_Impl18_Model as Model17 with function Model0.model = Model12.model + clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy7 with type t = usize, type a = Type.alloc_alloc_global, + type ModelTy0.modelTy = Model16.modelTy + clone CreuSat_Logic_LogicClause_Impl2_ClauseIsSeen as ClauseIsSeen0 with predicate ClauseIsSeen0.clause_is_seen = Resolve5.clause_is_seen + clone CreusotContracts_Logic_Model_Impl1_Model as Model16 with type t = Type.alloc_vec_vec usize (Type.alloc_alloc_global), + function Model5.model = Resolve5.model + clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy5 with type t = bool, type a = Type.alloc_alloc_global, + type ModelTy0.modelTy = Model13.modelTy, type ModelTy0.modelTy = Model15.modelTy + clone CreusotContracts_Logic_Model_Impl1_Model as Model15 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global), + function Model4.model = Resolve5.model + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model11.modelTy, + type ModelTy0.modelTy = Model14.modelTy + clone CreusotContracts_Logic_Model_Impl1_Model as Model14 with type t = Type.creusat_clause_clause, + function Model0.model = Resolve5.model + clone CreuSat_Logic_LogicClause_Impl2_InFormula as InFormula0 with predicate InFormula0.in_formula = Resolve5.in_formula + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy6 with type t = Type.creusat_trail_step + clone Core_Slice_Index_Impl2_Output as Output2 with type t = Type.creusat_trail_step, + type Output0.output = Index4.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue2 with type t = Type.creusat_trail_step, + predicate HasValue0.has_value = Index4.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds2 with type t = Type.creusat_trail_step, + predicate InBounds0.in_bounds = Index4.in_bounds + clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve10 with type t = bool, + predicate Resolve0.resolve = Resolve4.resolve + clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve9 with type t = usize, + predicate Resolve0.resolve = Resolve3.resolve + clone CreusotContracts_Logic_Int_Impl18_ModelTy as ModelTy4 with type ModelTy0.modelTy = Model12.modelTy + clone CreuSat_Logic_LogicLit_Impl1_IsOpp as IsOpp0 with predicate IsOpp0.is_opp = ChooseLiteral0.is_opp, + predicate IsOpp0.is_opp = Resolve5.is_opp + clone CreusotContracts_Logic_Model_Impl0_Model as Model13 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global), + function Model2.model = ChooseLiteral0.model + clone CreusotContracts_Logic_Model_Impl1_Model as Model12 with type t = usize, + function Model0.model = ChooseLiteral0.model, function Model3.model = Resolve5.model + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy3 with type t = usize + clone Core_Slice_Index_Impl2_Output as Output1 with type t = usize, type Output0.output = Index3.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = usize, + predicate HasValue0.has_value = Index3.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = usize, + predicate InBounds0.in_bounds = Index3.in_bounds + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy2 with type t = bool + clone Core_Slice_Index_Impl2_Output as Output0 with type t = bool, type Output0.output = IndexMut0.output + clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = bool, + predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = bool, + predicate HasValue0.has_value = IndexMut0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = bool, + predicate InBounds0.in_bounds = IndexMut0.in_bounds + clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_clause_clause, + function Model0.model = Len1.model, function Model0.model = Index1.model, + function Model3.model = ChooseLiteral0.model, function Model1.model = Resolve5.model + clone CreuSat_Decision_Impl1_IncrementAndMove_Interface as IncrementAndMove0 clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve8 with type t = Type.alloc_vec_vec usize (Type.alloc_alloc_global) clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve7 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global) clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve6 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy7 with type t = usize, type a = Type.alloc_alloc_global - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy6 with type t = Type.creusat_trail_step - clone Core_Slice_Index_Impl2_Output as Output2 with type t = Type.creusat_trail_step - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue2 with type t = Type.creusat_trail_step - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds2 with type t = Type.creusat_trail_step - clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve10 with type t = bool - clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve9 with type t = usize + clone CreuSat_ConflictAnalysis_Resolve_Interface as Resolve5 + clone Alloc_Vec_Impl16_Index_Interface as Index4 with type t = Type.creusat_trail_step, type i = usize, + type a = Type.alloc_alloc_global + clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve4 with type t = bool + clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve3 with type t = usize clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_decision_decisions clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = usize - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy5 with type t = bool, type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Int_Impl18_ModelTy as ModelTy4 - clone CreusotContracts_Logic_Model_Impl1_Model as Model12 with type t = usize, - type ModelTy0.modelTy = ModelTy4.modelTy, function Model0.model = Model17.model - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy3 with type t = usize - clone Core_Slice_Index_Impl2_Output as Output1 with type t = usize - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = usize - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = usize + clone CreuSat_ConflictAnalysis_ChooseLiteral_Interface as ChooseLiteral0 + clone Alloc_Vec_Impl16_Index_Interface as Index3 with type t = usize, type i = usize, type a = Type.alloc_alloc_global + clone Alloc_Vec_Impl1_Push_Interface as Push0 with type t = usize, type a = Type.alloc_alloc_global clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = bool - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy2 with type t = bool - clone Core_Slice_Index_Impl2_Output as Output0 with type t = bool - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = bool - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = bool - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = bool - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 - clone CreuSat_Clause_Impl2_Clone_Interface as Clone0 - clone CreusotContracts_Logic_Model_Impl1_Model as Model15 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global), - type ModelTy0.modelTy = ModelTy5.modelTy, function Model0.model = Model3.model - clone CreusotContracts_Logic_Model_Impl0_Model as Model13 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global), - type ModelTy0.modelTy = ModelTy5.modelTy, function Model0.model = Model3.model - clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve4 with type t = bool, function Model0.model = Model3.model, - predicate Resolve0.resolve = Resolve10.resolve clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = bool, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model3.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - predicate ResolveElswhere0.resolve_elswhere = ResolveElswhere0.resolve_elswhere, type Output0.output = Output0.output - clone Alloc_Vec_FromElem_Interface as FromElem0 with type t = bool, function Model0.model = Model3.model - clone CreuSat_Logic_LogicLit_Impl1_IsOpp as IsOpp0 with function IndexLogic0.index_logic = IndexLogic0.index_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic - clone CreuSat_Lit_Impl1_Index_Interface as Index2 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_Impl2_ClauseIsSeen as ClauseIsSeen0 with function Model0.model = Model3.model, - function Model1.model = Model1.model, predicate IdxInLogic0.idx_in_logic = IdxInLogic0.idx_in_logic - clone CreusotContracts_Logic_Model_Impl1_Model as Model14 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model1.model - clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model1.model - clone CreuSat_Clause_Impl0_Index_Interface as Index1 with function Model0.model = Model11.model - clone CreuSat_Clause_Impl3_Len_Interface as Len1 with function Model0.model = Model11.model - clone CreuSat_Logic_LogicClause_Impl2_InFormula as InFormula0 with function Model0.model = Model0.model - clone CreuSat_Formula_Impl0_Index_Interface as Index0 with function Model0.model = Model2.model - clone Alloc_Vec_Impl16_Index_Interface as Index4 with type t = Type.creusat_trail_step, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model5.model, - predicate InBounds0.in_bounds = InBounds2.in_bounds, predicate HasValue0.has_value = HasValue2.has_value, - type Output0.output = Output2.output - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, - function Model0.model = Model5.model - clone CreusotContracts_Logic_Model_Impl1_Model as Model16 with type t = Type.alloc_vec_vec usize (Type.alloc_alloc_global), - type ModelTy0.modelTy = ModelTy7.modelTy, function Model0.model = Model4.model - clone CreuSat_Decision_Impl1_IncrementAndMove_Interface as IncrementAndMove0 with function Model0.model = Model4.model, - predicate ElemsLessThan0.elems_less_than = ElemsLessThan0.elems_less_than, - predicate Invariant0.invariant' = Invariant0.invariant', predicate Invariant1.invariant' = Invariant2.invariant', - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve3 with type t = usize, function Model0.model = Model4.model, - predicate Resolve0.resolve = Resolve9.resolve - clone Alloc_Vec_Impl16_Index_Interface as Index3 with type t = usize, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model4.model, - predicate InBounds0.in_bounds = InBounds1.in_bounds, predicate HasValue0.has_value = HasValue1.has_value, - type Output0.output = Output1.output - clone Alloc_Vec_Impl1_Push_Interface as Push0 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Model4.model - clone Alloc_Vec_Impl0_New_Interface as New0 with type t = usize, function Model0.model = Model4.model - clone CreuSat_Trail_Impl0_DecisionLevel_Interface as DecisionLevel0 with function Model0.model = Model4.model - clone CreuSat_ConflictAnalysis_Resolve_Interface as Resolve5 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant1.invariant', predicate InFormula0.in_formula = InFormula0.in_formula, - function Model0.model = Model14.model, function IndexLogic0.index_logic = IndexLogic0.index_logic, - function Model1.model = Model11.model, predicate IsOpp0.is_opp = IsOpp0.is_opp, - predicate SameIdxSamePolarityExcept0.same_idx_same_polarity_except = SameIdxSamePolarityExcept0.same_idx_same_polarity_except, - function Model2.model = Model7.model, predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner, - predicate SatInner0.sat_inner = SatInner0.sat_inner, function Model3.model = Model12.model, - function Model4.model = Model15.model, function Model5.model = Model16.model, - predicate ElemsLessThan0.elems_less_than = ElemsLessThan0.elems_less_than, function Model6.model = Model2.model, - predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner, - predicate ClauseIsSeen0.clause_is_seen = ClauseIsSeen0.clause_is_seen, predicate Unsat0.unsat = Unsat0.unsat, - predicate Invariant2.invariant' = Invariant3.invariant', function Model7.model = Model1.model, - function Model8.model = Model3.model, function Model9.model = Model4.model, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_ConflictAnalysis_ChooseLiteral_Interface as ChooseLiteral0 with predicate Invariant0.invariant' = Invariant1.invariant', - predicate Unsat0.unsat = Unsat0.unsat, function Model0.model = Model12.model, function Model1.model = Model5.model, - function Model2.model = Model13.model, function Model3.model = Model11.model, predicate IsOpp0.is_opp = IsOpp0.is_opp, - function IndexLogic0.index_logic = IndexLogic0.index_logic - let rec cfg analyze_conflict [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 192 0 192 95] (f : Type.creusat_formula_formula) (trail : Type.creusat_trail_trail) (cref : usize) (d : borrowed (Type.creusat_decision_decisions)) : Type.creusat_conflictanalysis_conflict - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 161 0 161 26] Invariant0.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 162 0 162 38] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < 18446744073709551615} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 163 0 163 32] Invariant1.invariant' trail f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 164 0 164 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 165 0 165 57] Unsat0.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)) (Type.creusat_trail_trail_Trail_assignments trail)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 191 0 191 44] Invariant2.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 166 0 190 3] match (result) with + type a = Type.alloc_alloc_global + clone CreuSat_Lit_Impl1_Index_Interface as Index2 + clone CreuSat_Clause_Impl0_Index_Interface as Index1 + clone CreuSat_Clause_Impl3_Len_Interface as Len1 + clone CreuSat_Clause_Impl2_Clone_Interface as Clone0 + clone CreuSat_Formula_Impl0_Index_Interface as Index0 + clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global + clone Alloc_Vec_FromElem_Interface as FromElem0 with type t = bool + clone Alloc_Vec_Impl0_New_Interface as New0 with type t = usize + clone CreuSat_Trail_Impl0_DecisionLevel_Interface as DecisionLevel0 + let rec cfg analyze_conflict [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 192 0 192 95] (f : Type.creusat_formula_formula) (trail : Type.creusat_trail_trail) (cref : usize) (d : borrowed (Type.creusat_decision_decisions)) : Type.creusat_conflictanalysis_conflict + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 161 0 161 26] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 162 0 162 38] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < 18446744073709551615} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 163 0 163 32] Invariant1.invariant' trail f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 164 0 164 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 165 0 165 57] Unsat0.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)) (Type.creusat_trail_trail_Trail_assignments trail)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 191 0 191 44] Invariant2.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 166 0 190 3] match (result) with | Type.CreuSat_ConflictAnalysis_Conflict_Ground -> NotSatisfiable0.not_satisfiable f | Type.CreuSat_ConflictAnalysis_Conflict_Unit clause -> Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) && Seq.length (Model1.model clause) = 1 && VarsInRangeInner0.vars_in_range_inner (Model1.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) && NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model clause) && EquisatExtensionInner0.equisat_extension_inner clause (Model2.model f) | Type.CreuSat_ConflictAnalysis_Conflict_Learned s_idx clause -> Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) && Seq.length (Model1.model clause) > 1 && VarsInRangeInner0.vars_in_range_inner (Model1.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) && NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model clause) && EquisatExtensionInner0.equisat_extension_inner clause (Model2.model f) && UInt64.to_int s_idx < Seq.length (Model1.model clause) | Type.CreuSat_ConflictAnalysis_Conflict_Restart clause -> Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) && Seq.length (Model1.model clause) > 1 && VarsInRangeInner0.vars_in_range_inner (Model1.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) && NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model clause) && EquisatExtensionInner0.equisat_extension_inner clause (Model2.model f) end } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 191 0 191 44] Invariant2.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 191 0 191 44] Invariant2.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } = var _0 : Type.creusat_conflictanalysis_conflict; @@ -7572,16 +7476,16 @@ module CreuSat_ConflictAnalysis_AnalyzeConflict } BB0 { _6 <- trail_2; - decisionlevel_5 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 193 24 193 46] DecisionLevel0.decision_level _6); + decisionlevel_5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 193 24 193 46] DecisionLevel0.decision_level _6); goto BB1 } BB1 { - to_bump_7 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 194 22 194 32] New0.new ()); + to_bump_7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 194 22 194 32] New0.new ()); goto BB2 } BB2 { _10 <- decisionlevel_5; - _9 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 195 24 195 42] _10 = (0 : usize)); + _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 195 24 195 42] _10 = (0 : usize)); switch (_9) | False -> goto BB4 | _ -> goto BB3 @@ -7598,23 +7502,23 @@ module CreuSat_ConflictAnalysis_AnalyzeConflict BB5 { path_c_11 <- (0 : usize); _13 <- Type.creusat_formula_formula_Formula_num_vars f_1; - seen_12 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 197 19 197 42] FromElem0.from_elem false _13); + seen_12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 197 19 197 42] FromElem0.from_elem false _13); goto BB6 } BB6 { _15 <- Type.creusat_trail_trail_Trail_trail trail_2; - i_14 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 198 16 198 33] Len0.len _15); + i_14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 198 16 198 33] Len0.len _15); goto BB7 } BB7 { _19 <- f_1; _20 <- cref_3; - _18 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 199 17 199 24] Index0.index _19 _20); + _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 199 17 199 24] Index0.index _19 _20); goto BB8 } BB8 { _17 <- _18; - clause_16 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 199 17 199 32] Clone0.clone' _17); + clause_16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 199 17 199 32] Clone0.clone' _17); goto BB9 } BB9 { @@ -7634,18 +7538,18 @@ module CreuSat_ConflictAnalysis_AnalyzeConflict goto BB14 } BB14 { - invariant seen_is_clause { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 201 4 202 98] forall idx : (int) . 0 <= idx && idx < Seq.length (Model3.model seen_12) -> Seq.get (Model3.model seen_12) idx = (exists i : (int) . 0 <= i && i < UInt64.to_int j_21 && IndexLogic0.index_logic (Seq.get (Model1.model clause_16) i) = idx) }; - invariant seen_len { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 203 4 203 56] Seq.length (Model3.model seen_12) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; - invariant path_c_less { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 204 4 204 44] UInt64.to_int path_c_11 <= UInt64.to_int j_21 }; - invariant j_is_len { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 205 4 205 49] UInt64.to_int j_21 <= Seq.length (Model1.model clause_16) }; - invariant elems_less { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 206 4 206 68] ElemsLessThan0.elems_less_than (Model4.model to_bump_7) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1)) }; + invariant seen_is_clause { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 201 4 202 98] forall idx : (int) . 0 <= idx && idx < Seq.length (Model3.model seen_12) -> Seq.get (Model3.model seen_12) idx = (exists i : (int) . 0 <= i && i < UInt64.to_int j_21 && IndexLogic0.index_logic (Seq.get (Model1.model clause_16) i) = idx) }; + invariant seen_len { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 203 4 203 56] Seq.length (Model3.model seen_12) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; + invariant path_c_less { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 204 4 204 44] UInt64.to_int path_c_11 <= UInt64.to_int j_21 }; + invariant j_is_len { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 205 4 205 49] UInt64.to_int j_21 <= Seq.length (Model1.model clause_16) }; + invariant elems_less { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 206 4 206 68] ElemsLessThan0.elems_less_than (Model4.model to_bump_7) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1)) }; _25 <- j_21; _27 <- clause_16; - _26 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 207 14 207 26] Len1.len _27); + _26 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 207 14 207 26] Len1.len _27); goto BB15 } BB15 { - _24 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 207 10 207 26] _25 < _26); + _24 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 207 10 207 26] _25 < _26); switch (_24) | False -> goto BB29 | _ -> goto BB16 @@ -7656,16 +7560,16 @@ module CreuSat_ConflictAnalysis_AnalyzeConflict seen_12 <- ^ _29; _33 <- clause_16; _34 <- j_21; - _32 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 208 13 208 22] Index1.index _33 _34); + _32 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 208 13 208 22] Index1.index _33 _34); goto BB17 } BB17 { _31 <- _32; - _30 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 208 13 208 30] Index2.index _31); + _30 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 208 13 208 30] Index2.index _31); goto BB18 } BB18 { - _28 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 208 8 208 31] IndexMut0.index_mut _29 _30); + _28 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 208 8 208 31] IndexMut0.index_mut _29 _30); goto BB19 } BB19 { @@ -7675,45 +7579,45 @@ module CreuSat_ConflictAnalysis_AnalyzeConflict to_bump_7 <- ^ _36; _40 <- clause_16; _41 <- j_21; - _39 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 209 21 209 30] Index1.index _40 _41); + _39 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 209 21 209 30] Index1.index _40 _41); goto BB20 } BB20 { _38 <- _39; - _37 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 209 21 209 38] Index2.index _38); + _37 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 209 21 209 38] Index2.index _38); goto BB21 } BB21 { - _35 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 209 8 209 39] Push0.push _36 _37); + _35 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 209 8 209 39] Push0.push _36 _37); goto BB22 } BB22 { _46 <- Type.creusat_trail_trail_Trail_lit_to_level trail_2; _50 <- clause_16; _51 <- j_21; - _49 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 210 30 210 39] Index1.index _50 _51); + _49 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 210 30 210 39] Index1.index _50 _51); goto BB23 } BB23 { _48 <- _49; - _47 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 210 30 210 47] Index2.index _48); + _47 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 210 30 210 47] Index2.index _48); goto BB24 } BB24 { - _45 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 210 11 210 48] Index3.index _46 _47); + _45 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 210 11 210 48] Index3.index _46 _47); goto BB25 } BB25 { _44 <- _45; _52 <- decisionlevel_5; - _43 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 210 11 210 65] _44 >= _52); + _43 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 210 11 210 65] _44 >= _52); switch (_43) | False -> goto BB27 | _ -> goto BB26 end } BB26 { - path_c_11 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 211 12 211 23] path_c_11 + (1 : usize)); + path_c_11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 211 12 211 23] path_c_11 + (1 : usize)); _42 <- (); goto BB28 } @@ -7722,7 +7626,7 @@ module CreuSat_ConflictAnalysis_AnalyzeConflict goto BB28 } BB28 { - j_21 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 213 8 213 14] j_21 + (1 : usize)); + j_21 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 213 8 213 14] j_21 + (1 : usize)); _23 <- (); goto BB14 } @@ -7753,17 +7657,17 @@ module CreuSat_ConflictAnalysis_AnalyzeConflict goto BB37 } BB37 { - invariant seen_len { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 216 4 216 56] Seq.length (Model3.model seen_12) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; - invariant seen_is_clause { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 217 4 218 54] forall idx : (int) . 0 <= idx && idx < Seq.length (Model3.model seen_12) -> Seq.get (Model3.model seen_12) idx = IdxInLogic0.idx_in_logic idx (Model1.model clause_56) }; - invariant clause_vars { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 219 4 219 60] Invariant3.invariant' clause_56 (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1)) }; - invariant clause_equi { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 220 4 220 66] EquisatExtensionInner0.equisat_extension_inner clause_56 (Model2.model f_1) }; - invariant clause_unsat { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 221 4 221 63] Unsat0.unsat clause_56 (Type.creusat_trail_trail_Trail_assignments trail_2) }; - invariant i_bound { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 222 4 222 64] 0 <= UInt64.to_int i_14 && UInt64.to_int i_14 <= Seq.length (Model5.model (Type.creusat_trail_trail_Trail_trail trail_2)) }; - invariant path_c_less { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 223 4 223 57] UInt64.to_int path_c_11 <= Seq.length (Model1.model clause_56) }; - invariant elems_less { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 224 4 224 68] ElemsLessThan0.elems_less_than (Model4.model to_bump_7) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1)) }; + invariant seen_len { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 216 4 216 56] Seq.length (Model3.model seen_12) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; + invariant seen_is_clause { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 217 4 218 54] forall idx : (int) . 0 <= idx && idx < Seq.length (Model3.model seen_12) -> Seq.get (Model3.model seen_12) idx = IdxInLogic0.idx_in_logic idx (Model1.model clause_56) }; + invariant clause_vars { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 219 4 219 60] Invariant3.invariant' clause_56 (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1)) }; + invariant clause_equi { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 220 4 220 66] EquisatExtensionInner0.equisat_extension_inner clause_56 (Model2.model f_1) }; + invariant clause_unsat { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 221 4 221 63] Unsat0.unsat clause_56 (Type.creusat_trail_trail_Trail_assignments trail_2) }; + invariant i_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 222 4 222 64] 0 <= UInt64.to_int i_14 && UInt64.to_int i_14 <= Seq.length (Model5.model (Type.creusat_trail_trail_Trail_trail trail_2)) }; + invariant path_c_less { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 223 4 223 57] UInt64.to_int path_c_11 <= Seq.length (Model1.model clause_56) }; + invariant elems_less { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 224 4 224 68] ElemsLessThan0.elems_less_than (Model4.model to_bump_7) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1)) }; _59 <- path_c_11; _60 <- break_cond_8; - _58 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 225 10 225 29] _59 > _60); + _58 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 225 10 225 29] _59 > _60); switch (_58) | False -> goto BB54 | _ -> goto BB38 @@ -7780,7 +7684,7 @@ module CreuSat_ConflictAnalysis_AnalyzeConflict _68 <- f_1; _70 <- seen_12; _69 <- _70; - _62 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 226 26 226 74] ChooseLiteral0.choose_literal _63 _65 _66 _68 _69); + _62 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 226 26 226 74] ChooseLiteral0.choose_literal _63 _65 _66 _68 _69); goto BB39 } BB39 { @@ -7805,7 +7709,7 @@ module CreuSat_ConflictAnalysis_AnalyzeConflict c_idx_61 <- c_idx_72; _77 <- Type.creusat_trail_trail_Trail_trail trail_2; _78 <- i_14; - _76 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 230 26 230 40] Index4.index _77 _78); + _76 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 230 26 230 40] Index4.index _77 _78); goto BB43 } BB43 { @@ -7824,7 +7728,7 @@ module CreuSat_ConflictAnalysis_AnalyzeConflict c_80 <- Type.creusat_trail_reason_Long_0 _75; _82 <- f_1; _83 <- c_80; - _81 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 231 32 231 37] Index0.index _82 _83); + _81 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 231 32 231 37] Index0.index _82 _83); goto BB46 } BB46 { @@ -7835,7 +7739,7 @@ module CreuSat_ConflictAnalysis_AnalyzeConflict c_84 <- Type.creusat_trail_reason_Unit_0 _75; _87 <- f_1; _88 <- c_84; - _86 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 232 32 232 37] Index0.index _87 _88); + _86 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 232 32 232 37] Index0.index _87 _88); goto BB48 } BB48 { @@ -7846,16 +7750,16 @@ module CreuSat_ConflictAnalysis_AnalyzeConflict BB49 { _93 <- Type.creusat_trail_trail_Trail_trail trail_2; _94 <- i_14; - _92 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 235 18 235 32] Index4.index _93 _94); + _92 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 235 18 235 32] Index4.index _93 _94); goto BB50 } BB50 { _91 <- Type.creusat_trail_step_Step_lit _92; - idx_90 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 235 18 235 44] Index2.index _91); + idx_90 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 235 18 235 44] Index2.index _91); goto BB51 } BB51 { - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 236 8 236 72] SameIdxSamePolarityExcept0.same_idx_same_polarity_except clause_56 ante_74 (UInt64.to_int idx_90) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 236 8 236 72] SameIdxSamePolarityExcept0.same_idx_same_polarity_except clause_56 ante_74 (UInt64.to_int idx_90) }; goto BB52 } BB52 { @@ -7882,7 +7786,7 @@ module CreuSat_ConflictAnalysis_AnalyzeConflict to_bump_7 <- ^ _110; _109 <- borrow_mut ( * _110); _110 <- { _110 with current = ( ^ _109) }; - _96 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 237 8 237 95] Resolve5.resolve _97 _98 _100 _101 _102 _103 _105 _107 _109); + _96 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 237 8 237 95] Resolve5.resolve _97 _98 _100 _101 _102 _103 _105 _107 _109); goto BB53 } BB53 { @@ -7906,17 +7810,17 @@ module CreuSat_ConflictAnalysis_AnalyzeConflict _116 <- f_1; assume { Resolve3.resolve _117 }; _117 <- to_bump_7; - _114 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 240 4 240 36] IncrementAndMove0.increment_and_move _115 _116 _117); + _114 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 240 4 240 36] IncrementAndMove0.increment_and_move _115 _116 _117); goto BB57 } BB57 { assume { Resolve2.resolve d_4 }; _120 <- clause_56; - _119 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 241 7 241 19] Len1.len _120); + _119 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 241 7 241 19] Len1.len _120); goto BB58 } BB58 { - _118 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 241 7 241 24] _119 = (0 : usize)); + _118 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 241 7 241 24] _119 = (0 : usize)); switch (_118) | False -> goto BB60 | _ -> goto BB59 @@ -7928,11 +7832,11 @@ module CreuSat_ConflictAnalysis_AnalyzeConflict } BB60 { _123 <- clause_56; - _122 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 243 14 243 26] Len1.len _123); + _122 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 243 14 243 26] Len1.len _123); goto BB61 } BB61 { - _121 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 243 14 243 31] _122 = (1 : usize)); + _121 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 243 14 243 31] _122 = (1 : usize)); switch (_121) | False -> goto BB64 | _ -> goto BB62 @@ -7949,7 +7853,7 @@ module CreuSat_ConflictAnalysis_AnalyzeConflict BB64 { _127 <- path_c_11; _128 <- break_cond_8; - _126 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 247 11 247 30] _127 > _128); + _126 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 247 11 247 30] _127 > _128); switch (_126) | False -> goto BB67 | _ -> goto BB65 @@ -7976,15 +7880,15 @@ module CreuSat_ConflictAnalysis_AnalyzeConflict goto BB70 } BB70 { - invariant k_bound { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 252 8 252 52] UInt64.to_int k_131 <= Seq.length (Model1.model clause_56) }; - invariant s_idx_ok { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 253 8 253 56] UInt64.to_int s_idx_132 < Seq.length (Model1.model clause_56) }; + invariant k_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 252 8 252 52] UInt64.to_int k_131 <= Seq.length (Model1.model clause_56) }; + invariant s_idx_ok { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 253 8 253 56] UInt64.to_int s_idx_132 < Seq.length (Model1.model clause_56) }; _135 <- k_131; _137 <- clause_56; - _136 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 254 18 254 30] Len1.len _137); + _136 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 254 18 254 30] Len1.len _137); goto BB71 } BB71 { - _134 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 254 14 254 30] _135 < _136); + _134 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 254 14 254 30] _135 < _136); switch (_134) | False -> goto BB78 | _ -> goto BB72 @@ -7994,22 +7898,22 @@ module CreuSat_ConflictAnalysis_AnalyzeConflict _142 <- Type.creusat_trail_trail_Trail_lit_to_level trail_2; _146 <- clause_56; _147 <- k_131; - _145 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 255 34 255 43] Index1.index _146 _147); + _145 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 255 34 255 43] Index1.index _146 _147); goto BB73 } BB73 { _144 <- _145; - _143 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 255 34 255 51] Index2.index _144); + _143 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 255 34 255 51] Index2.index _144); goto BB74 } BB74 { - _141 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 255 15 255 52] Index3.index _142 _143); + _141 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 255 15 255 52] Index3.index _142 _143); goto BB75 } BB75 { _140 <- _141; _148 <- decisionlevel_5; - _139 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 255 15 255 69] _140 = _148); + _139 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 255 15 255 69] _140 = _148); switch (_139) | False -> goto BB77 | _ -> goto BB76 @@ -8023,7 +7927,7 @@ module CreuSat_ConflictAnalysis_AnalyzeConflict } BB77 { _138 <- (); - k_131 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 259 12 259 18] k_131 + (1 : usize)); + k_131 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 259 12 259 18] k_131 + (1 : usize)); _23 <- (); goto BB70 } @@ -8083,20 +7987,19 @@ module CreuSat_ConflictAnalysis_ResolveEmptyClause_Interface use mach.int.Int use prelude.Prelude use Type - clone CreuSat_Logic_LogicFormula_Impl1_NotSatisfiable_Interface as NotSatisfiable0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface as NotSatisfiable0 clone CreuSat_Logic_LogicClause_Impl2_Unsat_Interface as Unsat0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val resolve_empty_clause [@cfg:stackify] (f : Type.creusat_formula_formula) (trail : Type.creusat_trail_trail) (cref : usize) : bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 266 0 266 26] Invariant0.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 267 0 267 32] Invariant1.invariant' trail f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 268 0 268 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 269 0 269 57] Unsat0.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)) (Type.creusat_trail_trail_Trail_assignments trail)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 270 0 270 42] result -> NotSatisfiable0.not_satisfiable f } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 266 0 266 26] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 267 0 267 32] Invariant1.invariant' trail f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 268 0 268 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 269 0 269 57] Unsat0.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)) (Type.creusat_trail_trail_Trail_assignments trail)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 270 0 270 42] result -> NotSatisfiable0.not_satisfiable f } end module CreuSat_ConflictAnalysis_ResolveEmptyClause @@ -8107,203 +8010,184 @@ module CreuSat_ConflictAnalysis_ResolveEmptyClause use Type use mach.int.Int32 use prelude.UInt8 - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model6 with function Model0.model = Model8.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant3 with function Model0.model = Model6.model - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model6.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant5 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_IdxInLogic as IdxInLogic0 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = IdxInLogic0.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner1.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = Invariant5.index_logic, function IndexLogic0.index_logic = SatInner0.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = UnsatInner1.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, + predicate SatInner0.sat_inner = SatInner1.sat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model2 with function Model0.model = Model7.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner1 with function Model0.model = Model2.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model2.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner0.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model2.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with function Model0.model = Model2.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant2.invariant', - function Model0.model = Model2.model - clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner0 with function Model0.model = Model2.model, - predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner - clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat0 with function Model0.model = Model6.model, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = bool, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl2_ClauseIsSeen as ClauseIsSeen0 with function Model0.model = Model1.model, - function Model1.model = Model2.model, predicate IdxInLogic0.idx_in_logic = IdxInLogic0.idx_in_logic + type a = Type.alloc_alloc_global, function Model0.model = Model2.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model2 with function Model0.model = NotSatisfiable0.model, + function Model1.model = ClauseIsSeen0.model, function Model1.model = InvariantMirror0.model, + function Model0.model = FormulaInvariant0.model, function Model0.model = UnsatInner0.model, + function Model0.model = Invariant2.model, function Model1.model = UnitAreSat0.model, + function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, + function Model1.model = Invariant6.model, function Model0.model = SatInner1.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner1 with predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss0.formula_sat_inner + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = Invariant4.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant6 with function Model0.model = Model0.model, - function Model1.model = Model2.model - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = Invariant5.invariant', - predicate Invariant1.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant4.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model0.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model0.model, - function Model1.model = Model2.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model0.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model3 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with function Model0.model = Model3.model, - predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner - clone CreuSat_Logic_LogicFormula_Impl1_NotSatisfiable as NotSatisfiable0 with function Model0.model = Model2.model, - predicate EquisatExtension0.equisat_extension = EquisatExtension0.equisat_extension - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model0.model, - predicate Invariant0.invariant' = Invariant2.invariant', function Model1.model = Model2.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model3.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . + type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, + function Model0.model = Model3.model, function Model3.model = InvariantNoDecisionMirror0.model, + function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant6.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant6 with predicate Invariant1.invariant' = Invariant4.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner1 with predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner, + predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant2.invariant_internal + clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtension0.equisat_extension_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model6.model, axiom . + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model6 with function Model0.model = Unsat0.model, + function Model2.model = InvariantNoDecision0.model, function Model0.model = InvariantNoDecisionMirror0.model, + function Model0.model = Invariant3.model, function Model1.model = TrailEntriesAreAssigned0.model, + function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model5.model, - function Model1.model = Model6.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model5.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model5.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model4.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model6.model, - function Model1.model = Model5.model, predicate Invariant0.invariant' = Invariant4.invariant', - function Model2.model = Model4.model, function Model3.model = Model0.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant3.invariant', function Model0.model = Model5.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model4.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model6.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model4.model, function Model1.model = Model5.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicLit_IdxInLogic as IdxInLogic0 with predicate IdxInLogic0.idx_in_logic = ClauseIsSeen0.idx_in_logic + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model3 with function Model0.model = Invariant0.model, + function Model0.model = EquisatExtension0.model + clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with predicate EquisatExtension0.equisat_extension = NotSatisfiable0.equisat_extension + clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = bool, type a = Type.alloc_alloc_global, + function Model0.model = ClauseIsSeen0.model, axiom . + clone CreuSat_Logic_LogicClause_Impl2_ClauseIsSeen as ClauseIsSeen0 + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable as NotSatisfiable0 + clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat0 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . use mach.int.Int64 - clone CreusotContracts_Logic_Int_Impl18_Model as Model16 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve7 with type t = Type.alloc_vec_vec usize (Type.alloc_alloc_global) - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve6 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global) - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve5 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy6 with type t = usize, type a = Type.alloc_alloc_global - clone CreuSat_Logic_LogicUtil_ElemsLessThan as ElemsLessThan0 + clone CreusotContracts_Logic_Int_Impl18_Model as Model16 with function Model0.model = Model11.model + clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy6 with type t = usize, type a = Type.alloc_alloc_global, + type ModelTy0.modelTy = Model15.modelTy + clone CreuSat_Logic_LogicUtil_ElemsLessThan as ElemsLessThan0 with predicate ElemsLessThan0.elems_less_than = Resolve4.elems_less_than + clone CreusotContracts_Logic_Model_Impl1_Model as Model15 with type t = Type.alloc_vec_vec usize (Type.alloc_alloc_global), + function Model5.model = Resolve4.model + clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy4 with type t = bool, type a = Type.alloc_alloc_global, + type ModelTy0.modelTy = Model12.modelTy, type ModelTy0.modelTy = Model14.modelTy + clone CreusotContracts_Logic_Model_Impl1_Model as Model14 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global), + function Model4.model = Resolve4.model + clone CreuSat_Logic_LogicClause_Impl2_SameIdxSamePolarityExcept as SameIdxSamePolarityExcept0 with predicate SameIdxSamePolarityExcept0.same_idx_same_polarity_except = Resolve4.same_idx_same_polarity_except + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model10.modelTy, + type ModelTy0.modelTy = Model13.modelTy + clone CreusotContracts_Logic_Model_Impl1_Model as Model13 with type t = Type.creusat_clause_clause, + function Model0.model = Resolve4.model + clone CreuSat_Logic_LogicClause_Impl2_InFormula as InFormula0 with predicate InFormula0.in_formula = Resolve4.in_formula clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy5 with type t = Type.creusat_trail_step - clone Core_Slice_Index_Impl2_Output as Output1 with type t = Type.creusat_trail_step - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = Type.creusat_trail_step - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = Type.creusat_trail_step - clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve9 with type t = usize - clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve8 with type t = bool - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = usize - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy4 with type t = bool, type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Int_Impl18_ModelTy as ModelTy3 + clone Core_Slice_Index_Impl2_Output as Output1 with type t = Type.creusat_trail_step, + type Output0.output = Index3.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = Type.creusat_trail_step, + predicate HasValue0.has_value = Index3.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = Type.creusat_trail_step, + predicate InBounds0.in_bounds = Index3.in_bounds + clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve9 with type t = usize, + predicate Resolve0.resolve = Resolve3.resolve + clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve8 with type t = bool, + predicate Resolve0.resolve = Resolve2.resolve + clone CreusotContracts_Logic_Int_Impl18_ModelTy as ModelTy3 with type ModelTy0.modelTy = Model11.modelTy + clone CreuSat_Logic_LogicLit_Impl1_IsOpp as IsOpp0 with predicate IsOpp0.is_opp = ChooseLiteral0.is_opp, + predicate IsOpp0.is_opp = Resolve4.is_opp + clone CreusotContracts_Logic_Model_Impl0_Model as Model12 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global), + function Model2.model = ChooseLiteral0.model clone CreusotContracts_Logic_Model_Impl1_Model as Model11 with type t = usize, - type ModelTy0.modelTy = ModelTy3.modelTy, function Model0.model = Model16.model - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = bool + function Model0.model = ChooseLiteral0.model, function Model3.model = Resolve4.model clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy2 with type t = bool - clone Core_Slice_Index_Impl2_Output as Output0 with type t = bool - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = bool - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = bool - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = bool - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 - clone CreuSat_Clause_Impl2_Clone_Interface as Clone0 - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 - clone CreuSat_Logic_LogicLit_Impl1_IsOpp as IsOpp0 with function IndexLogic0.index_logic = IndexLogic0.index_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic - clone CreuSat_Lit_Impl1_Index_Interface as Index2 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_Impl2_SameIdxSamePolarityExcept as SameIdxSamePolarityExcept0 with function Model0.model = Model2.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic - clone CreusotContracts_Logic_Model_Impl1_Model as Model13 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model2.model + clone Core_Slice_Index_Impl2_Output as Output0 with type t = bool, type Output0.output = IndexMut0.output + clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = bool, + predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = bool, + predicate HasValue0.has_value = IndexMut0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = bool, + predicate InBounds0.in_bounds = IndexMut0.in_bounds clone CreusotContracts_Logic_Model_Impl0_Model as Model10 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model2.model - clone CreuSat_Clause_Impl0_Index_Interface as Index1 with function Model0.model = Model10.model - clone CreuSat_Clause_Impl3_Len_Interface as Len1 with function Model0.model = Model10.model - clone CreusotContracts_Logic_Model_Impl1_Model as Model14 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global), - type ModelTy0.modelTy = ModelTy4.modelTy, function Model0.model = Model1.model - clone CreusotContracts_Logic_Model_Impl0_Model as Model12 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global), - type ModelTy0.modelTy = ModelTy4.modelTy, function Model0.model = Model1.model - clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve2 with type t = bool, function Model0.model = Model1.model, - predicate Resolve0.resolve = Resolve8.resolve - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = bool, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - predicate ResolveElswhere0.resolve_elswhere = ResolveElswhere0.resolve_elswhere, type Output0.output = Output0.output - clone Alloc_Vec_FromElem_Interface as FromElem0 with type t = bool, function Model0.model = Model1.model - clone CreuSat_Logic_LogicClause_Impl2_InFormula as InFormula0 with function Model0.model = Model0.model + function Model0.model = Len1.model, function Model0.model = Index1.model, + function Model3.model = ChooseLiteral0.model, function Model1.model = Resolve4.model + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model9.modelTy clone CreusotContracts_Logic_Model_Impl0_Model as Model9 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model3.model - clone CreuSat_Formula_Impl0_Index_Interface as Index0 with function Model0.model = Model9.model + function Model0.model = Index0.model, function Model6.model = Resolve4.model + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve7 with type t = Type.alloc_vec_vec usize (Type.alloc_alloc_global) + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve6 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global) + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve5 with type t = Type.creusat_clause_clause + clone CreuSat_ConflictAnalysis_Resolve_Interface as Resolve4 clone Alloc_Vec_Impl16_Index_Interface as Index3 with type t = Type.creusat_trail_step, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model5.model, - predicate InBounds0.in_bounds = InBounds1.in_bounds, predicate HasValue0.has_value = HasValue1.has_value, - type Output0.output = Output1.output - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, - function Model0.model = Model5.model - clone CreusotContracts_Logic_Model_Impl1_Model as Model15 with type t = Type.alloc_vec_vec usize (Type.alloc_alloc_global), - type ModelTy0.modelTy = ModelTy6.modelTy, function Model0.model = Model4.model - clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve3 with type t = usize, function Model0.model = Model4.model, - predicate Resolve0.resolve = Resolve9.resolve - clone Alloc_Vec_Impl0_New_Interface as New0 with type t = usize, function Model0.model = Model4.model - clone CreuSat_Trail_Impl0_DecisionLevel_Interface as DecisionLevel0 with function Model0.model = Model4.model - clone CreuSat_ConflictAnalysis_Resolve_Interface as Resolve4 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant1.invariant', predicate InFormula0.in_formula = InFormula0.in_formula, - function Model0.model = Model13.model, function IndexLogic0.index_logic = IndexLogic0.index_logic, - function Model1.model = Model10.model, predicate IsOpp0.is_opp = IsOpp0.is_opp, - predicate SameIdxSamePolarityExcept0.same_idx_same_polarity_except = SameIdxSamePolarityExcept0.same_idx_same_polarity_except, - function Model2.model = Model6.model, predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner, - predicate SatInner0.sat_inner = SatInner0.sat_inner, function Model3.model = Model11.model, - function Model4.model = Model14.model, function Model5.model = Model15.model, - predicate ElemsLessThan0.elems_less_than = ElemsLessThan0.elems_less_than, function Model6.model = Model9.model, - predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner, - predicate ClauseIsSeen0.clause_is_seen = ClauseIsSeen0.clause_is_seen, predicate Unsat0.unsat = Unsat0.unsat, - predicate Invariant2.invariant' = Invariant2.invariant', function Model7.model = Model2.model, - function Model8.model = Model1.model, function Model9.model = Model4.model, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_ConflictAnalysis_ChooseLiteral_Interface as ChooseLiteral0 with predicate Invariant0.invariant' = Invariant1.invariant', - predicate Unsat0.unsat = Unsat0.unsat, function Model0.model = Model11.model, function Model1.model = Model5.model, - function Model2.model = Model12.model, function Model3.model = Model10.model, predicate IsOpp0.is_opp = IsOpp0.is_opp, - function IndexLogic0.index_logic = IndexLogic0.index_logic - let rec cfg resolve_empty_clause [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 271 0 271 76] (f : Type.creusat_formula_formula) (trail : Type.creusat_trail_trail) (cref : usize) : bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 266 0 266 26] Invariant0.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 267 0 267 32] Invariant1.invariant' trail f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 268 0 268 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 269 0 269 57] Unsat0.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)) (Type.creusat_trail_trail_Trail_assignments trail)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 270 0 270 42] result -> NotSatisfiable0.not_satisfiable f } + type a = Type.alloc_alloc_global + clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve3 with type t = usize + clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve2 with type t = bool + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = usize + clone CreuSat_ConflictAnalysis_ChooseLiteral_Interface as ChooseLiteral0 + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = bool + clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = bool, type i = usize, + type a = Type.alloc_alloc_global + clone CreuSat_Lit_Impl1_Index_Interface as Index2 + clone CreuSat_Clause_Impl0_Index_Interface as Index1 + clone CreuSat_Clause_Impl3_Len_Interface as Len1 + clone Alloc_Vec_Impl0_New_Interface as New0 with type t = usize + clone CreuSat_Clause_Impl2_Clone_Interface as Clone0 + clone CreuSat_Formula_Impl0_Index_Interface as Index0 + clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global + clone Alloc_Vec_FromElem_Interface as FromElem0 with type t = bool + clone CreuSat_Trail_Impl0_DecisionLevel_Interface as DecisionLevel0 + let rec cfg resolve_empty_clause [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 271 0 271 76] (f : Type.creusat_formula_formula) (trail : Type.creusat_trail_trail) (cref : usize) : bool + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 266 0 266 26] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 267 0 267 32] Invariant1.invariant' trail f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 268 0 268 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 269 0 269 57] Unsat0.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)) (Type.creusat_trail_trail_Trail_assignments trail)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 270 0 270 42] result -> NotSatisfiable0.not_satisfiable f } = var _0 : bool; @@ -8398,32 +8282,32 @@ module CreuSat_ConflictAnalysis_ResolveEmptyClause } BB0 { _5 <- trail_2; - decisionlevel_4 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 272 24 272 46] DecisionLevel0.decision_level _5); + decisionlevel_4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 272 24 272 46] DecisionLevel0.decision_level _5); goto BB1 } BB1 { _7 <- Type.creusat_formula_formula_Formula_num_vars f_1; - seen_6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 273 19 273 42] FromElem0.from_elem false _7); + seen_6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 273 19 273 42] FromElem0.from_elem false _7); goto BB2 } BB2 { _9 <- Type.creusat_trail_trail_Trail_trail trail_2; - i_8 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 274 16 274 33] Len0.len _9); + i_8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 274 16 274 33] Len0.len _9); goto BB3 } BB3 { _13 <- f_1; _14 <- cref_3; - _12 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 275 17 275 24] Index0.index _13 _14); + _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 275 17 275 24] Index0.index _13 _14); goto BB4 } BB4 { _11 <- _12; - clause_10 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 275 17 275 32] Clone0.clone' _11); + clause_10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 275 17 275 32] Clone0.clone' _11); goto BB5 } BB5 { - to_bump_15 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 276 22 276 32] New0.new ()); + to_bump_15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 276 22 276 32] New0.new ()); goto BB6 } BB6 { @@ -8440,16 +8324,16 @@ module CreuSat_ConflictAnalysis_ResolveEmptyClause goto BB10 } BB10 { - invariant seen_is_clause { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 278 4 279 98] forall idx : (int) . 0 <= idx && idx < Seq.length (Model1.model seen_6) -> Seq.get (Model1.model seen_6) idx = (exists i : (int) . 0 <= i && i < UInt64.to_int j_16 && IndexLogic0.index_logic (Seq.get (Model2.model clause_10) i) = idx) }; - invariant seen_len { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 280 4 280 56] Seq.length (Model1.model seen_6) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; - invariant j_is_len { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 281 4 281 49] UInt64.to_int j_16 <= Seq.length (Model2.model clause_10) }; + invariant seen_is_clause { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 278 4 279 98] forall idx : (int) . 0 <= idx && idx < Seq.length (Model1.model seen_6) -> Seq.get (Model1.model seen_6) idx = (exists i : (int) . 0 <= i && i < UInt64.to_int j_16 && IndexLogic0.index_logic (Seq.get (Model2.model clause_10) i) = idx) }; + invariant seen_len { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 280 4 280 56] Seq.length (Model1.model seen_6) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; + invariant j_is_len { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 281 4 281 49] UInt64.to_int j_16 <= Seq.length (Model2.model clause_10) }; _20 <- j_16; _22 <- clause_10; - _21 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 283 14 283 26] Len1.len _22); + _21 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 283 14 283 26] Len1.len _22); goto BB11 } BB11 { - _19 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 283 10 283 26] _20 < _21); + _19 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 283 10 283 26] _20 < _21); switch (_19) | False -> goto BB16 | _ -> goto BB12 @@ -8460,29 +8344,29 @@ module CreuSat_ConflictAnalysis_ResolveEmptyClause seen_6 <- ^ _24; _28 <- clause_10; _29 <- j_16; - _27 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 284 13 284 22] Index1.index _28 _29); + _27 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 284 13 284 22] Index1.index _28 _29); goto BB13 } BB13 { _26 <- _27; - _25 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 284 13 284 30] Index2.index _26); + _25 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 284 13 284 30] Index2.index _26); goto BB14 } BB14 { - _23 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 284 8 284 31] IndexMut0.index_mut _24 _25); + _23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 284 8 284 31] IndexMut0.index_mut _24 _25); goto BB15 } BB15 { _23 <- { _23 with current = true }; assume { Resolve0.resolve _23 }; - j_16 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 285 8 285 14] j_16 + (1 : usize)); + j_16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 285 8 285 14] j_16 + (1 : usize)); _18 <- (); goto BB10 } BB16 { _17 <- (); clause_33 <- clause_10; - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 288 4 288 46] ClauseIsSeen0.clause_is_seen clause_33 seen_6 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 288 4 288 46] ClauseIsSeen0.clause_is_seen clause_33 seen_6 }; goto BB17 } BB17 { @@ -8497,7 +8381,7 @@ module CreuSat_ConflictAnalysis_ResolveEmptyClause _42 <- f_1; _44 <- seen_6; _43 <- _44; - _36 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 289 22 289 70] ChooseLiteral0.choose_literal _37 _39 _40 _42 _43); + _36 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 289 22 289 70] ChooseLiteral0.choose_literal _37 _39 _40 _42 _43); goto BB18 } BB18 { @@ -8521,7 +8405,7 @@ module CreuSat_ConflictAnalysis_ResolveEmptyClause c_idx_35 <- c_idx_46; _51 <- Type.creusat_trail_trail_Trail_trail trail_2; _52 <- i_8; - _50 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 293 22 293 36] Index3.index _51 _52); + _50 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 293 22 293 36] Index3.index _51 _52); goto BB22 } BB22 { @@ -8539,7 +8423,7 @@ module CreuSat_ConflictAnalysis_ResolveEmptyClause c_54 <- Type.creusat_trail_reason_Unit_0 _49; _56 <- f_1; _57 <- c_54; - _55 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 295 28 295 33] Index0.index _56 _57); + _55 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 295 28 295 33] Index0.index _56 _57); goto BB25 } BB25 { @@ -8553,12 +8437,12 @@ module CreuSat_ConflictAnalysis_ResolveEmptyClause _64 <- ante_48; _68 <- Type.creusat_trail_trail_Trail_trail trail_2; _69 <- i_8; - _67 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 299 34 299 48] Index3.index _68 _69); + _67 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 299 34 299 48] Index3.index _68 _69); goto BB26 } BB26 { _66 <- Type.creusat_trail_step_Step_lit _67; - _65 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 299 34 299 60] Index2.index _66); + _65 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 299 34 299 60] Index2.index _66); goto BB27 } BB27 { @@ -8577,7 +8461,7 @@ module CreuSat_ConflictAnalysis_ResolveEmptyClause to_bump_15 <- ^ _78; _77 <- borrow_mut ( * _78); _78 <- { _78 with current = ( ^ _77) }; - _60 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 299 4 299 114] Resolve4.resolve _61 _62 _64 _65 _70 _71 _73 _75 _77); + _60 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 299 4 299 114] Resolve4.resolve _61 _62 _64 _65 _70 _71 _73 _75 _77); goto BB28 } BB28 { @@ -8586,11 +8470,11 @@ module CreuSat_ConflictAnalysis_ResolveEmptyClause assume { Resolve1.resolve _76 }; assume { Resolve7.resolve _78 }; _81 <- clause_33; - _80 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 300 7 300 19] Len1.len _81); + _80 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 300 7 300 19] Len1.len _81); goto BB29 } BB29 { - _79 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/conflict_analysis.rs" 300 7 300 24] _80 = (0 : usize)); + _79 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 300 7 300 24] _80 = (0 : usize)); switch (_79) | False -> goto BB31 | _ -> goto BB30 @@ -8637,7 +8521,7 @@ end module CreuSat_Decision_Impl2_Clone use prelude.Prelude use Type - let rec cfg clone' [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 11 9 11 14] (self : Type.creusat_decision_node) : Type.creusat_decision_node + let rec cfg clone' [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 11 9 11 14] (self : Type.creusat_decision_node) : Type.creusat_decision_node = var _0 : Type.creusat_decision_node; @@ -8659,9 +8543,9 @@ module CreuSat_Decision_Impl0_Default_Interface use mach.int.Int32 use Type val default [@cfg:stackify] (_ : ()) : Type.creusat_decision_node - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 21 4 21 43] UInt64.to_int (Type.creusat_decision_node_Node_next result) = 18446744073709551615 } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 22 4 22 43] UInt64.to_int (Type.creusat_decision_node_Node_prev result) = 18446744073709551615 } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 23 4 23 33] UInt64.to_int (Type.creusat_decision_node_Node_ts result) = 0 } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 21 4 21 43] UInt64.to_int (Type.creusat_decision_node_Node_next result) = 18446744073709551615 } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 22 4 22 43] UInt64.to_int (Type.creusat_decision_node_Node_prev result) = 18446744073709551615 } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 23 4 23 33] UInt64.to_int (Type.creusat_decision_node_Node_ts result) = 0 } end module CreuSat_Decision_Impl0_Default @@ -8670,10 +8554,10 @@ module CreuSat_Decision_Impl0_Default use prelude.Prelude use mach.int.Int32 use Type - let rec cfg default [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 24 4 24 24] (_ : ()) : Type.creusat_decision_node - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 21 4 21 43] UInt64.to_int (Type.creusat_decision_node_Node_next result) = 18446744073709551615 } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 22 4 22 43] UInt64.to_int (Type.creusat_decision_node_Node_prev result) = 18446744073709551615 } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 23 4 23 33] UInt64.to_int (Type.creusat_decision_node_Node_ts result) = 0 } + let rec cfg default [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 24 4 24 24] (_ : ()) : Type.creusat_decision_node + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 21 4 21 43] UInt64.to_int (Type.creusat_decision_node_Node_next result) = 18446744073709551615 } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 22 4 22 43] UInt64.to_int (Type.creusat_decision_node_Node_prev result) = 18446744073709551615 } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 23 4 23 33] UInt64.to_int (Type.creusat_decision_node_Node_ts result) = 0 } = var _0 : Type.creusat_decision_node; @@ -8700,9 +8584,8 @@ module Core_Default_Default_Default end module CreuSat_Decision_Impl0 use Type - clone CreuSat_Decision_Impl0_Default_Interface as Default0 - clone Core_Default_Default_Default_Interface as Default1 with type self = Type.creusat_decision_node, - val default = Default0.default + clone CreuSat_Decision_Impl0_Default_Interface as Default0 with val default = Default1.default + clone Core_Default_Default_Default_Interface as Default1 with type self = Type.creusat_decision_node end module CreuSat_Decision_Impl1_MakeLinkedList_Interface use mach.int.Int @@ -8711,17 +8594,16 @@ module CreuSat_Decision_Impl1_MakeLinkedList_Interface use prelude.Prelude use seq.Seq use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant1 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val make_linked_list [@cfg:stackify] (f : Type.creusat_formula_formula) (lit_order : Type.alloc_vec_vec usize (Type.alloc_alloc_global)) : Type.creusat_decision_decisions - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 39 4 39 30] Invariant0.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 40 4 40 63] 0 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) && UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 41 4 43 48] Seq.length (Model0.model lit_order) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model lit_order) -> UInt64.to_int (Seq.get (Model0.model lit_order) i) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 44 4 44 45] Invariant1.invariant' result (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 39 4 39 30] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 40 4 40 63] 0 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) && UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 41 4 43 48] Seq.length (Model0.model lit_order) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model lit_order) -> UInt64.to_int (Seq.get (Model0.model lit_order) i) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 44 4 44 45] Invariant1.invariant' result (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } end module CreuSat_Decision_Impl1_MakeLinkedList @@ -8731,63 +8613,61 @@ module CreuSat_Decision_Impl1_MakeLinkedList use prelude.Prelude use seq.Seq use Type - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant3.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = Invariant3.index_logic + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model4 with function Model0.model = Model5.model - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with function Model0.model = Model4.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant2.invariant', - function Model0.model = Model4.model + type a = Type.alloc_alloc_global, function Model0.model = Model4.model, axiom . + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant2.invariant_internal + clone CreuSat_Logic_LogicClause_Impl0_Model as Model4 with function Model1.model = InvariantMirror0.model, + function Model0.model = FormulaInvariant0.model, function Model0.model = Invariant2.model + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Model3.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model3.model, - predicate Invariant0.invariant' = Invariant2.invariant', function Model1.model = Model4.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model2.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . + type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, + function Model0.model = Model2.model, axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Invariant0.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant1 with function Model0.model = Model1.model + type a = Type.alloc_alloc_global, function Model0.model = Invariant1.model, axiom . + clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant1 clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve4 with type t = usize - clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve3 with type t = Type.creusat_decision_node - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_decision_node + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . + clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve4 with type t = usize, + predicate Resolve0.resolve = Resolve2.resolve + clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve3 with type t = Type.creusat_decision_node, + predicate Resolve0.resolve = Resolve1.resolve clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_decision_node - clone Core_Slice_Index_Impl2_Output as Output1 with type t = Type.creusat_decision_node - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.creusat_decision_node - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = Type.creusat_decision_node - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = Type.creusat_decision_node + clone Core_Slice_Index_Impl2_Output as Output1 with type t = Type.creusat_decision_node, + type Output0.output = IndexMut0.output + clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.creusat_decision_node, + predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = Type.creusat_decision_node, + predicate HasValue0.has_value = IndexMut0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = Type.creusat_decision_node, + predicate InBounds0.in_bounds = IndexMut0.in_bounds clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = usize - clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize - clone CreuSat_Decision_Impl0_Default_Interface as Default0 - clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve1 with type t = Type.creusat_decision_node, - function Model0.model = Model1.model, predicate Resolve0.resolve = Resolve3.resolve + clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize, type Output0.output = Index0.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize, + predicate HasValue0.has_value = Index0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize, + predicate InBounds0.in_bounds = Index0.in_bounds + clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve2 with type t = usize + clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve1 with type t = Type.creusat_decision_node + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_decision_node clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.creusat_decision_node, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, - predicate InBounds0.in_bounds = InBounds1.in_bounds, predicate HasValue0.has_value = HasValue1.has_value, - predicate ResolveElswhere0.resolve_elswhere = ResolveElswhere0.resolve_elswhere, type Output0.output = Output1.output - clone Alloc_Vec_FromElem_Interface as FromElem0 with type t = Type.creusat_decision_node, - function Model0.model = Model1.model - clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve2 with type t = usize, function Model0.model = Model0.model, - predicate Resolve0.resolve = Resolve4.resolve - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = usize, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - type Output0.output = Output0.output - let rec cfg make_linked_list [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 45 4 45 76] (f : Type.creusat_formula_formula) (lit_order : Type.alloc_vec_vec usize (Type.alloc_alloc_global)) : Type.creusat_decision_decisions - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 39 4 39 30] Invariant0.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 40 4 40 63] 0 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) && UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 41 4 43 48] Seq.length (Model0.model lit_order) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model lit_order) -> UInt64.to_int (Seq.get (Model0.model lit_order) i) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 44 4 44 45] Invariant1.invariant' result (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } + type a = Type.alloc_alloc_global + clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = usize, type i = usize, type a = Type.alloc_alloc_global + clone Alloc_Vec_FromElem_Interface as FromElem0 with type t = Type.creusat_decision_node + clone CreuSat_Decision_Impl0_Default_Interface as Default0 + let rec cfg make_linked_list [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 45 4 45 76] (f : Type.creusat_formula_formula) (lit_order : Type.alloc_vec_vec usize (Type.alloc_alloc_global)) : Type.creusat_decision_decisions + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 39 4 39 30] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 40 4 40 63] 0 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) && UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 41 4 43 48] Seq.length (Model0.model lit_order) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model lit_order) -> UInt64.to_int (Seq.get (Model0.model lit_order) i) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 44 4 44 45] Invariant1.invariant' result (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } = var _0 : Type.creusat_decision_decisions; @@ -8884,12 +8764,12 @@ module CreuSat_Decision_Impl1_MakeLinkedList } BB1 { iNVALID'_3 <- (18446744073709551615 : usize); - _5 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 47 56 47 74] Default0.default ()); + _5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 47 56 47 74] Default0.default ()); goto BB2 } BB2 { _6 <- Type.creusat_formula_formula_Formula_num_vars f_1; - linked_list_4 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 47 41 47 87] FromElem0.from_elem _5 _6); + linked_list_4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 47 41 47 87] FromElem0.from_elem _5 _6); goto BB3 } BB3 { @@ -8904,12 +8784,12 @@ module CreuSat_Decision_Impl1_MakeLinkedList goto BB6 } BB6 { - invariant len_ok { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 50 8 50 65] Seq.length (Model1.model linked_list_4) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; - invariant head_ok { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 51 8 51 50] UInt64.to_int head_8 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; - invariant inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 52 8 54 103] forall j : (int) . 0 <= j && j < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) -> (UInt64.to_int (Type.creusat_decision_node_Node_next (Seq.get (Model1.model linked_list_4) j)) = 18446744073709551615 || UInt64.to_int (Type.creusat_decision_node_Node_next (Seq.get (Model1.model linked_list_4) j)) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1)) && (UInt64.to_int (Type.creusat_decision_node_Node_prev (Seq.get (Model1.model linked_list_4) j)) = 18446744073709551615 || UInt64.to_int (Type.creusat_decision_node_Node_prev (Seq.get (Model1.model linked_list_4) j)) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1)) }; + invariant len_ok { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 50 8 50 65] Seq.length (Model1.model linked_list_4) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; + invariant head_ok { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 51 8 51 50] UInt64.to_int head_8 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; + invariant inv { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 52 8 54 103] forall j : (int) . 0 <= j && j < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) -> (UInt64.to_int (Type.creusat_decision_node_Node_next (Seq.get (Model1.model linked_list_4) j)) = 18446744073709551615 || UInt64.to_int (Type.creusat_decision_node_Node_next (Seq.get (Model1.model linked_list_4) j)) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1)) && (UInt64.to_int (Type.creusat_decision_node_Node_prev (Seq.get (Model1.model linked_list_4) j)) = 18446744073709551615 || UInt64.to_int (Type.creusat_decision_node_Node_prev (Seq.get (Model1.model linked_list_4) j)) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1)) }; _12 <- i_7; _13 <- Type.creusat_formula_formula_Formula_num_vars f_1; - _11 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 55 14 55 28] _12 < _13); + _11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 55 14 55 28] _12 < _13); switch (_11) | False -> goto BB30 | _ -> goto BB7 @@ -8918,13 +8798,13 @@ module CreuSat_Decision_Impl1_MakeLinkedList BB7 { _16 <- lit_order_2; _17 <- i_7; - _15 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 56 20 56 32] Index0.index _16 _17); + _15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 56 20 56 32] Index0.index _16 _17); goto BB8 } BB8 { j_14 <- _15; _20 <- i_7; - _19 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 57 15 57 21] _20 = (0 : usize)); + _19 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 57 15 57 21] _20 = (0 : usize)); switch (_19) | False -> goto BB17 | _ -> goto BB9 @@ -8932,7 +8812,7 @@ module CreuSat_Decision_Impl1_MakeLinkedList } BB9 { _23 <- Type.creusat_formula_formula_Formula_num_vars f_1; - _22 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 58 19 58 33] _23 > (1 : usize)); + _22 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 58 19 58 33] _23 > (1 : usize)); switch (_22) | False -> goto BB13 | _ -> goto BB10 @@ -8940,7 +8820,7 @@ module CreuSat_Decision_Impl1_MakeLinkedList } BB10 { _26 <- lit_order_2; - _25 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 59 42 59 54] Index0.index _26 (1 : usize)); + _25 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 59 42 59 54] Index0.index _26 (1 : usize)); goto BB11 } BB11 { @@ -8948,7 +8828,7 @@ module CreuSat_Decision_Impl1_MakeLinkedList _28 <- borrow_mut linked_list_4; linked_list_4 <- ^ _28; _29 <- j_14; - _27 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 59 20 59 34] IndexMut0.index_mut _28 _29); + _27 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 59 20 59 34] IndexMut0.index_mut _28 _29); goto BB12 } BB12 { @@ -8962,7 +8842,7 @@ module CreuSat_Decision_Impl1_MakeLinkedList _32 <- borrow_mut linked_list_4; linked_list_4 <- ^ _32; _33 <- j_14; - _31 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 61 20 61 34] IndexMut0.index_mut _32 _33); + _31 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 61 20 61 34] IndexMut0.index_mut _32 _33); goto BB14 } BB14 { @@ -8976,7 +8856,7 @@ module CreuSat_Decision_Impl1_MakeLinkedList _36 <- borrow_mut linked_list_4; linked_list_4 <- ^ _36; _37 <- j_14; - _35 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 63 16 63 30] IndexMut0.index_mut _36 _37); + _35 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 63 16 63 30] IndexMut0.index_mut _36 _37); goto BB16 } BB16 { @@ -8990,8 +8870,8 @@ module CreuSat_Decision_Impl1_MakeLinkedList BB17 { _40 <- i_7; _42 <- Type.creusat_formula_formula_Formula_num_vars f_1; - _41 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 65 27 65 41] _42 - (1 : usize)); - _39 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 65 22 65 41] _40 = _41); + _41 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 65 27 65 41] _42 - (1 : usize)); + _39 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 65 22 65 41] _40 = _41); switch (_39) | False -> goto BB22 | _ -> goto BB18 @@ -9002,7 +8882,7 @@ module CreuSat_Decision_Impl1_MakeLinkedList _45 <- borrow_mut linked_list_4; linked_list_4 <- ^ _45; _46 <- j_14; - _44 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 66 16 66 30] IndexMut0.index_mut _45 _46); + _44 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 66 16 66 30] IndexMut0.index_mut _45 _46); goto BB19 } BB19 { @@ -9010,8 +8890,8 @@ module CreuSat_Decision_Impl1_MakeLinkedList assume { Resolve0.resolve _44 }; _49 <- lit_order_2; _51 <- i_7; - _50 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 67 48 67 53] _51 - (1 : usize)); - _48 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 67 38 67 54] Index0.index _49 _50); + _50 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 67 48 67 53] _51 - (1 : usize)); + _48 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 67 38 67 54] Index0.index _49 _50); goto BB20 } BB20 { @@ -9019,7 +8899,7 @@ module CreuSat_Decision_Impl1_MakeLinkedList _53 <- borrow_mut linked_list_4; linked_list_4 <- ^ _53; _54 <- j_14; - _52 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 67 16 67 30] IndexMut0.index_mut _53 _54); + _52 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 67 16 67 30] IndexMut0.index_mut _53 _54); goto BB21 } BB21 { @@ -9031,8 +8911,8 @@ module CreuSat_Decision_Impl1_MakeLinkedList BB22 { _57 <- lit_order_2; _59 <- i_7; - _58 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 69 48 69 53] _59 + (1 : usize)); - _56 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 69 38 69 54] Index0.index _57 _58); + _58 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 69 48 69 53] _59 + (1 : usize)); + _56 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 69 38 69 54] Index0.index _57 _58); goto BB23 } BB23 { @@ -9040,7 +8920,7 @@ module CreuSat_Decision_Impl1_MakeLinkedList _61 <- borrow_mut linked_list_4; linked_list_4 <- ^ _61; _62 <- j_14; - _60 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 69 16 69 30] IndexMut0.index_mut _61 _62); + _60 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 69 16 69 30] IndexMut0.index_mut _61 _62); goto BB24 } BB24 { @@ -9048,8 +8928,8 @@ module CreuSat_Decision_Impl1_MakeLinkedList assume { Resolve0.resolve _60 }; _65 <- lit_order_2; _67 <- i_7; - _66 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 70 48 70 53] _67 - (1 : usize)); - _64 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 70 38 70 54] Index0.index _65 _66); + _66 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 70 48 70 53] _67 - (1 : usize)); + _64 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 70 38 70 54] Index0.index _65 _66); goto BB25 } BB25 { @@ -9057,7 +8937,7 @@ module CreuSat_Decision_Impl1_MakeLinkedList _69 <- borrow_mut linked_list_4; linked_list_4 <- ^ _69; _70 <- j_14; - _68 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 70 16 70 30] IndexMut0.index_mut _69 _70); + _68 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 70 16 70 30] IndexMut0.index_mut _69 _70); goto BB26 } BB26 { @@ -9075,13 +8955,13 @@ module CreuSat_Decision_Impl1_MakeLinkedList _74 <- borrow_mut linked_list_4; linked_list_4 <- ^ _74; _75 <- j_14; - _73 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 72 12 72 26] IndexMut0.index_mut _74 _75); + _73 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 72 12 72 26] IndexMut0.index_mut _74 _75); goto BB29 } BB29 { - _73 <- { _73 with current = (let Type.CreuSat_Decision_Node a b c = * _73 in Type.CreuSat_Decision_Node a b ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 72 12 72 46] _71 - _72)) }; + _73 <- { _73 with current = (let Type.CreuSat_Decision_Node a b c = * _73 in Type.CreuSat_Decision_Node a b ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 72 12 72 46] _71 - _72)) }; assume { Resolve0.resolve _73 }; - i_7 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 73 12 73 18] i_7 + (1 : usize)); + i_7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 73 12 73 18] i_7 + (1 : usize)); _10 <- (); goto BB6 } @@ -9090,7 +8970,7 @@ module CreuSat_Decision_Impl1_MakeLinkedList assume { Resolve1.resolve _79 }; _79 <- linked_list_4; _81 <- Type.creusat_formula_formula_Formula_num_vars f_1; - _80 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 75 57 75 71] _81 + (1 : usize)); + _80 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 75 57 75 71] _81 + (1 : usize)); _82 <- head_8; _83 <- head_8; _0 <- Type.CreuSat_Decision_Decisions _79 _80 _82 _83; @@ -9120,10 +9000,10 @@ module CreuSat_Logic_LogicUtil_SortedRangeRev use mach.int.Int use prelude.Prelude use mach.int.UInt64 - predicate sorted_range_rev [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 6 0 6 71] (s : Seq.seq (usize, usize)) (l : int) (u : int) + predicate sorted_range_rev [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 6 0 6 71] (s : Seq.seq (usize, usize)) (l : int) (u : int) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 7 4 9 5] forall j : (int) . forall i : (int) . l <= i && i < j && j < u -> (let (a, _) = Seq.get s i in a) >= (let (a, _) = Seq.get s j in a) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 7 4 9 5] forall j : (int) . forall i : (int) . l <= i && i < j && j < u -> (let (a, _) = Seq.get s i in a) >= (let (a, _) = Seq.get s j in a) end module CreuSat_Logic_LogicUtil_SortedRev_Interface use seq.Seq @@ -9139,10 +9019,10 @@ module CreuSat_Logic_LogicUtil_SortedRev use mach.int.UInt64 use mach.int.Int32 clone CreuSat_Logic_LogicUtil_SortedRangeRev_Interface as SortedRangeRev0 - predicate sorted_rev [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 13 0 13 49] (s : Seq.seq (usize, usize)) + predicate sorted_rev [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 13 0 13 49] (s : Seq.seq (usize, usize)) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 14 4 16 5] SortedRangeRev0.sorted_range_rev s 0 (Seq.length s) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 14 4 16 5] SortedRangeRev0.sorted_range_rev s 0 (Seq.length s) end module CreuSat_Logic_LogicUtil_PartitionRev_Interface use seq.Seq @@ -9157,27 +9037,26 @@ module CreuSat_Logic_LogicUtil_PartitionRev use prelude.Prelude use mach.int.UInt64 use mach.int.Int32 - predicate partition_rev [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 53 0 53 60] (v : Seq.seq (usize, usize)) (i : int) + predicate partition_rev [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 53 0 53 60] (v : Seq.seq (usize, usize)) (i : int) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 54 4 54 110] forall k2 : (int) . forall k1 : (int) . 0 <= k1 && k1 < i && i <= k2 && k2 < Seq.length v -> (let (a, _) = Seq.get v k1 in a) >= (let (a, _) = Seq.get v k2 in a) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 54 4 54 110] forall k2 : (int) . forall k1 : (int) . 0 <= k1 && k1 < i && i <= k2 && k2 < Seq.length v -> (let (a, _) = Seq.get v k1 in a) >= (let (a, _) = Seq.get v k2 in a) end module CreuSat_Util_SortReverse_Interface use prelude.Prelude use Type use mach.int.Int use mach.int.UInt64 - clone CreusotContracts_Logic_Seq_Impl2_PermutationOf_Interface as PermutationOf0 with type t = (usize, usize) clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy0 with type t = (usize, usize), - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model1 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global), - type ModelTy0.modelTy = ModelTy0.modelTy + type a = Type.alloc_alloc_global, type ModelTy0.modelTy = Model1.modelTy + clone CreusotContracts_Logic_Seq_Impl2_PermutationOf_Interface as PermutationOf0 with type t = (usize, usize) + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model1 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global) clone CreuSat_Logic_LogicUtil_SortedRev_Interface as SortedRev0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = (usize, usize), type a = Type.alloc_alloc_global, axiom . val sort_reverse [@cfg:stackify] (v : borrowed (Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global))) : () - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 11 0 11 27] SortedRev0.sorted_rev (Model0.model ( ^ v)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 12 0 12 36] PermutationOf0.permutation_of (Model0.model ( ^ v)) (Model1.model v) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 11 0 11 27] SortedRev0.sorted_rev (Model0.model ( ^ v)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 12 0 12 36] PermutationOf0.permutation_of (Model0.model ( ^ v)) (Model1.model v) } end module CreuSat_Util_SortReverse @@ -9187,38 +9066,37 @@ module CreuSat_Util_SortReverse use mach.int.UInt64 use seq.Seq use mach.int.Int32 + clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy0 with type t = (usize, usize), + type a = Type.alloc_alloc_global, type ModelTy0.modelTy = Model1.modelTy clone CreuSat_Logic_LogicUtil_PartitionRev as PartitionRev0 + clone CreuSat_Logic_LogicUtil_SortedRangeRev as SortedRangeRev0 with predicate SortedRangeRev0.sorted_range_rev = SortedRev0.sorted_range_rev clone CreusotContracts_Logic_Seq_Impl2_PermutationOf as PermutationOf0 with type t = (usize, usize) - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy0 with type t = (usize, usize), - type a = Type.alloc_alloc_global - clone CreuSat_Logic_LogicUtil_SortedRangeRev as SortedRangeRev0 - clone CreuSat_Logic_LogicUtil_SortedRev as SortedRev0 with predicate SortedRangeRev0.sorted_range_rev = SortedRangeRev0.sorted_range_rev clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = (usize, usize), type a = Type.alloc_alloc_global, + function Model0.model = Model1.model, axiom . + clone CreusotContracts_Logic_Model_Impl1_Model as Model1 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global) + clone CreuSat_Logic_LogicUtil_SortedRev as SortedRev0 + clone CreusotContracts_Std1_Slice_Impl0_Model as Model2 with type t = (usize, usize), + function Model0.model = DerefMut0.model, function Model1.model = Swap0.model, function Model0.model = Model3.model, axiom . - clone CreusotContracts_Logic_Model_Impl1_Model as Model1 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global), - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model0.model + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = (usize, usize), + type ModelTy0.modelTy = Model3.modelTy + clone CreusotContracts_Logic_Model_Impl1_Model as Model3 with type t = seq (usize, usize), + function Model0.model = Swap0.model + clone Core_Slice_Index_Impl2_Output as Output0 with type t = (usize, usize), type Output0.output = Index0.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = (usize, usize), + predicate HasValue0.has_value = Index0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = (usize, usize), + predicate InBounds0.in_bounds = Index0.in_bounds clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global) clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = seq (usize, usize) - clone CreusotContracts_Std1_Slice_Impl0_Model as Model2 with type t = (usize, usize), axiom . - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = (usize, usize) - clone CreusotContracts_Logic_Model_Impl1_Model as Model3 with type t = seq (usize, usize), - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model2.model - clone Core_Slice_Impl0_Swap_Interface as Swap0 with type t = (usize, usize), function Model0.model = Model3.model, - function Model1.model = Model2.model - clone Core_Slice_Index_Impl2_Output as Output0 with type t = (usize, usize) - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = (usize, usize) - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = (usize, usize) - clone Alloc_Vec_Impl11_DerefMut_Interface as DerefMut0 with type t = (usize, usize), type a = Type.alloc_alloc_global, - function Model0.model = Model2.model, function Model1.model = Model0.model + clone Core_Slice_Impl0_Swap_Interface as Swap0 with type t = (usize, usize) + clone Alloc_Vec_Impl11_DerefMut_Interface as DerefMut0 with type t = (usize, usize), type a = Type.alloc_alloc_global clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = (usize, usize), type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - type Output0.output = Output0.output - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = (usize, usize), type a = Type.alloc_alloc_global, - function Model0.model = Model0.model - let rec cfg sort_reverse [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 13 0 13 48] (v : borrowed (Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global))) : () - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 11 0 11 27] SortedRev0.sorted_rev (Model0.model ( ^ v)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 12 0 12 36] PermutationOf0.permutation_of (Model0.model ( ^ v)) (Model1.model v) } + type a = Type.alloc_alloc_global + clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = (usize, usize), type a = Type.alloc_alloc_global + let rec cfg sort_reverse [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 13 0 13 48] (v : borrowed (Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global))) : () + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 11 0 11 27] SortedRev0.sorted_rev (Model0.model ( ^ v)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 12 0 12 36] PermutationOf0.permutation_of (Model0.model ( ^ v)) (Model1.model v) } = var _0 : (); @@ -9269,25 +9147,25 @@ module CreuSat_Util_SortReverse BB0 { i_2 <- (0 : usize); _4 <- (); - old_v_3 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 15 16 15 28] v_1); + old_v_3 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 15 16 15 28] v_1); goto BB1 } BB1 { goto BB2 } BB2 { - invariant proph_const { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 16 4 16 51] ^ v_1 = ^ old_v_3 }; - invariant permutation { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 17 4 17 67] PermutationOf0.permutation_of (Model1.model v_1) (Model0.model ( * old_v_3)) }; - invariant i_bound { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 18 4 18 43] UInt64.to_int i_2 <= Seq.length (Model1.model v_1) }; - invariant sorted { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 19 4 19 53] SortedRangeRev0.sorted_range_rev (Model1.model v_1) 0 (UInt64.to_int i_2) }; - invariant partition { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 20 4 20 50] PartitionRev0.partition_rev (Model1.model v_1) (UInt64.to_int i_2) }; + invariant proph_const { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 16 4 16 51] ^ v_1 = ^ old_v_3 }; + invariant permutation { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 17 4 17 67] PermutationOf0.permutation_of (Model1.model v_1) (Model0.model ( * old_v_3)) }; + invariant i_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 18 4 18 43] UInt64.to_int i_2 <= Seq.length (Model1.model v_1) }; + invariant sorted { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 19 4 19 53] SortedRangeRev0.sorted_range_rev (Model1.model v_1) 0 (UInt64.to_int i_2) }; + invariant partition { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 20 4 20 50] PartitionRev0.partition_rev (Model1.model v_1) (UInt64.to_int i_2) }; _7 <- i_2; _9 <- * v_1; - _8 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 21 14 21 21] Len0.len _9); + _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 21 14 21 21] Len0.len _9); goto BB3 } BB3 { - _6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 21 10 21 21] _7 < _8); + _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 21 10 21 21] _7 < _8); switch (_6) | False -> goto BB16 | _ -> goto BB4 @@ -9296,20 +9174,20 @@ module CreuSat_Util_SortReverse BB4 { max_10 <- i_2; _12 <- i_2; - j_11 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 23 20 23 25] _12 + (1 : usize)); + j_11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 23 20 23 25] _12 + (1 : usize)); goto BB5 } BB5 { - invariant max_is_max { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 24 8 24 96] forall k : (int) . UInt64.to_int i_2 <= k && k < UInt64.to_int j_11 -> (let (a, _) = Seq.get (Model1.model v_1) (UInt64.to_int max_10) in a) >= (let (a, _) = Seq.get (Model1.model v_1) k in a) }; - invariant j_bound { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 25 8 25 59] UInt64.to_int i_2 <= UInt64.to_int j_11 && UInt64.to_int j_11 <= Seq.length (Model1.model v_1) }; - invariant max_bound { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 26 8 26 56] UInt64.to_int i_2 <= UInt64.to_int max_10 && UInt64.to_int max_10 < UInt64.to_int j_11 }; + invariant max_is_max { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 24 8 24 96] forall k : (int) . UInt64.to_int i_2 <= k && k < UInt64.to_int j_11 -> (let (a, _) = Seq.get (Model1.model v_1) (UInt64.to_int max_10) in a) >= (let (a, _) = Seq.get (Model1.model v_1) k in a) }; + invariant j_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 25 8 25 59] UInt64.to_int i_2 <= UInt64.to_int j_11 && UInt64.to_int j_11 <= Seq.length (Model1.model v_1) }; + invariant max_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 26 8 26 56] UInt64.to_int i_2 <= UInt64.to_int max_10 && UInt64.to_int max_10 < UInt64.to_int j_11 }; _15 <- j_11; _17 <- * v_1; - _16 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 27 18 27 25] Len0.len _17); + _16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 27 18 27 25] Len0.len _17); goto BB6 } BB6 { - _14 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 27 14 27 25] _15 < _16); + _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 27 14 27 25] _15 < _16); switch (_14) | False -> goto BB13 | _ -> goto BB7 @@ -9318,19 +9196,19 @@ module CreuSat_Util_SortReverse BB7 { _22 <- * v_1; _23 <- j_11; - _21 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 28 15 28 19] Index0.index _22 _23); + _21 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 28 15 28 19] Index0.index _22 _23); goto BB8 } BB8 { _20 <- (let (a, _) = _21 in a); _26 <- * v_1; _27 <- max_10; - _25 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 28 24 28 30] Index0.index _26 _27); + _25 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 28 24 28 30] Index0.index _26 _27); goto BB9 } BB9 { _24 <- (let (a, _) = _25 in a); - _19 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 28 15 28 32] _20 > _24); + _19 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 28 15 28 32] _20 > _24); switch (_19) | False -> goto BB11 | _ -> goto BB10 @@ -9347,7 +9225,7 @@ module CreuSat_Util_SortReverse goto BB12 } BB12 { - j_11 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 31 12 31 18] j_11 + (1 : usize)); + j_11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 31 12 31 18] j_11 + (1 : usize)); _5 <- (); goto BB5 } @@ -9355,7 +9233,7 @@ module CreuSat_Util_SortReverse _13 <- (); _35 <- borrow_mut ( * v_1); v_1 <- { v_1 with current = ( ^ _35) }; - _34 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 33 8 33 22] DerefMut0.deref_mut _35); + _34 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 33 8 33 22] DerefMut0.deref_mut _35); goto BB14 } BB14 { @@ -9363,12 +9241,12 @@ module CreuSat_Util_SortReverse _34 <- { _34 with current = ( ^ _33) }; _36 <- i_2; _37 <- max_10; - _32 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 33 8 33 22] Swap0.swap _33 _36 _37); + _32 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 33 8 33 22] Swap0.swap _33 _36 _37); goto BB15 } BB15 { assume { Resolve0.resolve _34 }; - i_2 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 34 8 34 14] i_2 + (1 : usize)); + i_2 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 34 8 34 14] i_2 + (1 : usize)); _5 <- (); goto BB2 } @@ -9385,14 +9263,13 @@ module CreuSat_Decision_Impl1_New_Interface use mach.int.UInt64 use prelude.Prelude use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val new [@cfg:stackify] (f : Type.creusat_formula_formula) : Type.creusat_decision_decisions - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 79 4 79 30] Invariant0.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 80 4 80 63] 0 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) && UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 81 4 81 45] Invariant1.invariant' result (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 79 4 79 30] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 80 4 80 63] 0 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) && UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 81 4 81 45] Invariant1.invariant' result (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } end module CreuSat_Decision_Impl1_New @@ -9402,100 +9279,93 @@ module CreuSat_Decision_Impl1_New use prelude.Prelude use Type use seq.Seq - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant3.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = Invariant3.index_logic + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant2.invariant_internal clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model6 with function Model0.model = Model7.model - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with function Model0.model = Model6.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant2.invariant', - function Model0.model = Model6.model + type a = Type.alloc_alloc_global, function Model0.model = Model6.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model6 with function Model0.model = Model2.model, + function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, + function Model0.model = Invariant2.model + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model2.modelTy + clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_decision_node, + type a = Type.alloc_alloc_global, function Model0.model = Invariant1.model, axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, + function Model0.model = Model4.model, axiom . + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model4 with function Model0.model = Invariant0.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = (usize, usize), type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model6.model + clone CreusotContracts_Logic_Model_Impl0_Model as Model2 with type t = Type.creusat_clause_clause clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model4 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model0.model, - predicate Invariant0.invariant' = Invariant2.invariant', function Model1.model = Model6.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model4.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant1 with function Model0.model = Model5.model - clone CreuSat_Logic_LogicUtil_SortedRangeRev as SortedRangeRev0 - clone CreuSat_Logic_LogicUtil_SortedRev as SortedRev0 with predicate SortedRangeRev0.sorted_range_rev = SortedRangeRev0.sorted_range_rev - clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve5 with type t = usize + clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . + clone CreuSat_Logic_LogicUtil_SortedRangeRev as SortedRangeRev0 with predicate SortedRangeRev0.sorted_range_rev = SortedRev0.sorted_range_rev + clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve5 with type t = usize, + predicate Resolve0.resolve = Resolve3.resolve, predicate Resolve0.resolve = Resolve6.resolve, + predicate Resolve1.resolve = Resolve6.resolve clone CreusotContracts_Logic_Resolve_Impl0_Resolve as Resolve6 with type t1 = usize, type t2 = usize, - predicate Resolve0.resolve = Resolve5.resolve, predicate Resolve1.resolve = Resolve5.resolve - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global) + predicate Resolve0.resolve = Resolve4.resolve clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy4 with type t = (usize, usize), - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Seq_Impl2_PermutationOf as PermutationOf0 with type t = (usize, usize) - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = (usize, usize) + type a = Type.alloc_alloc_global, type ModelTy0.modelTy = Model9.modelTy + clone CreusotContracts_Logic_Seq_Impl2_PermutationOf as PermutationOf0 with type t = (usize, usize), + predicate PermutationOf0.permutation_of = SortReverse0.permutation_of + clone CreusotContracts_Logic_Model_Impl1_Model as Model9 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global), + function Model1.model = SortReverse0.model + clone CreuSat_Logic_LogicUtil_SortedRev as SortedRev0 with predicate SortedRev0.sorted_rev = SortReverse0.sorted_rev clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy3 with type t = (usize, usize) - clone Core_Slice_Index_Impl2_Output as Output1 with type t = (usize, usize) - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere1 with type t = (usize, usize) - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = (usize, usize) - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = (usize, usize) - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = usize - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = usize + clone Core_Slice_Index_Impl2_Output as Output1 with type t = (usize, usize), type Output0.output = IndexMut1.output, + type Output0.output = Index4.output + clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere1 with type t = (usize, usize), + predicate ResolveElswhere0.resolve_elswhere = IndexMut1.resolve_elswhere + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = (usize, usize), + predicate HasValue0.has_value = IndexMut1.has_value, predicate HasValue0.has_value = Index4.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = (usize, usize), + predicate InBounds0.in_bounds = IndexMut1.in_bounds, predicate InBounds0.in_bounds = Index4.in_bounds + clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = usize, + predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy2 with type t = usize - clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy1 - clone CreuSat_Lit_Impl1_Index_Interface as Index2 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreusotContracts_Logic_Model_Impl1_Model as Model9 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global), - type ModelTy0.modelTy = ModelTy4.modelTy, function Model0.model = Model3.model - clone CreuSat_Util_SortReverse_Interface as SortReverse0 with function Model0.model = Model3.model, - predicate SortedRev0.sorted_rev = SortedRev0.sorted_rev, function Model1.model = Model9.model, - predicate PermutationOf0.permutation_of = PermutationOf0.permutation_of - clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve4 with type t = (usize, usize), - function Model0.model = Model3.model, predicate Resolve0.resolve = Resolve6.resolve + clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize, type Output0.output = Index3.output, + type Output0.output = IndexMut0.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize, + predicate HasValue0.has_value = Index3.has_value, predicate HasValue0.has_value = IndexMut0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize, + predicate InBounds0.in_bounds = Index3.in_bounds, predicate InBounds0.in_bounds = IndexMut0.in_bounds + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model8.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model as Model8 with type t = Type.creusat_formula_formula, + function Model0.model = Index0.model + clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve4 with type t = (usize, usize) + clone CreuSat_Decision_Impl1_MakeLinkedList_Interface as MakeLinkedList0 + clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve3 with type t = usize clone Alloc_Vec_Impl16_Index_Interface as Index4 with type t = (usize, usize), type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model3.model, - predicate InBounds0.in_bounds = InBounds1.in_bounds, predicate HasValue0.has_value = HasValue1.has_value, - type Output0.output = Output1.output + type a = Type.alloc_alloc_global + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global) + clone CreuSat_Util_SortReverse_Interface as SortReverse0 + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = (usize, usize) clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut1 with type t = (usize, usize), type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model3.model, - predicate InBounds0.in_bounds = InBounds1.in_bounds, predicate HasValue0.has_value = HasValue1.has_value, - predicate ResolveElswhere0.resolve_elswhere = ResolveElswhere1.resolve_elswhere, type Output0.output = Output1.output - clone Alloc_Vec_FromElem_Interface as FromElem1 with type t = (usize, usize), function Model0.model = Model3.model - clone CreuSat_Clause_Impl0_Index_Interface as Index1 with function Model0.model = Model2.model - clone CreuSat_Clause_Impl3_Len_Interface as Len1 with function Model0.model = Model2.model - clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve3 with type t = usize, function Model0.model = Model1.model, - predicate Resolve0.resolve = Resolve5.resolve + type a = Type.alloc_alloc_global + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = usize clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = usize, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - predicate ResolveElswhere0.resolve_elswhere = ResolveElswhere0.resolve_elswhere, type Output0.output = Output0.output - clone Alloc_Vec_Impl16_Index_Interface as Index3 with type t = usize, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - type Output0.output = Output0.output - clone Alloc_Vec_FromElem_Interface as FromElem0 with type t = usize, function Model0.model = Model1.model - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model - clone CreusotContracts_Logic_Model_Impl0_Model as Model8 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model4.model - clone CreuSat_Formula_Impl0_Index_Interface as Index0 with function Model0.model = Model8.model - clone CreuSat_Decision_Impl1_MakeLinkedList_Interface as MakeLinkedList0 with predicate Invariant0.invariant' = Invariant0.invariant', - function Model0.model = Model1.model, predicate Invariant1.invariant' = Invariant1.invariant', - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - let rec cfg new [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 82 4 82 40] (f : Type.creusat_formula_formula) : Type.creusat_decision_decisions - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 79 4 79 30] Invariant0.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 80 4 80 63] 0 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) && UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 81 4 81 45] Invariant1.invariant' result (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } + type a = Type.alloc_alloc_global + clone Alloc_Vec_Impl16_Index_Interface as Index3 with type t = usize, type i = usize, type a = Type.alloc_alloc_global + clone CreuSat_Lit_Impl1_Index_Interface as Index2 + clone CreuSat_Clause_Impl0_Index_Interface as Index1 + clone CreuSat_Clause_Impl3_Len_Interface as Len1 + clone CreuSat_Formula_Impl0_Index_Interface as Index0 + clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global + clone Alloc_Vec_FromElem_Interface as FromElem1 with type t = (usize, usize) + clone Alloc_Vec_FromElem_Interface as FromElem0 with type t = usize + let rec cfg new [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 82 4 82 40] (f : Type.creusat_formula_formula) : Type.creusat_decision_decisions + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 79 4 79 30] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 80 4 80 63] 0 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) && UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 81 4 81 45] Invariant1.invariant' result (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } = var _0 : Type.creusat_decision_decisions; @@ -9589,18 +9459,18 @@ module CreuSat_Decision_Impl1_New } BB0 { _3 <- Type.creusat_formula_formula_Formula_num_vars f_1; - lit_order_2 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 83 40 83 69] FromElem0.from_elem (0 : usize) _3); + lit_order_2 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 83 40 83 69] FromElem0.from_elem (0 : usize) _3); goto BB1 } BB1 { _5 <- Type.creusat_formula_formula_Formula_num_vars f_1; - counts_4 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 84 37 84 66] FromElem0.from_elem (0 : usize) _5); + counts_4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 84 37 84 66] FromElem0.from_elem (0 : usize) _5); goto BB2 } BB2 { _7 <- ((0 : usize), (0 : usize)); _8 <- Type.creusat_formula_formula_Formula_num_vars f_1; - counts_with_index_6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 85 57 85 91] FromElem1.from_elem _7 _8); + counts_with_index_6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 85 57 85 91] FromElem1.from_elem _7 _8); goto BB3 } BB3 { @@ -9611,15 +9481,15 @@ module CreuSat_Decision_Impl1_New goto BB5 } BB5 { - invariant i_bound { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 87 8 87 55] UInt64.to_int i_9 <= Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f_1)) }; - invariant counts_len1 { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 88 8 88 65] Seq.length (Model1.model counts_4) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; + invariant i_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 87 8 87 55] UInt64.to_int i_9 <= Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f_1)) }; + invariant counts_len1 { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 88 8 88 65] Seq.length (Model1.model counts_4) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; _13 <- i_9; _15 <- Type.creusat_formula_formula_Formula_clauses f_1; - _14 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 89 18 89 33] Len0.len _15); + _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 89 18 89 33] Len0.len _15); goto BB6 } BB6 { - _12 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 89 14 89 33] _13 < _14); + _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 89 14 89 33] _13 < _14); switch (_12) | False -> goto BB23 | _ -> goto BB7 @@ -9628,7 +9498,7 @@ module CreuSat_Decision_Impl1_New BB7 { _18 <- f_1; _19 <- i_9; - _17 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 90 31 90 35] Index0.index _18 _19); + _17 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 90 31 90 35] Index0.index _18 _19); goto BB8 } BB8 { @@ -9640,16 +9510,16 @@ module CreuSat_Decision_Impl1_New goto BB10 } BB10 { - invariant i_bound2 { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 92 12 92 60] UInt64.to_int i_9 <= Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f_1)) }; - invariant j_bound { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 93 12 93 61] UInt64.to_int j_20 <= Seq.length (Model2.model curr_clause_16) }; - invariant counts_len { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 94 12 94 68] Seq.length (Model1.model counts_4) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; + invariant i_bound2 { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 92 12 92 60] UInt64.to_int i_9 <= Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f_1)) }; + invariant j_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 93 12 93 61] UInt64.to_int j_20 <= Seq.length (Model2.model curr_clause_16) }; + invariant counts_len { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 94 12 94 68] Seq.length (Model1.model counts_4) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; _23 <- j_20; _25 <- curr_clause_16; - _24 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 95 22 95 39] Len1.len _25); + _24 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 95 22 95 39] Len1.len _25); goto BB11 } BB11 { - _22 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 95 18 95 39] _23 < _24); + _22 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 95 18 95 39] _23 < _24); switch (_22) | False -> goto BB22 | _ -> goto BB12 @@ -9659,22 +9529,22 @@ module CreuSat_Decision_Impl1_New _30 <- counts_4; _34 <- curr_clause_16; _35 <- j_20; - _33 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 98 26 98 40] Index1.index _34 _35); + _33 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 98 26 98 40] Index1.index _34 _35); goto BB13 } BB13 { _32 <- _33; - _31 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 98 26 98 48] Index2.index _32); + _31 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 98 26 98 48] Index2.index _32); goto BB14 } BB14 { - _29 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 98 19 98 49] Index3.index _30 _31); + _29 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 98 19 98 49] Index3.index _30 _31); goto BB15 } BB15 { _28 <- _29; - _36 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 98 52 98 66] (18446744073709551615 : usize) - (1 : usize)); - _27 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 98 19 98 66] _28 < _36); + _36 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 98 52 98 66] (18446744073709551615 : usize) - (1 : usize)); + _27 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 98 19 98 66] _28 < _36); switch (_27) | False -> goto BB20 | _ -> goto BB16 @@ -9685,20 +9555,20 @@ module CreuSat_Decision_Impl1_New counts_4 <- ^ _38; _42 <- curr_clause_16; _43 <- j_20; - _41 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 99 27 99 41] Index1.index _42 _43); + _41 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 99 27 99 41] Index1.index _42 _43); goto BB17 } BB17 { _40 <- _41; - _39 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 99 27 99 49] Index2.index _40); + _39 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 99 27 99 49] Index2.index _40); goto BB18 } BB18 { - _37 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 99 20 99 50] IndexMut0.index_mut _38 _39); + _37 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 99 20 99 50] IndexMut0.index_mut _38 _39); goto BB19 } BB19 { - _37 <- { _37 with current = ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 99 20 99 55] * _37 + (1 : usize)) }; + _37 <- { _37 with current = ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 99 20 99 55] * _37 + (1 : usize)) }; assume { Resolve0.resolve _37 }; _26 <- (); goto BB21 @@ -9708,13 +9578,13 @@ module CreuSat_Decision_Impl1_New goto BB21 } BB21 { - j_20 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 101 16 101 22] j_20 + (1 : usize)); + j_20 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 101 16 101 22] j_20 + (1 : usize)); _11 <- (); goto BB10 } BB22 { _21 <- (); - i_9 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 103 12 103 18] i_9 + (1 : usize)); + i_9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 103 12 103 18] i_9 + (1 : usize)); _11 <- (); goto BB5 } @@ -9730,12 +9600,12 @@ module CreuSat_Decision_Impl1_New goto BB26 } BB26 { - invariant i_bound { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 106 8 106 48] UInt64.to_int i_9 <= UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; - invariant counts_with_idx_len { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 107 8 107 84] Seq.length (Model3.model counts_with_index_6) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; - invariant second_ok { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 108 8 109 54] forall j : (int) . 0 <= j && j < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) -> UInt64.to_int (let (_, a) = Seq.get (Model3.model counts_with_index_6) j in a) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; + invariant i_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 106 8 106 48] UInt64.to_int i_9 <= UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; + invariant counts_with_idx_len { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 107 8 107 84] Seq.length (Model3.model counts_with_index_6) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; + invariant second_ok { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 108 8 109 54] forall j : (int) . 0 <= j && j < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) -> UInt64.to_int (let (_, a) = Seq.get (Model3.model counts_with_index_6) j in a) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; _52 <- i_9; _53 <- Type.creusat_formula_formula_Formula_num_vars f_1; - _51 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 110 14 110 28] _52 < _53); + _51 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 110 14 110 28] _52 < _53); switch (_51) | False -> goto BB30 | _ -> goto BB27 @@ -9744,7 +9614,7 @@ module CreuSat_Decision_Impl1_New BB27 { _56 <- counts_4; _57 <- i_9; - _55 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 111 36 111 45] Index3.index _56 _57); + _55 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 111 36 111 45] Index3.index _56 _57); goto BB28 } BB28 { @@ -9753,13 +9623,13 @@ module CreuSat_Decision_Impl1_New _60 <- borrow_mut counts_with_index_6; counts_with_index_6 <- ^ _60; _61 <- i_9; - _59 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 111 12 111 32] IndexMut1.index_mut _60 _61); + _59 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 111 12 111 32] IndexMut1.index_mut _60 _61); goto BB29 } BB29 { _59 <- { _59 with current = (_54, _58) }; assume { Resolve1.resolve _59 }; - i_9 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 112 12 112 18] i_9 + (1 : usize)); + i_9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 112 12 112 18] i_9 + (1 : usize)); _11 <- (); goto BB26 } @@ -9769,12 +9639,12 @@ module CreuSat_Decision_Impl1_New counts_with_index_6 <- ^ _67; _66 <- borrow_mut ( * _67); _67 <- { _67 with current = ( ^ _66) }; - _65 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 114 8 114 44] SortReverse0.sort_reverse _66); + _65 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 114 8 114 44] SortReverse0.sort_reverse _66); goto BB31 } BB31 { assume { Resolve2.resolve _67 }; - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 115 8 116 53] forall j : (int) . 0 <= j && j < Seq.length (Model3.model counts_with_index_6) -> UInt64.to_int (let (_, a) = Seq.get (Model3.model counts_with_index_6) j in a) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 115 8 116 53] forall j : (int) . 0 <= j && j < Seq.length (Model3.model counts_with_index_6) -> UInt64.to_int (let (_, a) = Seq.get (Model3.model counts_with_index_6) j in a) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; goto BB32 } BB32 { @@ -9789,12 +9659,12 @@ module CreuSat_Decision_Impl1_New goto BB35 } BB35 { - invariant i_bound { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 118 8 118 59] 0 <= UInt64.to_int i_9 && UInt64.to_int i_9 <= UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; - invariant lit_order_len { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 119 8 119 70] Seq.length (Model1.model lit_order_2) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; - invariant second_ok { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 120 8 121 44] forall j : (int) . 0 <= j && j < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) -> UInt64.to_int (Seq.get (Model1.model lit_order_2) j) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; + invariant i_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 118 8 118 59] 0 <= UInt64.to_int i_9 && UInt64.to_int i_9 <= UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; + invariant lit_order_len { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 119 8 119 70] Seq.length (Model1.model lit_order_2) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; + invariant second_ok { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 120 8 121 44] forall j : (int) . 0 <= j && j < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) -> UInt64.to_int (Seq.get (Model1.model lit_order_2) j) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; _71 <- i_9; _72 <- Type.creusat_formula_formula_Formula_num_vars f_1; - _70 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 122 14 122 28] _71 < _72); + _70 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 122 14 122 28] _71 < _72); switch (_70) | False -> goto BB39 | _ -> goto BB36 @@ -9803,7 +9673,7 @@ module CreuSat_Decision_Impl1_New BB36 { _75 <- counts_with_index_6; _76 <- i_9; - _74 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 123 27 123 47] Index4.index _75 _76); + _74 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 123 27 123 47] Index4.index _75 _76); goto BB37 } BB37 { @@ -9811,13 +9681,13 @@ module CreuSat_Decision_Impl1_New _78 <- borrow_mut lit_order_2; lit_order_2 <- ^ _78; _79 <- i_9; - _77 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 123 12 123 24] IndexMut0.index_mut _78 _79); + _77 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 123 12 123 24] IndexMut0.index_mut _78 _79); goto BB38 } BB38 { _77 <- { _77 with current = _73 }; assume { Resolve0.resolve _77 }; - i_9 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 124 12 124 18] i_9 + (1 : usize)); + i_9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 124 12 124 18] i_9 + (1 : usize)); _11 <- (); goto BB35 } @@ -9826,7 +9696,7 @@ module CreuSat_Decision_Impl1_New _83 <- f_1; assume { Resolve3.resolve _84 }; _84 <- lit_order_2; - _0 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 126 8 126 44] MakeLinkedList0.make_linked_list _83 _84); + _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 126 8 126 44] MakeLinkedList0.make_linked_list _83 _84); goto BB40 } BB40 { @@ -9856,10 +9726,10 @@ module CreuSat_Logic_LogicAssignments_Impl1_Complete use seq.Seq clone CreuSat_Logic_Logic_Unset_Interface as Unset0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - predicate complete [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_assignments.rs" 55 4 55 33] (self : Type.creusat_assignments_assignments) + predicate complete [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 55 4 55 33] (self : Type.creusat_assignments_assignments) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_assignments.rs" 56 8 58 9] forall i : (int) . 0 <= i && i < Seq.length (Model0.model self) -> not Unset0.unset (Seq.get (Model0.model self) i) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 56 8 58 9] forall i : (int) . 0 <= i && i < Seq.length (Model0.model self) -> not Unset0.unset (Seq.get (Model0.model self) i) end module CreuSat_Decision_Impl1_GetNext_Interface use mach.int.UInt64 @@ -9867,18 +9737,17 @@ module CreuSat_Decision_Impl1_GetNext_Interface use mach.int.Int use prelude.Prelude use seq.Seq + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy clone CreuSat_Logic_LogicAssignments_Impl1_Complete_Interface as Complete0 clone CreuSat_Logic_Logic_Unset_Interface as Unset0 - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments clone CreuSat_Logic_LogicAssignments_Impl1_Invariant_Interface as Invariant1 clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant0 val get_next [@cfg:stackify] (self : borrowed (Type.creusat_decision_decisions)) (a : Type.creusat_assignments_assignments) (_f : Type.creusat_formula_formula) : Type.core_option_option usize - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 232 4 232 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 233 4 233 33] Invariant1.invariant' a _f} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 232 4 232 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 234 4 237 7] match (result) with + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 232 4 232 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 233 4 233 33] Invariant1.invariant' a _f} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 232 4 232 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 234 4 237 7] match (result) with | Type.Core_Option_Option_Some k -> UInt64.to_int k < Seq.length (Model0.model a) && Unset0.unset (Seq.get (Model0.model a) (UInt64.to_int k)) | Type.Core_Option_Option_None -> Complete0.complete a end } @@ -9892,34 +9761,35 @@ module CreuSat_Decision_Impl1_GetNext use seq.Seq use mach.int.Int32 use prelude.UInt8 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model0.model = Model3.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant1 with function Model0.model = Model2.model - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_Impl1_Complete as Complete0 with function Model0.model = Model2.model, - predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model2.model + clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model2.model, axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model0.model = Invariant1.model, + function Model0.model = Model0.model, function Model0.model = Complete0.model clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant0 with function Model0.model = Model1.model - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_decision_decisions + type a = Type.alloc_alloc_global, function Model0.model = Invariant0.model, axiom . + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = Complete0.unset + clone CreuSat_Logic_LogicAssignments_Impl1_Complete as Complete0 + clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_assignments_assignments + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant1 + clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant0 clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_decision_node - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_decision_node - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_decision_node - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_decision_node - clone CreuSat_Assignments_Impl2_Len_Interface as Len0 with function Model0.model = Model0.model - clone CreuSat_Assignments_Impl0_Index_Interface as Index0 with function Model0.model = Model0.model + clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_decision_node, + type Output0.output = Index1.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_decision_node, + predicate HasValue0.has_value = Index1.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_decision_node, + predicate InBounds0.in_bounds = Index1.in_bounds + clone CreuSat_Assignments_Impl2_Len_Interface as Len0 + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_decision_decisions clone Alloc_Vec_Impl16_Index_Interface as Index1 with type t = Type.creusat_decision_node, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - type Output0.output = Output0.output - let rec cfg get_next [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 238 4 238 78] (self : borrowed (Type.creusat_decision_decisions)) (a : Type.creusat_assignments_assignments) (_f : Type.creusat_formula_formula) : Type.core_option_option usize - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 232 4 232 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 233 4 233 33] Invariant1.invariant' a _f} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 232 4 232 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 234 4 237 7] match (result) with + type a = Type.alloc_alloc_global + clone CreuSat_Assignments_Impl0_Index_Interface as Index0 + let rec cfg get_next [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 238 4 238 78] (self : borrowed (Type.creusat_decision_decisions)) (a : Type.creusat_assignments_assignments) (_f : Type.creusat_formula_formula) : Type.core_option_option usize + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 232 4 232 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 233 4 233 33] Invariant1.invariant' a _f} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 232 4 232 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 234 4 237 7] match (result) with | Type.Core_Option_Option_Some k -> UInt64.to_int k < Seq.length (Model0.model a) && Unset0.unset (Seq.get (Model0.model a) (UInt64.to_int k)) | Type.Core_Option_Option_None -> Complete0.complete a end } @@ -9984,10 +9854,10 @@ module CreuSat_Decision_Impl1_GetNext goto BB1 } BB1 { - invariant inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 241 8 241 67] curr_5 = (18446744073709551615 : usize) || UInt64.to_int curr_5 < Seq.length (Model0.model a_2) }; + invariant inv { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 241 8 241 67] curr_5 = (18446744073709551615 : usize) || UInt64.to_int curr_5 < Seq.length (Model0.model a_2) }; _9 <- curr_5; _10 <- iNVALID'_4; - _8 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 242 14 242 29] _9 <> _10); + _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 242 14 242 29] _9 <> _10); switch (_8) | False -> goto BB8 | _ -> goto BB2 @@ -9996,12 +9866,12 @@ module CreuSat_Decision_Impl1_GetNext BB2 { _15 <- a_2; _16 <- curr_5; - _14 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 243 15 243 22] Index0.index _15 _16); + _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 243 15 243 22] Index0.index _15 _16); goto BB3 } BB3 { _13 <- _14; - _12 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 243 15 243 27] _13 >= (2 : uint8)); + _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 243 15 243 27] _13 >= (2 : uint8)); switch (_12) | False -> goto BB6 | _ -> goto BB4 @@ -10010,7 +9880,7 @@ module CreuSat_Decision_Impl1_GetNext BB4 { _20 <- Type.creusat_decision_decisions_Decisions_linked_list ( * self_1); _21 <- curr_5; - _19 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 244 30 244 52] Index1.index _20 _21); + _19 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 244 30 244 52] Index1.index _20 _21); goto BB5 } BB5 { @@ -10025,7 +9895,7 @@ module CreuSat_Decision_Impl1_GetNext _11 <- (); _25 <- Type.creusat_decision_decisions_Decisions_linked_list ( * self_1); _26 <- curr_5; - _24 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 247 19 247 41] Index1.index _25 _26); + _24 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 247 19 247 41] Index1.index _25 _26); goto BB7 } BB7 { @@ -10041,14 +9911,14 @@ module CreuSat_Decision_Impl1_GetNext goto BB9 } BB9 { - invariant prev { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 252 8 252 79] forall j : (int) . 0 <= j && j < UInt64.to_int i_30 -> not Unset0.unset (Seq.get (Model0.model a_2) j) }; + invariant prev { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 252 8 252 79] forall j : (int) . 0 <= j && j < UInt64.to_int i_30 -> not Unset0.unset (Seq.get (Model0.model a_2) j) }; _33 <- i_30; _35 <- a_2; - _34 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 253 18 253 25] Len0.len _35); + _34 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 253 18 253 25] Len0.len _35); goto BB10 } BB10 { - _32 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 253 14 253 25] _33 < _34); + _32 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 253 14 253 25] _33 < _34); switch (_32) | False -> goto BB15 | _ -> goto BB11 @@ -10057,12 +9927,12 @@ module CreuSat_Decision_Impl1_GetNext BB11 { _40 <- a_2; _41 <- i_30; - _39 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 254 15 254 19] Index0.index _40 _41); + _39 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 254 15 254 19] Index0.index _40 _41); goto BB12 } BB12 { _38 <- _39; - _37 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 254 15 254 24] _38 >= (2 : uint8)); + _37 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 254 15 254 24] _38 >= (2 : uint8)); switch (_37) | False -> goto BB14 | _ -> goto BB13 @@ -10075,7 +9945,7 @@ module CreuSat_Decision_Impl1_GetNext } BB14 { _36 <- (); - i_30 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/decision.rs" 257 12 257 18] i_30 + (1 : usize)); + i_30 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 257 12 257 18] i_30 + (1 : usize)); _7 <- (); goto BB9 } @@ -10099,16 +9969,15 @@ module CreuSat_Formula_Impl1_IndexMut_Interface use mach.int.Int32 use prelude.Prelude use Type + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy clone CreuSat_Logic_LogicFormula_Impl0_Model_Interface as Model1 - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_formula_formula val index_mut [@cfg:stackify] (self : borrowed (Type.creusat_formula_formula)) (ix : usize) : borrowed (Type.creusat_clause_clause) - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 43 4 43 38] UInt64.to_int ix < Seq.length (let (a, _) = Model0.model self in a)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 44 4 44 42] Seq.get (let (a, _) = Model1.model ( * self) in a) (UInt64.to_int ix) = * result } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 45 4 45 42] Seq.get (let (a, _) = Model1.model ( ^ self) in a) (UInt64.to_int ix) = ^ result } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 46 4 46 107] forall i : (int) . 0 <= i && i <> UInt64.to_int ix && i < Seq.length (let (a, _) = Model0.model self in a) -> Seq.get (let (a, _) = Model0.model self in a) i = Seq.get (let (a, _) = Model1.model ( ^ self) in a) i } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 47 4 47 52] Seq.length (let (a, _) = Model1.model ( ^ self) in a) = Seq.length (let (a, _) = Model1.model ( * self) in a) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 43 4 43 38] UInt64.to_int ix < Seq.length (let (a, _) = Model0.model self in a)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 44 4 44 42] Seq.get (let (a, _) = Model1.model ( * self) in a) (UInt64.to_int ix) = * result } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 45 4 45 42] Seq.get (let (a, _) = Model1.model ( ^ self) in a) (UInt64.to_int ix) = ^ result } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 46 4 46 107] forall i : (int) . 0 <= i && i <> UInt64.to_int ix && i < Seq.length (let (a, _) = Model0.model self in a) -> Seq.get (let (a, _) = Model0.model self in a) i = Seq.get (let (a, _) = Model1.model ( ^ self) in a) i } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 47 4 47 52] Seq.length (let (a, _) = Model1.model ( ^ self) in a) = Seq.length (let (a, _) = Model1.model ( * self) in a) } end module CreuSat_Formula_Impl1_IndexMut @@ -10119,28 +9988,29 @@ module CreuSat_Formula_Impl1_IndexMut use prelude.Prelude use Type clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_clause_clause + type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Model0.model + clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_formula_formula clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_clause_clause - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula + clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause, + type Output0.output = IndexMut0.output + clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.creusat_clause_clause, + predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause, + predicate HasValue0.has_value = IndexMut0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause, + predicate InBounds0.in_bounds = IndexMut0.in_bounds + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_clause_clause clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.creusat_clause_clause, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model2.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - predicate ResolveElswhere0.resolve_elswhere = ResolveElswhere0.resolve_elswhere, type Output0.output = Output0.output - let rec cfg index_mut [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 48 4 48 53] (self : borrowed (Type.creusat_formula_formula)) (ix : usize) : borrowed (Type.creusat_clause_clause) - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 43 4 43 38] UInt64.to_int ix < Seq.length (let (a, _) = Model0.model self in a)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 44 4 44 42] Seq.get (let (a, _) = Model1.model ( * self) in a) (UInt64.to_int ix) = * result } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 45 4 45 42] Seq.get (let (a, _) = Model1.model ( ^ self) in a) (UInt64.to_int ix) = ^ result } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 46 4 46 107] forall i : (int) . 0 <= i && i <> UInt64.to_int ix && i < Seq.length (let (a, _) = Model0.model self in a) -> Seq.get (let (a, _) = Model0.model self in a) i = Seq.get (let (a, _) = Model1.model ( ^ self) in a) i } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 47 4 47 52] Seq.length (let (a, _) = Model1.model ( ^ self) in a) = Seq.length (let (a, _) = Model1.model ( * self) in a) } + type a = Type.alloc_alloc_global + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula + let rec cfg index_mut [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 48 4 48 53] (self : borrowed (Type.creusat_formula_formula)) (ix : usize) : borrowed (Type.creusat_clause_clause) + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 43 4 43 38] UInt64.to_int ix < Seq.length (let (a, _) = Model0.model self in a)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 44 4 44 42] Seq.get (let (a, _) = Model1.model ( * self) in a) (UInt64.to_int ix) = * result } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 45 4 45 42] Seq.get (let (a, _) = Model1.model ( ^ self) in a) (UInt64.to_int ix) = ^ result } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 46 4 46 107] forall i : (int) . 0 <= i && i <> UInt64.to_int ix && i < Seq.length (let (a, _) = Model0.model self in a) -> Seq.get (let (a, _) = Model0.model self in a) i = Seq.get (let (a, _) = Model1.model ( ^ self) in a) i } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 47 4 47 52] Seq.length (let (a, _) = Model1.model ( ^ self) in a) = Seq.length (let (a, _) = Model1.model ( * self) in a) } = var _0 : borrowed (Type.creusat_clause_clause); @@ -10161,7 +10031,7 @@ module CreuSat_Formula_Impl1_IndexMut self_1 <- { self_1 with current = (let Type.CreuSat_Formula_Formula a b = * self_1 in Type.CreuSat_Formula_Formula ( ^ _6) b) }; assume { Resolve0.resolve self_1 }; _7 <- ix_2; - _5 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 54 13 54 29] IndexMut0.index_mut _6 _7); + _5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 54 13 54 29] IndexMut0.index_mut _6 _7); goto BB1 } BB1 { @@ -10185,18 +10055,16 @@ module CreuSat_Formula_Impl2_CheckFormulaInvariant_Interface use mach.int.UInt64 use prelude.Prelude use prelude.UInt8 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . - clone CreuSat_Logic_LogicFormula_Impl1_NotSatisfiable_Interface as NotSatisfiable0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface as NotSatisfiable0 clone CreuSat_Logic_LogicFormula_FormulaSatInner_Interface as FormulaSatInner0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_formula_formula val check_formula_invariant [@cfg:stackify] (self : Type.creusat_formula_formula) : Type.creusat_solver_satresult - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 60 4 65 7] match (result) with + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 60 4 65 7] match (result) with | Type.CreuSat_Solver_SatResult_Sat assn -> FormulaSatInner0.formula_sat_inner (Model0.model self) (Model1.model assn) | Type.CreuSat_Solver_SatResult_Unsat -> NotSatisfiable0.not_satisfiable self | Type.CreuSat_Solver_SatResult_Unknown -> Invariant0.invariant' self && 0 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self) && UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self) < div 18446744073709551615 2 @@ -10212,64 +10080,59 @@ module CreuSat_Formula_Impl2_CheckFormulaInvariant use prelude.Prelude use seq.Seq use prelude.UInt8 - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant2 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant2.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = SatInner1.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = Invariant2.index_logic + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant2 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = SatInner0.sat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model3 with function Model0.model = Model5.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner0 with function Model0.model = Model3.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant1 with function Model0.model = Model3.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant1.invariant', - function Model0.model = Model3.model + type a = Type.alloc_alloc_global, function Model0.model = Model3.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model3 with function Model0.model = NotSatisfiable0.model, + function Model0.model = Invariant1.model, function Model0.model = SatInner0.model, + function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner + clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss0.formula_sat_inner + clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtension0.equisat_extension_inner + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant1.invariant_internal + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant1 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model2.model, - predicate Invariant0.invariant' = Invariant1.invariant', function Model1.model = Model3.model - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model4 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with function Model0.model = Model4.model, - predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner - clone CreuSat_Logic_LogicFormula_Impl1_NotSatisfiable as NotSatisfiable0 with function Model0.model = Model3.model, - predicate EquisatExtension0.equisat_extension = EquisatExtension0.equisat_extension - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model4.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . + type a = Type.alloc_alloc_global, function Model0.model = Model4.model, + function Model0.model = InvariantMirror0.model, axiom . + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model4 with function Model0.model = Model0.model, + function Model0.model = Invariant0.model, function Model0.model = EquisatExtension0.model + clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with predicate EquisatExtension0.equisat_extension = NotSatisfiable0.equisat_extension + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable as NotSatisfiable0 clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model4.model - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy2 - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_clause_clause - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause + clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_formula_formula + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy2 with type ModelTy0.modelTy = Model6.modelTy clone CreusotContracts_Logic_Model_Impl0_Model as Model6 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy2.modelTy, function Model0.model = Model3.model - clone CreuSat_Clause_Impl3_Len_Interface as Len1 with function Model0.model = Model6.model - clone CreuSat_Clause_Impl3_CheckClauseInvariant_Interface as CheckClauseInvariant0 with predicate Invariant0.invariant' = Invariant1.invariant' + function Model0.model = Len1.model + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_clause_clause + clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause, + type Output0.output = Index0.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause, + predicate HasValue0.has_value = Index0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause, + predicate InBounds0.in_bounds = Index0.in_bounds + clone CreuSat_Clause_Impl3_Len_Interface as Len1 + clone CreuSat_Clause_Impl3_CheckClauseInvariant_Interface as CheckClauseInvariant0 clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.creusat_clause_clause, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model2.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - type Output0.output = Output0.output - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = Model2.model - clone Alloc_Vec_Impl0_New_Interface as New0 with type t = uint8, function Model0.model = Model1.model - let rec cfg check_formula_invariant [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 66 4 66 54] (self : Type.creusat_formula_formula) : Type.creusat_solver_satresult - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 60 4 65 7] match (result) with + type a = Type.alloc_alloc_global + clone Alloc_Vec_Impl0_New_Interface as New0 with type t = uint8 + clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global + let rec cfg check_formula_invariant [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 66 4 66 54] (self : Type.creusat_formula_formula) : Type.creusat_solver_satresult + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 60 4 65 7] match (result) with | Type.CreuSat_Solver_SatResult_Sat assn -> FormulaSatInner0.formula_sat_inner (Model0.model self) (Model1.model assn) | Type.CreuSat_Solver_SatResult_Unsat -> NotSatisfiable0.not_satisfiable self | Type.CreuSat_Solver_SatResult_Unknown -> Invariant0.invariant' self && 0 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self) && UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self) < div 18446744073709551615 2 @@ -10328,13 +10191,13 @@ module CreuSat_Formula_Impl2_CheckFormulaInvariant } BB0 { _4 <- Type.creusat_formula_formula_Formula_num_vars self_1; - _6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 67 28 67 42] (2 : usize) = (0 : usize)); + _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 67 28 67 42] (2 : usize) = (0 : usize)); assert { not _6 }; goto BB1 } BB1 { - _5 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 67 28 67 42] (18446744073709551615 : usize) / (2 : usize)); - _3 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 67 11 67 42] _4 >= _5); + _5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 67 28 67 42] (18446744073709551615 : usize) / (2 : usize)); + _3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 67 11 67 42] _4 >= _5); switch (_3) | False -> goto BB3 | _ -> goto BB2 @@ -10347,18 +10210,18 @@ module CreuSat_Formula_Impl2_CheckFormulaInvariant BB3 { _2 <- (); _11 <- Type.creusat_formula_formula_Formula_clauses self_1; - _10 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 70 11 70 29] Len0.len _11); + _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 70 11 70 29] Len0.len _11); goto BB4 } BB4 { - _9 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 70 11 70 34] _10 = (0 : usize)); + _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 70 11 70 34] _10 = (0 : usize)); switch (_9) | False -> goto BB8 | _ -> goto BB5 end } BB5 { - _13 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 71 34 71 44] New0.new ()); + _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 71 34 71 44] New0.new ()); goto BB6 } BB6 { @@ -10371,7 +10234,7 @@ module CreuSat_Formula_Impl2_CheckFormulaInvariant BB8 { _8 <- (); _16 <- Type.creusat_formula_formula_Formula_num_vars self_1; - _15 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 73 11 73 29] _16 = (0 : usize)); + _15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 73 11 73 29] _16 = (0 : usize)); switch (_15) | False -> goto BB10 | _ -> goto BB9 @@ -10387,15 +10250,15 @@ module CreuSat_Formula_Impl2_CheckFormulaInvariant goto BB11 } BB11 { - invariant inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 77 8 77 107] forall j : (int) . 0 <= j && j < UInt64.to_int i_18 -> Invariant1.invariant' (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses self_1)) j) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self_1)) }; - invariant clause_len { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 78 8 78 101] forall j : (int) . 0 <= j && j < UInt64.to_int i_18 -> Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses self_1)) j)) > 0 }; + invariant inv { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 77 8 77 107] forall j : (int) . 0 <= j && j < UInt64.to_int i_18 -> Invariant1.invariant' (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses self_1)) j) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self_1)) }; + invariant clause_len { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 78 8 78 101] forall j : (int) . 0 <= j && j < UInt64.to_int i_18 -> Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses self_1)) j)) > 0 }; _22 <- i_18; _24 <- Type.creusat_formula_formula_Formula_clauses self_1; - _23 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 79 18 79 36] Len0.len _24); + _23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 79 18 79 36] Len0.len _24); goto BB12 } BB12 { - _21 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 79 14 79 36] _22 < _23); + _21 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 79 14 79 36] _22 < _23); switch (_21) | False -> goto BB22 | _ -> goto BB13 @@ -10404,13 +10267,13 @@ module CreuSat_Formula_Impl2_CheckFormulaInvariant BB13 { _30 <- Type.creusat_formula_formula_Formula_clauses self_1; _31 <- i_18; - _29 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 80 16 80 31] Index0.index _30 _31); + _29 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 80 16 80 31] Index0.index _30 _31); goto BB14 } BB14 { _28 <- _29; _32 <- Type.creusat_formula_formula_Formula_num_vars self_1; - _27 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 80 16 80 69] CheckClauseInvariant0.check_clause_invariant _28 _32); + _27 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 80 16 80 69] CheckClauseInvariant0.check_clause_invariant _28 _32); goto BB15 } BB15 { @@ -10428,16 +10291,16 @@ module CreuSat_Formula_Impl2_CheckFormulaInvariant _25 <- (); _39 <- Type.creusat_formula_formula_Formula_clauses self_1; _40 <- i_18; - _38 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 83 15 83 30] Index0.index _39 _40); + _38 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 83 15 83 30] Index0.index _39 _40); goto BB18 } BB18 { _37 <- _38; - _36 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 83 15 83 36] Len1.len _37); + _36 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 83 15 83 36] Len1.len _37); goto BB19 } BB19 { - _35 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 83 15 83 41] _36 = (0 : usize)); + _35 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 83 15 83 41] _36 = (0 : usize)); switch (_35) | False -> goto BB21 | _ -> goto BB20 @@ -10449,7 +10312,7 @@ module CreuSat_Formula_Impl2_CheckFormulaInvariant } BB21 { _34 <- (); - i_18 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 86 12 86 18] i_18 + (1 : usize)); + i_18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 86 12 86 18] i_18 + (1 : usize)); _20 <- (); goto BB11 } @@ -10474,23 +10337,22 @@ module CreuSat_Logic_LogicClause_Impl2_Sat use Type clone CreuSat_Logic_LogicClause_Impl2_SatInner_Interface as SatInner0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - predicate sat [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 166 4 166 44] (self : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) + predicate sat [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 166 4 166 44] (self : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 167 8 169 9] SatInner0.sat_inner self (Model0.model a) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 167 8 169 9] SatInner0.sat_inner self (Model0.model a) end module CreuSat_Lit_Impl1_LitSat_Interface use seq.Seq use Type use prelude.Prelude + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy clone CreuSat_Logic_LogicLit_Impl1_Sat_Interface as Sat0 clone CreuSat_Logic_LogicLit_Impl1_Invariant_Interface as Invariant0 - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments val lit_sat [@cfg:stackify] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) : bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 51 4 51 43] Invariant0.invariant' self (Seq.length (Model0.model a))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 52 4 52 38] result = Sat0.sat self a } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 51 4 51 43] Invariant0.invariant' self (Seq.length (Model0.model a))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 52 4 52 38] result = Sat0.sat self a } end module CreuSat_Lit_Impl1_LitSat @@ -10499,25 +10361,25 @@ module CreuSat_Lit_Impl1_LitSat use prelude.Prelude use mach.int.Int use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model1.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = Invariant0.index_logic, + function IndexLogic0.index_logic = SatInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model0.model, + function Model0.model = Sat0.model + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant0 + clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_assignments_assignments use mach.int.UInt64 - clone CreuSat_Lit_Impl1_IsPositive_Interface as IsPositive0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic - clone CreuSat_Lit_Impl1_Index_Interface as Index0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Assignments_Impl0_Index_Interface as Index1 with function Model0.model = Model0.model - let rec cfg lit_sat [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 53 4 53 49] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) : bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 51 4 51 43] Invariant0.invariant' self (Seq.length (Model0.model a))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 52 4 52 38] result = Sat0.sat self a } + clone CreuSat_Assignments_Impl0_Index_Interface as Index1 + clone CreuSat_Lit_Impl1_Index_Interface as Index0 + clone CreuSat_Lit_Impl1_IsPositive_Interface as IsPositive0 + let rec cfg lit_sat [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 53 4 53 49] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) : bool + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 51 4 51 43] Invariant0.invariant' self (Seq.length (Model0.model a))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 52 4 52 38] result = Sat0.sat self a } = var _0 : bool; @@ -10542,7 +10404,7 @@ module CreuSat_Lit_Impl1_LitSat } BB0 { _4 <- self_1; - _3 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 54 14 54 32] IsPositive0.is_positive _4); + _3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 54 14 54 32] IsPositive0.is_positive _4); goto BB1 } BB1 { @@ -10554,31 +10416,31 @@ module CreuSat_Lit_Impl1_LitSat BB2 { _12 <- a_2; _14 <- self_1; - _13 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 56 24 56 36] Index0.index _14); + _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 56 24 56 36] Index0.index _14); goto BB6 } BB3 { _7 <- a_2; _9 <- self_1; - _8 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 55 23 55 35] Index0.index _9); + _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 55 23 55 35] Index0.index _9); goto BB4 } BB4 { - _6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 55 21 55 36] Index1.index _7 _8); + _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 55 21 55 36] Index1.index _7 _8); goto BB5 } BB5 { _5 <- _6; - _0 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 55 20 55 42] _5 = (1 : uint8)); + _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 55 20 55 42] _5 = (1 : uint8)); goto BB8 } BB6 { - _11 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 56 22 56 37] Index1.index _12 _13); + _11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 56 22 56 37] Index1.index _12 _13); goto BB7 } BB7 { _10 <- _11; - _0 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 56 21 56 43] _10 = (0 : uint8)); + _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 56 21 56 43] _10 = (0 : uint8)); goto BB8 } BB8 { @@ -10592,18 +10454,17 @@ module CreuSat_Formula_Impl2_IsClauseSat_Interface use mach.int.Int use prelude.Prelude use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror clone CreuSat_Logic_LogicClause_Impl2_Sat_Interface as Sat0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . clone CreuSat_Logic_LogicAssignments_Impl1_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val is_clause_sat [@cfg:stackify] (self : Type.creusat_formula_formula) (idx : usize) (a : Type.creusat_assignments_assignments) : bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 92 4 92 33] Invariant0.invariant' self} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 93 4 93 35] Invariant1.invariant' a self} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 94 4 94 45] UInt64.to_int idx < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 95 4 95 55] result = Sat0.sat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) (UInt64.to_int idx)) a } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 92 4 92 33] Invariant0.invariant' self} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 93 4 93 35] Invariant1.invariant' a self} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 94 4 94 45] UInt64.to_int idx < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 95 4 95 55] result = Sat0.sat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) (UInt64.to_int idx)) a } end module CreuSat_Formula_Impl2_IsClauseSat @@ -10614,62 +10475,60 @@ module CreuSat_Formula_Impl2_IsClauseSat use Type use mach.int.Int32 use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant3.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = SatInner1.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = Invariant3.index_logic + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant2.invariant_internal + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model4 with function Model0.model = Model6.model - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with function Model0.model = Model4.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant2.invariant', - function Model0.model = Model4.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner0 with function Model0.model = Model4.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model3 with function Model0.model = Model5.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat1 with function Model0.model = Model3.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicClause_Impl2_Sat as Sat0 with function Model0.model = Model3.model, + type a = Type.alloc_alloc_global, function Model0.model = Model4.model, axiom . + clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model3.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model4 with function Model0.model = Model1.model, + function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, + function Model0.model = SatInner0.model, function Model0.model = Invariant2.model + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat1.sat_inner, predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant1 with function Model0.model = Model3.model - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model1 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model4.model + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model1.modelTy + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model3 with function Model0.model = Invariant1.model, + function Model0.model = Sat0.model, function Model0.model = Sat1.model + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model0.model, - predicate Invariant0.invariant' = Invariant2.invariant', function Model1.model = Model4.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model2.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy2 - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_clause_clause - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause + type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, + function Model0.model = Model2.model, axiom . + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Invariant0.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat1 + clone CreusotContracts_Logic_Model_Impl0_Model as Model1 with type t = Type.creusat_clause_clause + clone CreuSat_Logic_LogicClause_Impl2_Sat as Sat0 + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy2 with type ModelTy0.modelTy = Model7.modelTy clone CreusotContracts_Logic_Model_Impl0_Model as Model7 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy2.modelTy, function Model0.model = Model3.model - clone CreuSat_Lit_Impl1_LitSat_Interface as LitSat0 with function Model0.model = Model7.model, - predicate Invariant0.invariant' = Invariant3.invariant', predicate Sat0.sat = Sat1.sat - clone CreuSat_Clause_Impl0_Index_Interface as Index1 with function Model0.model = Model1.model - clone CreuSat_Clause_Impl3_Len_Interface as Len0 with function Model0.model = Model1.model + function Model0.model = LitSat0.model + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_clause_clause + clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause, + type Output0.output = Index0.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause, + predicate HasValue0.has_value = Index0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause, + predicate InBounds0.in_bounds = Index0.in_bounds + clone CreuSat_Lit_Impl1_LitSat_Interface as LitSat0 + clone CreuSat_Clause_Impl0_Index_Interface as Index1 + clone CreuSat_Clause_Impl3_Len_Interface as Len0 clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.creusat_clause_clause, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - type Output0.output = Output0.output - let rec cfg is_clause_sat [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 96 4 96 68] (self : Type.creusat_formula_formula) (idx : usize) (a : Type.creusat_assignments_assignments) : bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 92 4 92 33] Invariant0.invariant' self} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 93 4 93 35] Invariant1.invariant' a self} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 94 4 94 45] UInt64.to_int idx < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 95 4 95 55] result = Sat0.sat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) (UInt64.to_int idx)) a } + type a = Type.alloc_alloc_global + let rec cfg is_clause_sat [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 96 4 96 68] (self : Type.creusat_formula_formula) (idx : usize) (a : Type.creusat_assignments_assignments) : bool + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 92 4 92 33] Invariant0.invariant' self} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 93 4 93 35] Invariant1.invariant' a self} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 94 4 94 45] UInt64.to_int idx < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 95 4 95 55] result = Sat0.sat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) (UInt64.to_int idx)) a } = var _0 : bool; @@ -10707,7 +10566,7 @@ module CreuSat_Formula_Impl2_IsClauseSat BB0 { _6 <- Type.creusat_formula_formula_Formula_clauses self_1; _7 <- idx_2; - _5 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 97 22 97 39] Index0.index _6 _7); + _5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 97 22 97 39] Index0.index _6 _7); goto BB1 } BB1 { @@ -10716,14 +10575,14 @@ module CreuSat_Formula_Impl2_IsClauseSat goto BB2 } BB2 { - invariant previous_not_sat { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 99 8 99 97] forall j : (int) . 0 <= j && j < UInt64.to_int i_8 -> not Sat1.sat (Seq.get (Model1.model clause_4) j) a_3 }; + invariant previous_not_sat { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 99 8 99 97] forall j : (int) . 0 <= j && j < UInt64.to_int i_8 -> not Sat1.sat (Seq.get (Model1.model clause_4) j) a_3 }; _12 <- i_8; _14 <- clause_4; - _13 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 100 18 100 30] Len0.len _14); + _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 100 18 100 30] Len0.len _14); goto BB3 } BB3 { - _11 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 100 14 100 30] _12 < _13); + _11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 100 14 100 30] _12 < _13); switch (_11) | False -> goto BB9 | _ -> goto BB4 @@ -10732,13 +10591,13 @@ module CreuSat_Formula_Impl2_IsClauseSat BB4 { _19 <- clause_4; _20 <- i_8; - _18 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 101 15 101 24] Index1.index _19 _20); + _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 101 15 101 24] Index1.index _19 _20); goto BB5 } BB5 { _17 <- _18; _21 <- a_3; - _16 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 101 15 101 35] LitSat0.lit_sat _17 _21); + _16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 101 15 101 35] LitSat0.lit_sat _17 _21); goto BB6 } BB6 { @@ -10753,7 +10612,7 @@ module CreuSat_Formula_Impl2_IsClauseSat } BB8 { _15 <- (); - i_8 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 104 12 104 18] i_8 + (1 : usize)); + i_8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 104 12 104 18] i_8 + (1 : usize)); _10 <- (); goto BB2 } @@ -10786,10 +10645,10 @@ module CreuSat_Logic_LogicWatches_WatchesInvariantInternal type a = Type.alloc_alloc_global, axiom . clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_watches_watcher, type a = Type.alloc_alloc_global, axiom . - predicate watches_invariant_internal [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 11 0 11 83] (w : Seq.seq (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global))) (n : int) (f : Type.creusat_formula_formula) + predicate watches_invariant_internal [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 11 0 11 83] (w : Seq.seq (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global))) (n : int) (f : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 12 4 20 5] 2 * n = Seq.length w && (forall i : (int) . 0 <= i && i < Seq.length w -> (forall j : (int) . 0 <= j && j < Seq.length (Model0.model (Seq.get w i)) -> UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref (Seq.get (Model0.model (Seq.get w i)) j)) < Seq.length (Model1.model (Type.creusat_formula_formula_Formula_clauses f)) && Seq.length (Model2.model (Seq.get (Model1.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref (Seq.get (Model0.model (Seq.get w i)) j))))) > 1 && IndexLogic0.index_logic (Type.creusat_watches_watcher_Watcher_blocker (Seq.get (Model0.model (Seq.get w i)) j)) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 12 4 20 5] 2 * n = Seq.length w && (forall i : (int) . 0 <= i && i < Seq.length w -> (forall j : (int) . 0 <= j && j < Seq.length (Model0.model (Seq.get w i)) -> UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref (Seq.get (Model0.model (Seq.get w i)) j)) < Seq.length (Model1.model (Type.creusat_formula_formula_Formula_clauses f)) && Seq.length (Model2.model (Seq.get (Model1.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref (Seq.get (Model0.model (Seq.get w i)) j))))) > 1 && IndexLogic0.index_logic (Type.creusat_watches_watcher_Watcher_blocker (Seq.get (Model0.model (Seq.get w i)) j)) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))) end module CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface use Type @@ -10801,12 +10660,12 @@ module CreuSat_Logic_LogicWatches_Impl0_Invariant clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal_Interface as WatchesInvariantInternal0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), type a = Type.alloc_alloc_global, axiom . - predicate invariant' [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 67 4 67 46] (self : Type.creusat_watches_watches) (f : Type.creusat_formula_formula) + predicate invariant' [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 67 4 67 46] (self : Type.creusat_watches_watches) (f : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 68 8 83 9] WatchesInvariantInternal0.watches_invariant_internal (Model0.model (Type.creusat_watches_watches_Watches_watches self)) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) f + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 68 8 83 9] WatchesInvariantInternal0.watches_invariant_internal (Model0.model (Type.creusat_watches_watches_Watches_watches self)) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) f end -module CreuSat_Logic_LogicFormula_Impl1_SatInner_Interface +module CreuSat_Logic_LogicFormula_Impl2_SatInner_Interface use Type use seq.Seq use mach.int.Int @@ -10814,7 +10673,7 @@ module CreuSat_Logic_LogicFormula_Impl1_SatInner_Interface use prelude.UInt8 predicate sat_inner (self : Type.creusat_formula_formula) (a : Seq.seq uint8) end -module CreuSat_Logic_LogicFormula_Impl1_SatInner +module CreuSat_Logic_LogicFormula_Impl2_SatInner use Type use seq.Seq use mach.int.Int @@ -10824,40 +10683,40 @@ module CreuSat_Logic_LogicFormula_Impl1_SatInner clone CreuSat_Logic_LogicClause_Impl2_SatInner_Interface as SatInner0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . - predicate sat_inner [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 142 4 142 57] (self : Type.creusat_formula_formula) (a : Seq.seq uint8) + predicate sat_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 149 4 149 57] (self : Type.creusat_formula_formula) (a : Seq.seq uint8) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 143 8 146 9] forall i : (int) . 0 <= i && i < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) -> SatInner0.sat_inner (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) i) a + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 150 8 153 9] forall i : (int) . 0 <= i && i < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) -> SatInner0.sat_inner (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) i) a end -module CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteNoAss_Interface +module CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss_Interface use Type predicate eventually_sat_complete_no_ass (self : Type.creusat_formula_formula) end -module CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteNoAss +module CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss use Type use seq.Seq use mach.int.Int use prelude.Prelude use prelude.UInt8 use mach.int.UInt64 - clone CreuSat_Logic_LogicFormula_Impl1_SatInner_Interface as SatInner0 + clone CreuSat_Logic_LogicFormula_Impl2_SatInner_Interface as SatInner0 clone CreuSat_Logic_LogicAssignments_CompleteInner_Interface as CompleteInner0 - predicate eventually_sat_complete_no_ass [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 73 4 73 55] (self : Type.creusat_formula_formula) + predicate eventually_sat_complete_no_ass [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 80 4 80 55] (self : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 74 8 76 9] exists a2 : (Seq.seq uint8) . Seq.length a2 = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self) && CompleteInner0.complete_inner a2 && SatInner0.sat_inner self a2 + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 81 8 83 9] exists a2 : (Seq.seq uint8) . Seq.length a2 = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self) && CompleteInner0.complete_inner a2 && SatInner0.sat_inner self a2 end -module CreuSat_Logic_LogicFormula_Impl1_Equisat_Interface +module CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface use Type predicate equisat (self : Type.creusat_formula_formula) (o : Type.creusat_formula_formula) end -module CreuSat_Logic_LogicFormula_Impl1_Equisat +module CreuSat_Logic_LogicFormula_Impl2_Equisat use Type - clone CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteNoAss_Interface as EventuallySatCompleteNoAss0 - predicate equisat [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 79 4 79 44] (self : Type.creusat_formula_formula) (o : Type.creusat_formula_formula) + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss_Interface as EventuallySatCompleteNoAss0 + predicate equisat [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 86 4 86 44] (self : Type.creusat_formula_formula) (o : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 78 4 78 16] EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass self = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass o + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 85 4 85 16] EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass self = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass o end module CreuSat_Logic_LogicFormula_Compatible_Interface use seq.Seq @@ -10872,10 +10731,10 @@ module CreuSat_Logic_LogicFormula_Compatible use mach.int.Int use mach.int.Int32 clone CreuSat_Logic_LogicClause_Impl2_Equals_Interface as Equals0 - predicate compatible [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 54 0 54 67] (f : (Seq.seq (Type.creusat_clause_clause), int)) (o : (Seq.seq (Type.creusat_clause_clause), int)) + predicate compatible [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 61 0 61 67] (f : (Seq.seq (Type.creusat_clause_clause), int)) (o : (Seq.seq (Type.creusat_clause_clause), int)) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 55 4 60 5] (let (_, a) = f in a) = (let (_, a) = o in a) && Seq.length (let (a, _) = o in a) >= Seq.length (let (a, _) = f in a) && (forall i : (int) . 0 <= i && i < Seq.length (let (a, _) = f in a) -> Equals0.equals (Seq.get (let (a, _) = f in a) i) (Seq.get (let (a, _) = o in a) i)) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 62 4 67 5] (let (_, a) = f in a) = (let (_, a) = o in a) && Seq.length (let (a, _) = o in a) >= Seq.length (let (a, _) = f in a) && (forall i : (int) . 0 <= i && i < Seq.length (let (a, _) = f in a) -> Equals0.equals (Seq.get (let (a, _) = f in a) i) (Seq.get (let (a, _) = o in a) i)) end module CreuSat_Logic_LogicFormula_Equisat_Interface use seq.Seq @@ -10888,10 +10747,10 @@ module CreuSat_Logic_LogicFormula_Equisat use Type use mach.int.Int clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss_Interface as EventuallySatCompleteNoAss0 - predicate equisat [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 47 0 47 64] (f : (Seq.seq (Type.creusat_clause_clause), int)) (o : (Seq.seq (Type.creusat_clause_clause), int)) + predicate equisat [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 54 0 54 64] (f : (Seq.seq (Type.creusat_clause_clause), int)) (o : (Seq.seq (Type.creusat_clause_clause), int)) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 48 4 50 5] EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass f = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass o + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 55 4 57 5] EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass f = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass o end module CreuSat_Logic_LogicFormula_EquisatCompatibleInner_Interface use seq.Seq @@ -10906,23 +10765,23 @@ module CreuSat_Logic_LogicFormula_EquisatCompatibleInner use mach.int.Int clone CreuSat_Logic_LogicFormula_Equisat_Interface as Equisat0 clone CreuSat_Logic_LogicFormula_Compatible_Interface as Compatible0 - predicate equisat_compatible_inner [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 64 0 64 81] (f : (Seq.seq (Type.creusat_clause_clause), int)) (o : (Seq.seq (Type.creusat_clause_clause), int)) + predicate equisat_compatible_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 71 0 71 81] (f : (Seq.seq (Type.creusat_clause_clause), int)) (o : (Seq.seq (Type.creusat_clause_clause), int)) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 65 4 67 5] Compatible0.compatible f o && Equisat0.equisat f o + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 72 4 74 5] Compatible0.compatible f o && Equisat0.equisat f o end -module CreuSat_Logic_LogicFormula_Impl1_EquisatCompatible_Interface +module CreuSat_Logic_LogicFormula_Impl2_EquisatCompatible_Interface use Type predicate equisat_compatible (self : Type.creusat_formula_formula) (o : Type.creusat_formula_formula) end -module CreuSat_Logic_LogicFormula_Impl1_EquisatCompatible +module CreuSat_Logic_LogicFormula_Impl2_EquisatCompatible use Type clone CreuSat_Logic_LogicFormula_EquisatCompatibleInner_Interface as EquisatCompatibleInner0 clone CreuSat_Logic_LogicFormula_Impl0_Model_Interface as Model0 - predicate equisat_compatible [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 94 4 94 55] (self : Type.creusat_formula_formula) (o : Type.creusat_formula_formula) + predicate equisat_compatible [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 101 4 101 55] (self : Type.creusat_formula_formula) (o : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 95 8 95 57] EquisatCompatibleInner0.equisat_compatible_inner (Model0.model self) (Model0.model o) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 102 8 102 57] EquisatCompatibleInner0.equisat_compatible_inner (Model0.model self) (Model0.model o) end module CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic_Interface use Type @@ -10935,10 +10794,10 @@ module CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic use mach.int.Int32 clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic_Interface as IsPositiveLogic0 clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - function to_neg_watchidx_logic [@inline:trivial] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 39 4 39 45] (self : Type.creusat_lit_lit) : int + function to_neg_watchidx_logic [@inline:trivial] [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 39 4 39 45] (self : Type.creusat_lit_lit) : int = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 40 8 40 91] IndexLogic0.index_logic self * 2 + (if IsPositiveLogic0.is_positive_logic self then + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 40 8 40 91] IndexLogic0.index_logic self * 2 + (if IsPositiveLogic0.is_positive_logic self then 1 else 0 @@ -10954,9 +10813,9 @@ module CreuSat_Lit_Impl1_ToNegWatchidx_Interface clone CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic_Interface as ToNegWatchidxLogic0 clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 val to_neg_watchidx [@cfg:stackify] (self : Type.creusat_lit_lit) : usize - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 97 4 97 51] IndexLogic0.index_logic self < div 18446744073709551615 2} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 98 4 98 55] UInt64.to_int result = ToNegWatchidxLogic0.to_neg_watchidx_logic self } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 99 4 99 96] UInt64.to_int result = IndexLogic0.index_logic self * 2 + (if IsPositiveLogic0.is_positive_logic self then + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 97 4 97 51] IndexLogic0.index_logic self < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 98 4 98 55] UInt64.to_int result = ToNegWatchidxLogic0.to_neg_watchidx_logic self } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 99 4 99 96] UInt64.to_int result = IndexLogic0.index_logic self * 2 + (if IsPositiveLogic0.is_positive_logic self then 1 else 0 @@ -10969,16 +10828,15 @@ module CreuSat_Lit_Impl1_ToNegWatchidx use mach.int.UInt64 use mach.int.Int32 use Type - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic as ToNegWatchidxLogic0 with function IndexLogic0.index_logic = IndexLogic0.index_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic - clone CreuSat_Lit_Impl1_IsPositive_Interface as IsPositive0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic - clone CreuSat_Lit_Impl1_Index_Interface as Index0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - let rec cfg to_neg_watchidx [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 100 4 100 41] (self : Type.creusat_lit_lit) : usize - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 97 4 97 51] IndexLogic0.index_logic self < div 18446744073709551615 2} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 98 4 98 55] UInt64.to_int result = ToNegWatchidxLogic0.to_neg_watchidx_logic self } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 99 4 99 96] UInt64.to_int result = IndexLogic0.index_logic self * 2 + (if IsPositiveLogic0.is_positive_logic self then + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = ToNegWatchidxLogic0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = ToNegWatchidxLogic0.index_logic + clone CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic as ToNegWatchidxLogic0 + clone CreuSat_Lit_Impl1_IsPositive_Interface as IsPositive0 + clone CreuSat_Lit_Impl1_Index_Interface as Index0 + let rec cfg to_neg_watchidx [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 100 4 100 41] (self : Type.creusat_lit_lit) : usize + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 97 4 97 51] IndexLogic0.index_logic self < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 98 4 98 55] UInt64.to_int result = ToNegWatchidxLogic0.to_neg_watchidx_logic self } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 99 4 99 96] UInt64.to_int result = IndexLogic0.index_logic self * 2 + (if IsPositiveLogic0.is_positive_logic self then 1 else 0 @@ -10999,13 +10857,13 @@ module CreuSat_Lit_Impl1_ToNegWatchidx } BB0 { _4 <- self_1; - _3 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 101 8 101 20] Index0.index _4); + _3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 101 8 101 20] Index0.index _4); goto BB1 } BB1 { - _2 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 101 8 101 24] _3 * (2 : usize)); + _2 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 101 8 101 24] _3 * (2 : usize)); _7 <- self_1; - _6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 101 30 101 48] IsPositive0.is_positive _7); + _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 101 30 101 48] IsPositive0.is_positive _7); goto BB2 } BB2 { @@ -11023,7 +10881,7 @@ module CreuSat_Lit_Impl1_ToNegWatchidx goto BB5 } BB5 { - _0 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 101 8 101 65] _2 + _5); + _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 101 8 101 65] _2 + _5); return _0 } @@ -11044,14 +10902,14 @@ module CreuSat_Watches_Impl0_AddWatcher_Interface type a = Type.alloc_alloc_global, axiom . clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant0 val add_watcher [@cfg:stackify] (self : borrowed (Type.creusat_watches_watches)) (lit : Type.creusat_lit_lit) (cref : usize) (_f : Type.creusat_formula_formula) (blocker : Type.creusat_lit_lit) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 105 4 105 43] Invariant0.invariant' ( * self) _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 106 4 106 44] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses _f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 107 4 107 50] IndexLogic0.index_logic lit < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 108 4 108 53] IndexLogic0.index_logic blocker < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 109 4 109 68] ToNegWatchidxLogic0.to_neg_watchidx_logic lit < Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * self)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 110 4 110 50] Seq.length (Model2.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) > 1} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 105 4 105 43] Invariant0.invariant' ( ^ self) _f } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 111 4 111 65] Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * self))) = Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( ^ self))) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 105 4 105 43] Invariant0.invariant' ( * self) _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 106 4 106 44] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses _f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 107 4 107 50] IndexLogic0.index_logic lit < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 108 4 108 53] IndexLogic0.index_logic blocker < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 109 4 109 68] ToNegWatchidxLogic0.to_neg_watchidx_logic lit < Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * self)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 110 4 110 50] Seq.length (Model2.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) > 1} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 105 4 105 43] Invariant0.invariant' ( ^ self) _f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 111 4 111 65] Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * self))) = Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( ^ self))) } end module CreuSat_Watches_Impl0_AddWatcher @@ -11062,48 +10920,45 @@ module CreuSat_Watches_Impl0_AddWatcher use mach.int.Int32 use Type clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . + type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model2 with function Model0.model = Model3.model - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic as ToNegWatchidxLogic0 with function IndexLogic0.index_logic = IndexLogic0.index_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic + type a = Type.alloc_alloc_global, function Model0.model = Model2.model, axiom . + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = ToNegWatchidxLogic0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = ToNegWatchidxLogic0.index_logic, + function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic + clone CreuSat_Logic_LogicClause_Impl0_Model as Model2 with function Model2.model = WatchesInvariantInternal0.model clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model4.model, - function Model1.model = Model0.model, function Model2.model = Model2.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic + type a = Type.alloc_alloc_global, function Model1.model = WatchesInvariantInternal0.model, axiom . + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant0.watches_invariant_internal clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant0 with function Model0.model = Model1.model, - predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) + type a = Type.alloc_alloc_global, function Model0.model = Invariant0.model, axiom . + clone CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic as ToNegWatchidxLogic0 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant0 clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_watches_watches + clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + type Output0.output = IndexMut0.output + clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + predicate HasValue0.has_value = IndexMut0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + predicate InBounds0.in_bounds = IndexMut0.in_bounds + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) clone Alloc_Vec_Impl1_Push_Interface as Push0 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = Model4.model - clone CreuSat_Lit_Impl1_ToNegWatchidx_Interface as ToNegWatchidx0 with function IndexLogic0.index_logic = IndexLogic0.index_logic, - function ToNegWatchidxLogic0.to_neg_watchidx_logic = ToNegWatchidxLogic0.to_neg_watchidx_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic + type a = Type.alloc_alloc_global clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type i = usize, type a = Type.alloc_alloc_global, function Model0.model = Model1.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - predicate ResolveElswhere0.resolve_elswhere = ResolveElswhere0.resolve_elswhere, type Output0.output = Output0.output - let rec cfg add_watcher [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 112 4 112 84] (self : borrowed (Type.creusat_watches_watches)) (lit : Type.creusat_lit_lit) (cref : usize) (_f : Type.creusat_formula_formula) (blocker : Type.creusat_lit_lit) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 105 4 105 43] Invariant0.invariant' ( * self) _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 106 4 106 44] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses _f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 107 4 107 50] IndexLogic0.index_logic lit < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 108 4 108 53] IndexLogic0.index_logic blocker < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 109 4 109 68] ToNegWatchidxLogic0.to_neg_watchidx_logic lit < Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * self)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 110 4 110 50] Seq.length (Model2.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) > 1} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 105 4 105 43] Invariant0.invariant' ( ^ self) _f } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 111 4 111 65] Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * self))) = Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( ^ self))) } + type i = usize, type a = Type.alloc_alloc_global + clone CreuSat_Lit_Impl1_ToNegWatchidx_Interface as ToNegWatchidx0 + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_watches_watches + let rec cfg add_watcher [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 112 4 112 84] (self : borrowed (Type.creusat_watches_watches)) (lit : Type.creusat_lit_lit) (cref : usize) (_f : Type.creusat_formula_formula) (blocker : Type.creusat_lit_lit) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 105 4 105 43] Invariant0.invariant' ( * self) _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 106 4 106 44] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses _f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 107 4 107 50] IndexLogic0.index_logic lit < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 108 4 108 53] IndexLogic0.index_logic blocker < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 109 4 109 68] ToNegWatchidxLogic0.to_neg_watchidx_logic lit < Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * self)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 110 4 110 50] Seq.length (Model2.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) > 1} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 105 4 105 43] Invariant0.invariant' ( ^ self) _f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 111 4 111 65] Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * self))) = Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( ^ self))) } = var _0 : (); @@ -11134,11 +10989,11 @@ module CreuSat_Watches_Impl0_AddWatcher self_1 <- { self_1 with current = (let Type.CreuSat_Watches_Watches a = * self_1 in Type.CreuSat_Watches_Watches ( ^ _9)) }; assume { Resolve0.resolve self_1 }; _11 <- lit_2; - _10 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 113 21 113 42] ToNegWatchidx0.to_neg_watchidx _11); + _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 113 21 113 42] ToNegWatchidx0.to_neg_watchidx _11); goto BB1 } BB1 { - _8 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 113 8 113 43] IndexMut0.index_mut _9 _10); + _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 113 8 113 43] IndexMut0.index_mut _9 _10); goto BB2 } BB2 { @@ -11147,7 +11002,7 @@ module CreuSat_Watches_Impl0_AddWatcher _13 <- cref_3; _14 <- blocker_5; _12 <- Type.CreuSat_Watches_Watcher _13 _14; - _6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 113 8 113 75] Push0.push _7 _12); + _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 113 8 113 75] Push0.push _7 _12); goto BB3 } BB3 { @@ -11164,36 +11019,34 @@ module CreuSat_Formula_Impl2_AddClause_Interface use mach.int.UInt64 use prelude.Prelude use Type + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model1.modelTy + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model2 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl1_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 clone CreuSat_Logic_LogicClause_EquisatExtensionInner_Interface as EquisatExtensionInner0 - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model1 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model1 with type t = Type.creusat_formula_formula clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant3 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val add_clause [@cfg:stackify] (self : borrowed (Type.creusat_formula_formula)) (clause : Type.creusat_clause_clause) (watches : borrowed (Type.creusat_watches_watches)) (_t : Type.creusat_trail_trail) : usize - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 110 4 110 40] Invariant0.invariant' ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 111 4 111 40] Invariant1.invariant' _t ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 112 4 112 51] Invariant2.invariant' ( * watches) ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 113 4 113 37] Seq.length (Model0.model clause) >= 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 114 4 114 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 117 4 117 49] Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 118 4 118 55] EquisatExtensionInner0.equisat_extension_inner clause (Model1.model self)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 110 4 110 40] Invariant0.invariant' ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 111 4 111 40] Invariant1.invariant' _t ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 112 4 112 51] Invariant2.invariant' ( ^ watches) ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 119 4 119 51] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ self)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 120 4 120 35] Equisat0.equisat ( * self) ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 121 4 121 48] UInt64.to_int result = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 122 4 122 53] Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) (UInt64.to_int result) = clause } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 123 4 123 69] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) + 1 = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 110 4 110 40] Invariant0.invariant' ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 111 4 111 40] Invariant1.invariant' _t ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 112 4 112 51] Invariant2.invariant' ( * watches) ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 113 4 113 37] Seq.length (Model0.model clause) >= 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 114 4 114 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 117 4 117 49] Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 118 4 118 55] EquisatExtensionInner0.equisat_extension_inner clause (Model1.model self)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 110 4 110 40] Invariant0.invariant' ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 111 4 111 40] Invariant1.invariant' _t ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 112 4 112 51] Invariant2.invariant' ( ^ watches) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 119 4 119 51] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ self)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 120 4 120 35] Equisat0.equisat ( * self) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 121 4 121 48] UInt64.to_int result = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 122 4 122 53] Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) (UInt64.to_int result) = clause } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 123 4 123 69] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) + 1 = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) } end module CreuSat_Formula_Impl2_AddClause @@ -11204,157 +11057,144 @@ module CreuSat_Formula_Impl2_AddClause use prelude.Prelude use Type use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model8 with function Model0.model = Model10.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with function Model0.model = Model8.model - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model8.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model4 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl1_Model as Model1 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model4.model + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = Invariant6.index_logic, function IndexLogic0.index_logic = SatInner1.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model0 with function Model0.model = Model7.model - clone CreuSat_Logic_LogicClause_Impl2_Equals as Equals0 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicFormula_Compatible as Compatible0 with predicate Equals0.equals = Equals0.equals - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with function Model0.model = Model0.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_SatInner as SatInner0 with function Model0.model = Model2.model, + type a = Type.alloc_alloc_global, function Model0.model = Model0.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model0 with function Model0.model = Invariant3.model, + function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, + function Model2.model = WatchesInvariantInternal0.model, function Model1.model = UnitAreSat0.model, + function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, + function Model1.model = Invariant7.model, function Model0.model = SatInner2.model, + function Model0.model = Equals0.model + clone CreuSat_Logic_LogicClause_Impl2_Equals as Equals0 with predicate Equals0.equals = Compatible0.equals + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner, predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_Equisat as Equisat0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss1.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner - clone CreuSat_Logic_LogicFormula_Equisat as Equisat1 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicFormula_EquisatCompatibleInner as EquisatCompatibleInner0 with predicate Compatible0.compatible = Compatible0.compatible, - predicate Equisat0.equisat = Equisat1.equisat - clone CreuSat_Logic_LogicFormula_Impl1_EquisatCompatible as EquisatCompatible0 with function Model0.model = Model4.model, - predicate EquisatCompatibleInner0.equisat_compatible_inner = EquisatCompatibleInner0.equisat_compatible_inner - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with function Model0.model = Model2.model, - function Model1.model = Model0.model - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = Invariant6.invariant', - predicate Invariant1.invariant' = Invariant7.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model0.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner1.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model2.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model0.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model2.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model2.model, - function Model1.model = Model0.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model9.model, - function Model1.model = Model2.model, function Model2.model = Model0.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with function Model0.model = Model0.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant3.invariant', - function Model0.model = Model0.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model2.model, - predicate Invariant0.invariant' = Invariant3.invariant', function Model1.model = Model0.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model4.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 with function Model0.model = Model6.model, - predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, + function Model0.model = Model4.model, function Model3.model = InvariantNoDecisionMirror0.model, + function Model1.model = WatchesInvariantInternal0.model, function Model0.model = LongArePostUnitInner0.model, + function Model0.model = UnitAreSat0.model, function Model0.model = SatInner0.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model8.model, axiom . + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss0.formula_sat_inner + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner, + predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss1.complete_inner + clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass, + predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat1.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicFormula_Equisat as Equisat1 with predicate Equisat0.equisat = EquisatCompatibleInner0.equisat + clone CreuSat_Logic_LogicFormula_Compatible as Compatible0 with predicate Compatible0.compatible = EquisatCompatibleInner0.compatible + clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss1.sat_inner + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model8 with function Model2.model = InvariantNoDecision0.model, + function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant4.model, + function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model3.model, - function Model1.model = Model8.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model3.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model3.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model5.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model8.model, - function Model1.model = Model3.model, predicate Invariant0.invariant' = Invariant5.invariant', - function Model2.model = Model5.model, function Model3.model = Model2.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant4.invariant', function Model0.model = Model3.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model5.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model8.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model5.model, function Model1.model = Model3.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicFormula_EquisatCompatibleInner as EquisatCompatibleInner0 with predicate EquisatCompatibleInner0.equisat_compatible_inner = EquisatCompatible0.equisat_compatible_inner + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model1.modelTy + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant2.watches_invariant_internal + clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model4 with function Model0.model = Invariant0.model, + function Model0.model = Model1.model, function Model0.model = EquisatCompatible0.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_EquisatCompatible as EquisatCompatible0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 + clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 + clone CreusotContracts_Logic_Model_Impl1_Model as Model1 with type t = Type.creusat_formula_formula + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . + clone CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic as ToNegWatchidxLogic0 with function ToNegWatchidxLogic0.to_neg_watchidx_logic = AddWatcher0.to_neg_watchidx_logic + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model11.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_clause_clause, + function Model0.model = Index0.model clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_watches_watches clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 - clone CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic as ToNegWatchidxLogic0 with function IndexLogic0.index_logic = IndexLogic0.index_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic + clone CreuSat_Watches_Impl0_AddWatcher_Interface as AddWatcher0 clone Alloc_Vec_Impl1_Push_Interface as Push0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = Model2.model - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = Model2.model - clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model0.model - clone CreuSat_Clause_Impl0_Index_Interface as Index0 with function Model0.model = Model11.model - clone CreuSat_Watches_Impl0_AddWatcher_Interface as AddWatcher0 with predicate Invariant0.invariant' = Invariant2.invariant', - function Model0.model = Model2.model, function IndexLogic0.index_logic = IndexLogic0.index_logic, - function ToNegWatchidxLogic0.to_neg_watchidx_logic = ToNegWatchidxLogic0.to_neg_watchidx_logic, - function Model1.model = Model6.model, function Model2.model = Model0.model - let rec cfg add_clause [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 124 4 124 92] (self : borrowed (Type.creusat_formula_formula)) (clause : Type.creusat_clause_clause) (watches : borrowed (Type.creusat_watches_watches)) (_t : Type.creusat_trail_trail) : usize - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 110 4 110 40] Invariant0.invariant' ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 111 4 111 40] Invariant1.invariant' _t ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 112 4 112 51] Invariant2.invariant' ( * watches) ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 113 4 113 37] Seq.length (Model0.model clause) >= 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 114 4 114 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 117 4 117 49] Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 118 4 118 55] EquisatExtensionInner0.equisat_extension_inner clause (Model1.model self)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 110 4 110 40] Invariant0.invariant' ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 111 4 111 40] Invariant1.invariant' _t ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 112 4 112 51] Invariant2.invariant' ( ^ watches) ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 119 4 119 51] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ self)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 120 4 120 35] Equisat0.equisat ( * self) ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 121 4 121 48] UInt64.to_int result = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 122 4 122 53] Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) (UInt64.to_int result) = clause } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 123 4 123 69] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) + 1 = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) } + type a = Type.alloc_alloc_global + clone CreuSat_Clause_Impl0_Index_Interface as Index0 + clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global + let rec cfg add_clause [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 124 4 124 92] (self : borrowed (Type.creusat_formula_formula)) (clause : Type.creusat_clause_clause) (watches : borrowed (Type.creusat_watches_watches)) (_t : Type.creusat_trail_trail) : usize + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 110 4 110 40] Invariant0.invariant' ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 111 4 111 40] Invariant1.invariant' _t ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 112 4 112 51] Invariant2.invariant' ( * watches) ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 113 4 113 37] Seq.length (Model0.model clause) >= 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 114 4 114 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 117 4 117 49] Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 118 4 118 55] EquisatExtensionInner0.equisat_extension_inner clause (Model1.model self)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 110 4 110 40] Invariant0.invariant' ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 111 4 111 40] Invariant1.invariant' _t ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 112 4 112 51] Invariant2.invariant' ( ^ watches) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 119 4 119 51] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ self)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 120 4 120 35] Equisat0.equisat ( * self) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 121 4 121 48] UInt64.to_int result = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 122 4 122 53] Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) (UInt64.to_int result) = clause } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 123 4 123 69] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) + 1 = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) } = var _0 : usize; @@ -11412,23 +11252,23 @@ module CreuSat_Formula_Impl2_AddClause } BB4 { _6 <- (); - old_self_5 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 125 23 125 38] self_1); + old_self_5 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 125 23 125 38] self_1); goto BB5 } BB5 { _8 <- Type.creusat_formula_formula_Formula_clauses ( * self_1); - cref_7 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 126 19 126 37] Len0.len _8); + cref_7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 126 19 126 37] Len0.len _8); goto BB6 } BB6 { _11 <- clause_2; - _10 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 131 24 131 33] Index0.index _11 (0 : usize)); + _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 131 24 131 33] Index0.index _11 (0 : usize)); goto BB7 } BB7 { first_lit_9 <- _10; _14 <- clause_2; - _13 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 132 25 132 34] Index0.index _14 (1 : usize)); + _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 132 25 132 34] Index0.index _14 (1 : usize)); goto BB8 } BB8 { @@ -11436,7 +11276,7 @@ module CreuSat_Formula_Impl2_AddClause _16 <- borrow_mut (Type.creusat_formula_formula_Formula_clauses ( * self_1)); self_1 <- { self_1 with current = (let Type.CreuSat_Formula_Formula a b = * self_1 in Type.CreuSat_Formula_Formula ( ^ _16) b) }; _17 <- clause_2; - _15 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 133 8 133 33] Push0.push _16 _17); + _15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 133 8 133 33] Push0.push _16 _17); goto BB9 } BB9 { @@ -11446,7 +11286,7 @@ module CreuSat_Formula_Impl2_AddClause _21 <- cref_7; _22 <- * self_1; _23 <- second_lit_12; - _18 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 134 8 134 62] AddWatcher0.add_watcher _19 _20 _21 _22 _23); + _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 134 8 134 62] AddWatcher0.add_watcher _19 _20 _21 _22 _23); goto BB10 } BB10 { @@ -11457,18 +11297,18 @@ module CreuSat_Formula_Impl2_AddClause _28 <- * self_1; assume { Resolve0.resolve self_1 }; _29 <- first_lit_9; - _24 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 135 8 135 62] AddWatcher0.add_watcher _25 _26 _27 _28 _29); + _24 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 135 8 135 62] AddWatcher0.add_watcher _25 _26 _27 _28 _29); goto BB11 } BB11 { assume { Resolve1.resolve watches_3 }; - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 136 8 136 49] ^ old_self_5 = ^ self_1 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 136 8 136 49] ^ old_self_5 = ^ self_1 }; _30 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 137 8 137 57] EquisatCompatible0.equisat_compatible ( * old_self_5) ( * self_1) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 137 8 137 57] EquisatCompatible0.equisat_compatible ( * old_self_5) ( * self_1) }; _31 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 138 8 138 46] Equisat0.equisat ( * old_self_5) ( * self_1) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 138 8 138 46] Equisat0.equisat ( * old_self_5) ( * self_1) }; _32 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 139 8 139 56] TrailInvariant0.trail_invariant (Model3.model (Type.creusat_trail_trail_Trail_trail _t_4)) ( * self_1) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 139 8 139 56] TrailInvariant0.trail_invariant (Model3.model (Type.creusat_trail_trail_Trail_trail _t_4)) ( * self_1) }; _33 <- (); _0 <- cref_7; goto BB12 @@ -11485,36 +11325,34 @@ module CreuSat_Formula_Impl2_AddUnwatchedClause_Interface use mach.int.UInt64 use prelude.Prelude use Type + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model1.modelTy + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model2 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl1_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 clone CreuSat_Logic_LogicClause_EquisatExtensionInner_Interface as EquisatExtensionInner0 - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model1 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model1 with type t = Type.creusat_formula_formula clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant3 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val add_unwatched_clause [@cfg:stackify] (self : borrowed (Type.creusat_formula_formula)) (clause : Type.creusat_clause_clause) (watches : borrowed (Type.creusat_watches_watches)) (_t : Type.creusat_trail_trail) : usize - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 144 4 144 40] Invariant0.invariant' ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 145 4 145 40] Invariant1.invariant' _t ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 146 4 146 51] Invariant2.invariant' ( * watches) ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 147 4 147 37] Seq.length (Model0.model clause) >= 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 148 4 148 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 151 4 151 49] Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 152 4 152 55] EquisatExtensionInner0.equisat_extension_inner clause (Model1.model self)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 144 4 144 40] Invariant0.invariant' ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 145 4 145 40] Invariant1.invariant' _t ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 146 4 146 51] Invariant2.invariant' ( ^ watches) ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 153 4 153 51] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ self)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 154 4 154 35] Equisat0.equisat ( * self) ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 155 4 155 48] UInt64.to_int result = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 156 4 156 53] Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) (UInt64.to_int result) = clause } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 157 4 157 69] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) + 1 = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 144 4 144 40] Invariant0.invariant' ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 145 4 145 40] Invariant1.invariant' _t ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 146 4 146 51] Invariant2.invariant' ( * watches) ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 147 4 147 37] Seq.length (Model0.model clause) >= 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 148 4 148 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 151 4 151 49] Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 152 4 152 55] EquisatExtensionInner0.equisat_extension_inner clause (Model1.model self)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 144 4 144 40] Invariant0.invariant' ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 145 4 145 40] Invariant1.invariant' _t ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 146 4 146 51] Invariant2.invariant' ( ^ watches) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 153 4 153 51] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ self)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 154 4 154 35] Equisat0.equisat ( * self) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 155 4 155 48] UInt64.to_int result = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 156 4 156 53] Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) (UInt64.to_int result) = clause } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 157 4 157 69] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) + 1 = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) } end module CreuSat_Formula_Impl2_AddUnwatchedClause @@ -11525,147 +11363,138 @@ module CreuSat_Formula_Impl2_AddUnwatchedClause use prelude.Prelude use Type use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model8 with function Model0.model = Model10.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with function Model0.model = Model8.model - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model8.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model4 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl1_Model as Model1 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model4.model + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = Invariant6.index_logic, function IndexLogic0.index_logic = SatInner1.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model0 with function Model0.model = Model7.model - clone CreuSat_Logic_LogicClause_Impl2_Equals as Equals0 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicFormula_Compatible as Compatible0 with predicate Equals0.equals = Equals0.equals - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with function Model0.model = Model0.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_SatInner as SatInner0 with function Model0.model = Model2.model, + type a = Type.alloc_alloc_global, function Model0.model = Model0.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model0 with function Model0.model = Invariant3.model, + function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, + function Model2.model = WatchesInvariantInternal0.model, function Model1.model = UnitAreSat0.model, + function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, + function Model1.model = Invariant7.model, function Model0.model = SatInner2.model, + function Model0.model = Equals0.model + clone CreuSat_Logic_LogicClause_Impl2_Equals as Equals0 with predicate Equals0.equals = Compatible0.equals + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner, predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_Equisat as Equisat0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss1.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner - clone CreuSat_Logic_LogicFormula_Equisat as Equisat1 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicFormula_EquisatCompatibleInner as EquisatCompatibleInner0 with predicate Compatible0.compatible = Compatible0.compatible, - predicate Equisat0.equisat = Equisat1.equisat - clone CreuSat_Logic_LogicFormula_Impl1_EquisatCompatible as EquisatCompatible0 with function Model0.model = Model4.model, - predicate EquisatCompatibleInner0.equisat_compatible_inner = EquisatCompatibleInner0.equisat_compatible_inner - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with function Model0.model = Model2.model, - function Model1.model = Model0.model - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = Invariant6.invariant', - predicate Invariant1.invariant' = Invariant7.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model0.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner1.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model2.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model0.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model2.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model2.model, - function Model1.model = Model0.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model9.model, - function Model1.model = Model2.model, function Model2.model = Model0.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with function Model0.model = Model0.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant3.invariant', - function Model0.model = Model0.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model2.model, - predicate Invariant0.invariant' = Invariant3.invariant', function Model1.model = Model0.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model4.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 with function Model0.model = Model6.model, - predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, + function Model0.model = Model4.model, function Model3.model = InvariantNoDecisionMirror0.model, + function Model1.model = WatchesInvariantInternal0.model, function Model0.model = LongArePostUnitInner0.model, + function Model0.model = UnitAreSat0.model, function Model0.model = SatInner0.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model8.model, axiom . + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss0.formula_sat_inner + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner, + predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss1.complete_inner + clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass, + predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat1.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicFormula_Equisat as Equisat1 with predicate Equisat0.equisat = EquisatCompatibleInner0.equisat + clone CreuSat_Logic_LogicFormula_Compatible as Compatible0 with predicate Compatible0.compatible = EquisatCompatibleInner0.compatible + clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss1.sat_inner + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model8 with function Model2.model = InvariantNoDecision0.model, + function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant4.model, + function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model3.model, - function Model1.model = Model8.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model3.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model3.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model5.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model8.model, - function Model1.model = Model3.model, predicate Invariant0.invariant' = Invariant5.invariant', - function Model2.model = Model5.model, function Model3.model = Model2.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant4.invariant', function Model0.model = Model3.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model5.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model8.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model5.model, function Model1.model = Model3.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicFormula_EquisatCompatibleInner as EquisatCompatibleInner0 with predicate EquisatCompatibleInner0.equisat_compatible_inner = EquisatCompatible0.equisat_compatible_inner + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model1.modelTy + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant2.watches_invariant_internal + clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model4 with function Model0.model = Invariant0.model, + function Model0.model = Model1.model, function Model0.model = EquisatCompatible0.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_EquisatCompatible as EquisatCompatible0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 + clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 + clone CreusotContracts_Logic_Model_Impl1_Model as Model1 with type t = Type.creusat_formula_formula + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_formula_formula - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_watches_watches clone Alloc_Vec_Impl1_Push_Interface as Push0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = Model2.model - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = Model2.model - let rec cfg add_unwatched_clause [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 158 4 158 102] (self : borrowed (Type.creusat_formula_formula)) (clause : Type.creusat_clause_clause) (watches : borrowed (Type.creusat_watches_watches)) (_t : Type.creusat_trail_trail) : usize - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 144 4 144 40] Invariant0.invariant' ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 145 4 145 40] Invariant1.invariant' _t ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 146 4 146 51] Invariant2.invariant' ( * watches) ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 147 4 147 37] Seq.length (Model0.model clause) >= 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 148 4 148 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 151 4 151 49] Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 152 4 152 55] EquisatExtensionInner0.equisat_extension_inner clause (Model1.model self)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 144 4 144 40] Invariant0.invariant' ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 145 4 145 40] Invariant1.invariant' _t ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 146 4 146 51] Invariant2.invariant' ( ^ watches) ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 153 4 153 51] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ self)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 154 4 154 35] Equisat0.equisat ( * self) ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 155 4 155 48] UInt64.to_int result = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 156 4 156 53] Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) (UInt64.to_int result) = clause } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 157 4 157 69] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) + 1 = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) } + type a = Type.alloc_alloc_global + clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_watches_watches + let rec cfg add_unwatched_clause [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 158 4 158 102] (self : borrowed (Type.creusat_formula_formula)) (clause : Type.creusat_clause_clause) (watches : borrowed (Type.creusat_watches_watches)) (_t : Type.creusat_trail_trail) : usize + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 144 4 144 40] Invariant0.invariant' ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 145 4 145 40] Invariant1.invariant' _t ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 146 4 146 51] Invariant2.invariant' ( * watches) ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 147 4 147 37] Seq.length (Model0.model clause) >= 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 148 4 148 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 151 4 151 49] Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 152 4 152 55] EquisatExtensionInner0.equisat_extension_inner clause (Model1.model self)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 144 4 144 40] Invariant0.invariant' ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 145 4 145 40] Invariant1.invariant' _t ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 146 4 146 51] Invariant2.invariant' ( ^ watches) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 153 4 153 51] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ self)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 154 4 154 35] Equisat0.equisat ( * self) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 155 4 155 48] UInt64.to_int result = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 156 4 156 53] Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) (UInt64.to_int result) = clause } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 157 4 157 69] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) + 1 = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) } = var _0 : usize; @@ -11704,26 +11533,26 @@ module CreuSat_Formula_Impl2_AddUnwatchedClause } BB4 { _6 <- (); - old_self_5 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 159 23 159 38] self_1); + old_self_5 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 159 23 159 38] self_1); goto BB5 } BB5 { _8 <- Type.creusat_formula_formula_Formula_clauses ( * self_1); - cref_7 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 160 19 160 37] Len0.len _8); + cref_7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 160 19 160 37] Len0.len _8); goto BB6 } BB6 { _10 <- borrow_mut (Type.creusat_formula_formula_Formula_clauses ( * self_1)); self_1 <- { self_1 with current = (let Type.CreuSat_Formula_Formula a b = * self_1 in Type.CreuSat_Formula_Formula ( ^ _10) b) }; _11 <- clause_2; - _9 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 161 8 161 33] Push0.push _10 _11); + _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 161 8 161 33] Push0.push _10 _11); goto BB7 } BB7 { assume { Resolve1.resolve self_1 }; - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 162 8 162 57] EquisatCompatible0.equisat_compatible ( * old_self_5) ( * self_1) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 162 8 162 57] EquisatCompatible0.equisat_compatible ( * old_self_5) ( * self_1) }; _12 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 163 8 163 56] TrailInvariant0.trail_invariant (Model3.model (Type.creusat_trail_trail_Trail_trail _t_4)) ( * self_1) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 163 8 163 56] TrailInvariant0.trail_invariant (Model3.model (Type.creusat_trail_trail_Trail_trail _t_4)) ( * self_1) }; _13 <- (); _0 <- cref_7; goto BB8 @@ -11740,39 +11569,37 @@ module CreuSat_Formula_Impl2_AddUnit_Interface use mach.int.UInt64 use prelude.Prelude use Type + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model1.modelTy + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model2 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl1_Equisat_Interface as Equisat0 - clone CreuSat_Logic_LogicFormula_Impl1_EquisatCompatible_Interface as EquisatCompatible0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicFormula_Impl2_EquisatCompatible_Interface as EquisatCompatible0 clone CreuSat_Logic_LogicClause_EquisatExtensionInner_Interface as EquisatExtensionInner0 - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model1 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model1 with type t = Type.creusat_formula_formula clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner_Interface as NoDuplicateIndexesInner0 clone CreuSat_Logic_LogicClause_VarsInRangeInner_Interface as VarsInRangeInner0 clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val add_unit [@cfg:stackify] (self : borrowed (Type.creusat_formula_formula)) (clause : Type.creusat_clause_clause) (_t : Type.creusat_trail_trail) : usize - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 168 4 168 40] Invariant0.invariant' ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 169 4 169 40] Invariant1.invariant' _t ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 170 4 170 37] Seq.length (Model0.model clause) = 1} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 171 4 171 49] Invariant2.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 172 4 172 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 173 4 173 61] VarsInRangeInner0.vars_in_range_inner (Model0.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 174 4 174 52] NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model0.model clause)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 175 4 175 55] EquisatExtensionInner0.equisat_extension_inner clause (Model1.model self)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 168 4 168 40] Invariant0.invariant' ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 169 4 169 40] Invariant1.invariant' _t ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 176 4 176 51] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ self)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 177 4 177 46] EquisatCompatible0.equisat_compatible ( * self) ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 178 4 178 35] Equisat0.equisat ( * self) ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 179 4 179 48] UInt64.to_int result = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 180 4 180 57] Seq.length (Model0.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) (UInt64.to_int result))) = 1 } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 181 4 181 69] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) + 1 = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 168 4 168 40] Invariant0.invariant' ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 169 4 169 40] Invariant1.invariant' _t ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 170 4 170 37] Seq.length (Model0.model clause) = 1} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 171 4 171 49] Invariant2.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 172 4 172 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 173 4 173 61] VarsInRangeInner0.vars_in_range_inner (Model0.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 174 4 174 52] NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model0.model clause)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 175 4 175 55] EquisatExtensionInner0.equisat_extension_inner clause (Model1.model self)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 168 4 168 40] Invariant0.invariant' ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 169 4 169 40] Invariant1.invariant' _t ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 176 4 176 51] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ self)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 177 4 177 46] EquisatCompatible0.equisat_compatible ( * self) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 178 4 178 35] Equisat0.equisat ( * self) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 179 4 179 48] UInt64.to_int result = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 180 4 180 57] Seq.length (Model0.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) (UInt64.to_int result))) = 1 } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 181 4 181 69] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) + 1 = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) } end module CreuSat_Formula_Impl2_AddUnit @@ -11783,138 +11610,130 @@ module CreuSat_Formula_Impl2_AddUnit use prelude.Prelude use Type use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model7 with function Model0.model = Model8.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with function Model0.model = Model7.model - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model3 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl1_Model as Model1 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model3.model - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model7.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant3.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = Invariant3.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = SatInner1.index_logic, function IndexLogic0.index_logic = UnsatInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model0 with function Model0.model = Model6.model - clone CreuSat_Logic_LogicClause_Impl2_Equals as Equals0 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicFormula_Compatible as Compatible0 with predicate Equals0.equals = Equals0.equals - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with function Model0.model = Model0.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_SatInner as SatInner0 with function Model0.model = Model2.model, + type a = Type.alloc_alloc_global, function Model0.model = Model0.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model0 with function Model0.model = Invariant2.model, + function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, + function Model1.model = UnitAreSat0.model, function Model0.model = LitIdxIn0.model, + function Model0.model = ClausePostWithRegardsToInner0.model, function Model1.model = Invariant6.model, + function Model0.model = SatInner2.model, function Model0.model = Equals0.model + clone CreuSat_Logic_LogicClause_Impl2_Equals as Equals0 with predicate Equals0.equals = Compatible0.equals + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner, predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_Equisat as Equisat0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss1.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner - clone CreuSat_Logic_LogicFormula_Equisat as Equisat1 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicFormula_EquisatCompatibleInner as EquisatCompatibleInner0 with predicate Compatible0.compatible = Compatible0.compatible, - predicate Equisat0.equisat = Equisat1.equisat - clone CreuSat_Logic_LogicFormula_Impl1_EquisatCompatible as EquisatCompatible0 with function Model0.model = Model3.model, - predicate EquisatCompatibleInner0.equisat_compatible_inner = EquisatCompatibleInner0.equisat_compatible_inner - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant6 with function Model0.model = Model2.model, - function Model1.model = Model0.model - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = Invariant3.invariant', - predicate Invariant1.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model0.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner1.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model2.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model0.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model2.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model2.model, - function Model1.model = Model0.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with function Model0.model = Model0.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant2.invariant', - function Model0.model = Model0.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model2.model, - predicate Invariant0.invariant' = Invariant2.invariant', function Model1.model = Model0.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model3.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, + function Model0.model = Model3.model, function Model3.model = InvariantNoDecisionMirror0.model, + function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, + function Model0.model = SatInner0.model, function Model0.model = LitNotInLessInner0.model, + function Model0.model = Invariant6.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant6 with predicate Invariant1.invariant' = Invariant5.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model7.model, axiom . + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant', + predicate Invariant0.invariant' = Invariant5.invariant' + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss1.sat_inner + clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss0.formula_sat_inner + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner, + predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss1.complete_inner + clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass, + predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat1.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicFormula_Equisat as Equisat1 with predicate Equisat0.equisat = EquisatCompatibleInner0.equisat + clone CreuSat_Logic_LogicFormula_Compatible as Compatible0 with predicate Compatible0.compatible = EquisatCompatibleInner0.compatible + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model7 with function Model2.model = InvariantNoDecision0.model, + function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant4.model, + function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model5.model, - function Model1.model = Model7.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model5.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model5.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model4.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model7.model, - function Model1.model = Model5.model, predicate Invariant0.invariant' = Invariant5.invariant', - function Model2.model = Model4.model, function Model3.model = Model2.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant4.invariant', function Model0.model = Model5.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model4.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model7.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model4.model, function Model1.model = Model5.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicFormula_EquisatCompatibleInner as EquisatCompatibleInner0 with predicate EquisatCompatibleInner0.equisat_compatible_inner = EquisatCompatible0.equisat_compatible_inner + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model1.modelTy + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant2.invariant_internal + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model3 with function Model0.model = Invariant0.model, + function Model0.model = Model1.model, function Model0.model = EquisatCompatible0.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 + clone CreuSat_Logic_LogicFormula_Impl2_EquisatCompatible as EquisatCompatible0 + clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 + clone CreusotContracts_Logic_Model_Impl1_Model as Model1 with type t = Type.creusat_formula_formula + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula clone Alloc_Vec_Impl1_Push_Interface as Push0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = Model2.model - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = Model2.model - let rec cfg add_unit [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 182 4 182 67] (self : borrowed (Type.creusat_formula_formula)) (clause : Type.creusat_clause_clause) (_t : Type.creusat_trail_trail) : usize - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 168 4 168 40] Invariant0.invariant' ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 169 4 169 40] Invariant1.invariant' _t ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 170 4 170 37] Seq.length (Model0.model clause) = 1} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 171 4 171 49] Invariant2.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 172 4 172 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 173 4 173 61] VarsInRangeInner0.vars_in_range_inner (Model0.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 174 4 174 52] NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model0.model clause)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 175 4 175 55] EquisatExtensionInner0.equisat_extension_inner clause (Model1.model self)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 168 4 168 40] Invariant0.invariant' ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 169 4 169 40] Invariant1.invariant' _t ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 176 4 176 51] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ self)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 177 4 177 46] EquisatCompatible0.equisat_compatible ( * self) ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 178 4 178 35] Equisat0.equisat ( * self) ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 179 4 179 48] UInt64.to_int result = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 180 4 180 57] Seq.length (Model0.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) (UInt64.to_int result))) = 1 } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 181 4 181 69] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) + 1 = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) } + type a = Type.alloc_alloc_global + clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global + let rec cfg add_unit [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 182 4 182 67] (self : borrowed (Type.creusat_formula_formula)) (clause : Type.creusat_clause_clause) (_t : Type.creusat_trail_trail) : usize + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 168 4 168 40] Invariant0.invariant' ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 169 4 169 40] Invariant1.invariant' _t ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 170 4 170 37] Seq.length (Model0.model clause) = 1} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 171 4 171 49] Invariant2.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 172 4 172 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 173 4 173 61] VarsInRangeInner0.vars_in_range_inner (Model0.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 174 4 174 52] NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model0.model clause)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 175 4 175 55] EquisatExtensionInner0.equisat_extension_inner clause (Model1.model self)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 168 4 168 40] Invariant0.invariant' ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 169 4 169 40] Invariant1.invariant' _t ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 176 4 176 51] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ self)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 177 4 177 46] EquisatCompatible0.equisat_compatible ( * self) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 178 4 178 35] Equisat0.equisat ( * self) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 179 4 179 48] UInt64.to_int result = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 180 4 180 57] Seq.length (Model0.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) (UInt64.to_int result))) = 1 } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 181 4 181 69] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) + 1 = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) } = var _0 : usize; @@ -11952,24 +11771,24 @@ module CreuSat_Formula_Impl2_AddUnit } BB5 { _5 <- (); - old_self_4 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 183 23 183 38] self_1); + old_self_4 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 183 23 183 38] self_1); goto BB6 } BB6 { _7 <- Type.creusat_formula_formula_Formula_clauses ( * self_1); - cref_6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 184 19 184 37] Len0.len _7); + cref_6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 184 19 184 37] Len0.len _7); goto BB7 } BB7 { _9 <- borrow_mut (Type.creusat_formula_formula_Formula_clauses ( * self_1)); self_1 <- { self_1 with current = (let Type.CreuSat_Formula_Formula a b = * self_1 in Type.CreuSat_Formula_Formula ( ^ _9) b) }; _10 <- clause_2; - _8 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 185 8 185 33] Push0.push _9 _10); + _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 185 8 185 33] Push0.push _9 _10); goto BB8 } BB8 { assume { Resolve0.resolve self_1 }; - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 186 8 186 57] EquisatCompatible0.equisat_compatible ( * old_self_4) ( * self_1) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 186 8 186 57] EquisatCompatible0.equisat_compatible ( * old_self_4) ( * self_1) }; _11 <- (); _0 <- cref_6; goto BB9 @@ -11979,32 +11798,31 @@ module CreuSat_Formula_Impl2_AddUnit } end -module CreuSat_Logic_LogicFormula_Impl1_Sat_Interface +module CreuSat_Logic_LogicFormula_Impl2_Sat_Interface use Type predicate sat (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) end -module CreuSat_Logic_LogicFormula_Impl1_Sat +module CreuSat_Logic_LogicFormula_Impl2_Sat use Type clone CreuSat_Logic_LogicFormula_FormulaSatInner_Interface as FormulaSatInner0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model1 clone CreuSat_Logic_LogicFormula_Impl0_Model_Interface as Model0 - predicate sat [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 150 4 150 44] (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) + predicate sat [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 157 4 157 44] (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 151 8 151 50] FormulaSatInner0.formula_sat_inner (Model0.model self) (Model1.model a) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 158 8 158 50] FormulaSatInner0.formula_sat_inner (Model0.model self) (Model1.model a) end module CreuSat_Formula_Impl2_IsSat_Interface use prelude.Prelude use Type - clone CreuSat_Logic_LogicFormula_Impl1_Sat_Interface as Sat0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_Sat_Interface as Sat0 clone CreuSat_Logic_LogicAssignments_Impl1_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val is_sat [@cfg:stackify] (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) : bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 192 4 192 33] Invariant0.invariant' self} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 193 4 193 35] Invariant1.invariant' a self} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 194 4 194 38] result = Sat0.sat self a } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 192 4 192 33] Invariant0.invariant' self} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 193 4 193 35] Invariant1.invariant' a self} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 194 4 194 38] result = Sat0.sat self a } end module CreuSat_Formula_Impl2_IsSat @@ -12015,50 +11833,46 @@ module CreuSat_Formula_Impl2_IsSat use mach.int.UInt64 use seq.Seq use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant3.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = SatInner1.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = Invariant3.index_logic + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model3 with function Model0.model = Model5.model - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with function Model0.model = Model3.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant2.invariant', - function Model0.model = Model3.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner0 with function Model0.model = Model3.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model0.model = Model4.model - clone CreuSat_Logic_LogicClause_Impl2_Sat as Sat1 with function Model0.model = Model2.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant1 with function Model0.model = Model2.model + type a = Type.alloc_alloc_global, function Model0.model = Model3.model, axiom . + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant2.invariant_internal + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = SatInner0.sat_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model2.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model3 with function Model1.model = InvariantMirror0.model, + function Model0.model = FormulaInvariant0.model, function Model0.model = SatInner0.model, + function Model0.model = Invariant2.model + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat1.sat_inner, + predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner + clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = Sat0.formula_sat_inner + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model0.model = Invariant1.model, + function Model1.model = Sat0.model, function Model0.model = Sat1.model + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicFormula_Impl1_Sat as Sat0 with function Model0.model = Model1.model, - function Model1.model = Model2.model, - predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model0.model, - predicate Invariant0.invariant' = Invariant2.invariant', function Model1.model = Model3.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model1.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model - clone CreuSat_Formula_Impl2_IsClauseSat_Interface as IsClauseSat0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant1.invariant', function Model0.model = Model0.model, - predicate Sat0.sat = Sat1.sat, predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - let rec cfg is_sat [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 195 4 195 49] (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) : bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 192 4 192 33] Invariant0.invariant' self} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 193 4 193 35] Invariant1.invariant' a self} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 194 4 194 38] result = Sat0.sat self a } + type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, + function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Invariant0.model, + function Model0.model = Sat0.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicClause_Impl2_Sat as Sat1 + clone CreuSat_Logic_LogicFormula_Impl2_Sat as Sat0 + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . + clone CreuSat_Formula_Impl2_IsClauseSat_Interface as IsClauseSat0 + clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global + let rec cfg is_sat [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 195 4 195 49] (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) : bool + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 192 4 192 33] Invariant0.invariant' self} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 193 4 193 35] Invariant1.invariant' a self} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 194 4 194 38] result = Sat0.sat self a } = var _0 : bool; @@ -12091,14 +11905,14 @@ module CreuSat_Formula_Impl2_IsSat goto BB1 } BB1 { - invariant prev { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 197 8 197 90] forall k : (int) . 0 <= k && k < UInt64.to_int i_3 -> Sat1.sat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self_1)) k) a_2 }; + invariant prev { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 197 8 197 90] forall k : (int) . 0 <= k && k < UInt64.to_int i_3 -> Sat1.sat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self_1)) k) a_2 }; _7 <- i_3; _9 <- Type.creusat_formula_formula_Formula_clauses self_1; - _8 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 198 18 198 36] Len0.len _9); + _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 198 18 198 36] Len0.len _9); goto BB2 } BB2 { - _6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 198 14 198 36] _7 < _8); + _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 198 14 198 36] _7 < _8); switch (_6) | False -> goto BB7 | _ -> goto BB3 @@ -12108,7 +11922,7 @@ module CreuSat_Formula_Impl2_IsSat _13 <- self_1; _14 <- i_3; _15 <- a_2; - _12 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 199 16 199 40] IsClauseSat0.is_clause_sat _13 _14 _15); + _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 199 16 199 40] IsClauseSat0.is_clause_sat _13 _14 _15); goto BB4 } BB4 { @@ -12124,7 +11938,7 @@ module CreuSat_Formula_Impl2_IsSat } BB6 { _10 <- (); - i_3 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 202 12 202 18] i_3 + (1 : usize)); + i_3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 202 12 202 18] i_3 + (1 : usize)); _5 <- (); goto BB1 } @@ -12151,10 +11965,10 @@ module CreuSat_Logic_LogicWatches_WatcherCrefsInRange use mach.int.UInt64 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . - predicate watcher_crefs_in_range [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 35 0 35 66] (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) + predicate watcher_crefs_in_range [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 35 0 35 66] (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 36 4 39 5] forall j : (int) . 0 <= j && j < Seq.length w -> UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref (Seq.get w j)) < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 36 4 39 5] forall j : (int) . 0 <= j && j < Seq.length w -> UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref (Seq.get w j)) < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) end module CreuSat_Logic_LogicUtil_Pop_Interface type t @@ -12170,9 +11984,9 @@ module CreuSat_Logic_LogicUtil_Pop use mach.int.Int use mach.int.Int32 use seq_ext.SeqExt - function pop [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 68 0 68 34] (s : Seq.seq t) : Seq.seq t = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 69 4 71 5] SeqExt.subsequence s 0 (Seq.length s - 1) - axiom pop_spec : forall s : Seq.seq t . ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 64 0 64 24] Seq.length s > 0) -> ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 67 0 67 75] forall i : (int) . 0 <= i && i < Seq.length (pop s) -> Seq.get (pop s) i = Seq.get s i) && ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 66 0 66 39] Seq.length (pop s) = Seq.length s - 1) && ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 65 0 65 51] pop s = SeqExt.subsequence s 0 (Seq.length s - 1)) + function pop [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 68 0 68 34] (s : Seq.seq t) : Seq.seq t = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 69 4 71 5] SeqExt.subsequence s 0 (Seq.length s - 1) + axiom pop_spec : forall s : Seq.seq t . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 64 0 64 24] Seq.length s > 0) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 67 0 67 75] forall i : (int) . 0 <= i && i < Seq.length (pop s) -> Seq.get (pop s) i = Seq.get s i) && ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 66 0 66 39] Seq.length (pop s) = Seq.length s - 1) && ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 65 0 65 51] pop s = SeqExt.subsequence s 0 (Seq.length s - 1)) end module CreuSat_Logic_LogicUtil_Pop_Impl type t @@ -12181,13 +11995,13 @@ module CreuSat_Logic_LogicUtil_Pop_Impl use mach.int.Int32 use seq_ext.SeqExt let rec ghost function pop (s : Seq.seq t) : Seq.seq t - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 64 0 64 24] Seq.length s > 0} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 65 0 65 51] result = SeqExt.subsequence s 0 (Seq.length s - 1) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 66 0 66 39] Seq.length result = Seq.length s - 1 } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 67 0 67 75] forall i : (int) . 0 <= i && i < Seq.length result -> Seq.get result i = Seq.get s i } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 64 0 64 24] Seq.length s > 0} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 65 0 65 51] result = SeqExt.subsequence s 0 (Seq.length s - 1) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 66 0 66 39] Seq.length result = Seq.length s - 1 } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 67 0 67 75] forall i : (int) . 0 <= i && i < Seq.length result -> Seq.get result i = Seq.get s i } = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 69 4 71 5] SeqExt.subsequence s 0 (Seq.length s - 1) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 69 4 71 5] SeqExt.subsequence s 0 (Seq.length s - 1) end module CreuSat_Logic_LogicWatches_LemmaPopWatchMaintainsWatcherInvariant_Interface use seq.Seq @@ -12206,28 +12020,28 @@ module CreuSat_Logic_LogicWatches_LemmaPopWatchMaintainsWatcherInvariant use Type clone CreuSat_Logic_LogicUtil_Pop_Interface as Pop0 with type t = Type.creusat_watches_watcher, axiom . clone CreuSat_Logic_LogicWatches_WatcherCrefsInRange_Interface as WatcherCrefsInRange0 - function lemma_pop_watch_maintains_watcher_invariant [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 55 0 55 79] (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) : () + function lemma_pop_watch_maintains_watcher_invariant [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 55 0 55 79] (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) : () = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 50 0 50 8] () - axiom lemma_pop_watch_maintains_watcher_invariant_spec : forall w : Seq.seq (Type.creusat_watches_watcher), f : Type.creusat_formula_formula . ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 52 0 52 24] Seq.length w > 0) -> ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 53 0 53 41] WatcherCrefsInRange0.watcher_crefs_in_range w f) -> ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 54 0 54 45] WatcherCrefsInRange0.watcher_crefs_in_range (Pop0.pop w) f) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 50 0 50 8] () + axiom lemma_pop_watch_maintains_watcher_invariant_spec : forall w : Seq.seq (Type.creusat_watches_watcher), f : Type.creusat_formula_formula . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 52 0 52 24] Seq.length w > 0) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 53 0 53 41] WatcherCrefsInRange0.watcher_crefs_in_range w f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 54 0 54 45] WatcherCrefsInRange0.watcher_crefs_in_range (Pop0.pop w) f) end module CreuSat_Logic_LogicWatches_LemmaPopWatchMaintainsWatcherInvariant_Impl use seq.Seq use mach.int.Int use mach.int.Int32 use Type - clone CreuSat_Logic_LogicUtil_Pop as Pop0 with type t = Type.creusat_watches_watcher, axiom . clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_WatcherCrefsInRange as WatcherCrefsInRange0 with function Model0.model = Model0.model + type a = Type.alloc_alloc_global, function Model0.model = WatcherCrefsInRange0.model, axiom . + clone CreuSat_Logic_LogicUtil_Pop as Pop0 with type t = Type.creusat_watches_watcher, axiom . + clone CreuSat_Logic_LogicWatches_WatcherCrefsInRange as WatcherCrefsInRange0 let rec ghost function lemma_pop_watch_maintains_watcher_invariant (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 52 0 52 24] Seq.length w > 0} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 53 0 53 41] WatcherCrefsInRange0.watcher_crefs_in_range w f} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 54 0 54 45] WatcherCrefsInRange0.watcher_crefs_in_range (Pop0.pop w) f } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 52 0 52 24] Seq.length w > 0} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 53 0 53 41] WatcherCrefsInRange0.watcher_crefs_in_range w f} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 54 0 54 45] WatcherCrefsInRange0.watcher_crefs_in_range (Pop0.pop w) f } = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 50 0 50 8] () + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 50 0 50 8] () end module CreuSat_Watches_Impl0_Unwatch_Interface use mach.int.UInt64 @@ -12236,24 +12050,23 @@ module CreuSat_Watches_Impl0_Unwatch_Interface use mach.int.Int32 use seq.Seq use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant1.invariant_mirror clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant1 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant1 with axiom . clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant0 val unwatch [@cfg:stackify] (self : borrowed (Type.creusat_watches_watches)) (f : Type.creusat_formula_formula) (trail : Type.creusat_trail_trail) (cref : usize) (lit : Type.creusat_lit_lit) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 155 4 155 42] Invariant0.invariant' ( * self) f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 156 4 156 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 157 4 157 48] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 158 4 158 30] Invariant1.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 159 4 159 36] Invariant2.invariant' trail f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 160 4 160 43] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 161 4 161 50] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) >= 2} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 155 4 155 42] Invariant0.invariant' ( ^ self) f } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 155 4 155 42] Invariant0.invariant' ( * self) f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 156 4 156 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 157 4 157 48] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 158 4 158 30] Invariant1.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 159 4 159 36] Invariant2.invariant' trail f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 160 4 160 43] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 161 4 161 50] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) >= 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 155 4 155 42] Invariant0.invariant' ( ^ self) f } end module CreuSat_Watches_Impl0_Unwatch @@ -12264,156 +12077,149 @@ module CreuSat_Watches_Impl0_Unwatch use seq.Seq use Type use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model8 with function Model0.model = Model9.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with function Model0.model = Model8.model - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreuSat_Logic_LogicUtil_Pop as Pop0 with type t = Type.creusat_watches_watcher, axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = Invariant6.index_logic, function IndexLogic0.index_logic = SatInner0.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model7.model + type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model2.model = WatchesInvariantInternal0.model, + function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, + function Model0.model = Invariant3.model, function Model1.model = UnitAreSat0.model, + function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, + function Model1.model = Invariant7.model clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with function Model0.model = Model0.model, - function Model1.model = Model1.model - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model4 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicWatches_WatcherCrefsInRange as WatcherCrefsInRange0 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicWatches_LemmaPopWatchMaintainsWatcherInvariant as LemmaPopWatchMaintainsWatcherInvariant0 with predicate WatcherCrefsInRange0.watcher_crefs_in_range = WatcherCrefsInRange0.watcher_crefs_in_range, - function Pop0.pop = Pop0.pop, axiom . + type a = Type.alloc_alloc_global, function Model0.model = WatcherCrefsInRange0.model, + function Model1.model = WatchesInvariantInternal0.model, function Model0.model = InvariantMirror0.model, + function Model0.model = Model4.model, function Model3.model = InvariantNoDecisionMirror0.model, + function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model8.model, axiom . + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model8 with function Model2.model = InvariantNoDecision0.model, + function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant4.model, + function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant2.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model5.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model6.model, - function Model1.model = Model8.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model1.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner0.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model0.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model8.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model0.model, - function Model1.model = Model1.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with function Model0.model = Model1.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant3.invariant', - function Model0.model = Model1.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model0.model, - predicate Invariant0.invariant' = Invariant3.invariant', function Model1.model = Model1.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant1 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model4.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = Invariant6.invariant', - predicate Invariant1.invariant' = Invariant7.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model6.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model1.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model0.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model6.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model8.model, - function Model1.model = Model6.model, predicate Invariant0.invariant' = Invariant5.invariant', - function Model2.model = Model5.model, function Model3.model = Model0.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant4.invariant', function Model0.model = Model6.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model5.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model8.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model5.model, function Model1.model = Model6.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model3.model, - function Model1.model = Model0.model, function Model2.model = Model1.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic + type a = Type.alloc_alloc_global, function Model1.model = Invariant2.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant2.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant2.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant1.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model4 with function Model0.model = Invariant1.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant1.invariant_mirror + clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant0.watches_invariant_internal + clone CreuSat_Logic_LogicWatches_WatcherCrefsInRange as WatcherCrefsInRange0 with predicate WatcherCrefsInRange0.watcher_crefs_in_range = LemmaPopWatchMaintainsWatcherInvariant0.watcher_crefs_in_range + clone CreuSat_Logic_LogicUtil_Pop as Pop0 with type t = Type.creusat_watches_watcher, + function Pop0.pop = LemmaPopWatchMaintainsWatcherInvariant0.pop, axiom . + clone CreuSat_Logic_LogicWatches_LemmaPopWatchMaintainsWatcherInvariant as LemmaPopWatchMaintainsWatcherInvariant0 with axiom . clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant0 with function Model0.model = Model2.model, - predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal + type a = Type.alloc_alloc_global, function Model0.model = Invariant0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant1 with axiom . + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant0 use mach.int.Int64 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_watches_watches - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = seq (Type.creusat_watches_watcher) - clone CreusotContracts_Std1_Slice_Impl0_Model as Model10 with type t = Type.creusat_watches_watcher, axiom . - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_watches_watcher + clone CreusotContracts_Std1_Slice_Impl0_Model as Model10 with type t = Type.creusat_watches_watcher, + function Model0.model = DerefMut0.model, function Model1.model = Swap0.model, function Model0.model = Model11.model, + axiom . + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_watches_watcher, + type ModelTy0.modelTy = Model11.modelTy clone CreusotContracts_Logic_Model_Impl1_Model as Model11 with type t = seq (Type.creusat_watches_watcher), - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model10.model - clone Core_Slice_Impl0_Swap_Interface as Swap0 with type t = Type.creusat_watches_watcher, - function Model0.model = Model11.model, function Model1.model = Model10.model - clone Core_Slice_Index_Impl2_Output as Output1 with type t = Type.creusat_watches_watcher - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = Type.creusat_watches_watcher - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = Type.creusat_watches_watcher + function Model0.model = Swap0.model + clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere + clone Core_Slice_Index_Impl2_Output as Output1 with type t = Type.creusat_watches_watcher, + type Output0.output = Index1.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = Type.creusat_watches_watcher, + predicate HasValue0.has_value = Index1.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = Type.creusat_watches_watcher, + predicate InBounds0.in_bounds = Index1.in_bounds clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) + clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + type Output0.output = Index0.output, type Output0.output = IndexMut0.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + predicate HasValue0.has_value = Index0.has_value, predicate HasValue0.has_value = IndexMut0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + predicate InBounds0.in_bounds = Index0.in_bounds, predicate InBounds0.in_bounds = IndexMut0.in_bounds + clone CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic as ToNegWatchidxLogic0 with function ToNegWatchidxLogic0.to_neg_watchidx_logic = ToNegWatchidx0.to_neg_watchidx_logic clone Alloc_Vec_Impl1_Pop_Interface as Pop1 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = Model3.model + type a = Type.alloc_alloc_global + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_watches_watches + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = seq (Type.creusat_watches_watcher) + clone Core_Slice_Impl0_Swap_Interface as Swap0 with type t = Type.creusat_watches_watcher clone Alloc_Vec_Impl11_DerefMut_Interface as DerefMut0 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = Model10.model, function Model1.model = Model3.model + type a = Type.alloc_alloc_global + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) + clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + type i = usize, type a = Type.alloc_alloc_global clone Alloc_Vec_Impl16_Index_Interface as Index1 with type t = Type.creusat_watches_watcher, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model3.model, - predicate InBounds0.in_bounds = InBounds1.in_bounds, predicate HasValue0.has_value = HasValue1.has_value, - type Output0.output = Output1.output + type a = Type.alloc_alloc_global clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = Model3.model - clone CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic as ToNegWatchidxLogic0 with function IndexLogic0.index_logic = IndexLogic0.index_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic - clone CreuSat_Lit_Impl1_ToNegWatchidx_Interface as ToNegWatchidx0 with function IndexLogic0.index_logic = IndexLogic0.index_logic, - function ToNegWatchidxLogic0.to_neg_watchidx_logic = ToNegWatchidxLogic0.to_neg_watchidx_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type i = usize, type a = Type.alloc_alloc_global, function Model0.model = Model2.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - predicate ResolveElswhere0.resolve_elswhere = ResolveElswhere0.resolve_elswhere, type Output0.output = Output0.output + type a = Type.alloc_alloc_global clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type i = usize, type a = Type.alloc_alloc_global, function Model0.model = Model2.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - type Output0.output = Output0.output - let rec cfg unwatch [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 162 4 162 80] (self : borrowed (Type.creusat_watches_watches)) (f : Type.creusat_formula_formula) (trail : Type.creusat_trail_trail) (cref : usize) (lit : Type.creusat_lit_lit) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 155 4 155 42] Invariant0.invariant' ( * self) f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 156 4 156 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 157 4 157 48] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 158 4 158 30] Invariant1.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 159 4 159 36] Invariant2.invariant' trail f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 160 4 160 43] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 161 4 161 50] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) >= 2} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 155 4 155 42] Invariant0.invariant' ( ^ self) f } + type i = usize, type a = Type.alloc_alloc_global + clone CreuSat_Lit_Impl1_ToNegWatchidx_Interface as ToNegWatchidx0 + let rec cfg unwatch [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 162 4 162 80] (self : borrowed (Type.creusat_watches_watches)) (f : Type.creusat_formula_formula) (trail : Type.creusat_trail_trail) (cref : usize) (lit : Type.creusat_lit_lit) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 155 4 155 42] Invariant0.invariant' ( * self) f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 156 4 156 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 157 4 157 48] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 158 4 158 30] Invariant1.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 159 4 159 36] Invariant2.invariant' trail f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 160 4 160 43] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 161 4 161 50] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) >= 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 155 4 155 42] Invariant0.invariant' ( ^ self) f } = var _0 : (); @@ -12490,7 +12296,7 @@ module CreuSat_Watches_Impl0_Unwatch } BB0 { _7 <- lit_5; - watchidx_6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 163 23 163 44] ToNegWatchidx0.to_neg_watchidx _7); + watchidx_6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 163 23 163 44] ToNegWatchidx0.to_neg_watchidx _7); goto BB1 } BB1 { @@ -12498,20 +12304,20 @@ module CreuSat_Watches_Impl0_Unwatch goto BB2 } BB2 { - invariant self_inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 165 8 165 50] Invariant0.invariant' ( * self_1) f_2 }; + invariant self_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 165 8 165 50] Invariant0.invariant' ( * self_1) f_2 }; _11 <- i_8; _15 <- Type.creusat_watches_watches_Watches_watches ( * self_1); _16 <- watchidx_6; - _14 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 166 18 166 40] Index0.index _15 _16); + _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 166 18 166 40] Index0.index _15 _16); goto BB3 } BB3 { _13 <- _14; - _12 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 166 18 166 46] Len0.len _13); + _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 166 18 166 46] Len0.len _13); goto BB4 } BB4 { - _10 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 166 14 166 46] _11 < _12); + _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 166 14 166 46] _11 < _12); switch (_10) | False -> goto BB21 | _ -> goto BB5 @@ -12520,19 +12326,19 @@ module CreuSat_Watches_Impl0_Unwatch BB5 { _23 <- Type.creusat_watches_watches_Watches_watches ( * self_1); _24 <- watchidx_6; - _22 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 167 15 167 37] Index0.index _23 _24); + _22 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 167 15 167 37] Index0.index _23 _24); goto BB6 } BB6 { _21 <- _22; _25 <- i_8; - _20 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 167 15 167 40] Index1.index _21 _25); + _20 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 167 15 167 40] Index1.index _21 _25); goto BB7 } BB7 { _19 <- Type.creusat_watches_watcher_Watcher_cref _20; _26 <- cref_4; - _18 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 167 15 167 53] _19 = _26); + _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 167 15 167 53] _19 = _26); switch (_18) | False -> goto BB20 | _ -> goto BB8 @@ -12541,27 +12347,27 @@ module CreuSat_Watches_Impl0_Unwatch BB8 { _32 <- Type.creusat_watches_watches_Watches_watches ( * self_1); _33 <- watchidx_6; - _31 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 168 26 168 48] Index0.index _32 _33); + _31 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 168 26 168 48] Index0.index _32 _33); goto BB9 } BB9 { _30 <- _31; - _29 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 168 26 168 54] Len0.len _30); + _29 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 168 26 168 54] Len0.len _30); goto BB10 } BB10 { - end'_28 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 168 26 168 58] _29 - (1 : usize)); + end'_28 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 168 26 168 58] _29 - (1 : usize)); _39 <- borrow_mut (Type.creusat_watches_watches_Watches_watches ( * self_1)); self_1 <- { self_1 with current = (let Type.CreuSat_Watches_Watches a = * self_1 in Type.CreuSat_Watches_Watches ( ^ _39)) }; _40 <- watchidx_6; - _38 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 169 16 169 38] IndexMut0.index_mut _39 _40); + _38 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 169 16 169 38] IndexMut0.index_mut _39 _40); goto BB11 } BB11 { _37 <- borrow_mut ( * _38); _38 <- { _38 with current = ( ^ _37) }; assume { Resolve0.resolve _38 }; - _36 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 169 16 169 51] DerefMut0.deref_mut _37); + _36 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 169 16 169 51] DerefMut0.deref_mut _37); goto BB12 } BB12 { @@ -12569,13 +12375,13 @@ module CreuSat_Watches_Impl0_Unwatch _36 <- { _36 with current = ( ^ _35) }; _41 <- i_8; _42 <- end'_28; - _34 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 169 16 169 51] Swap0.swap _35 _41 _42); + _34 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 169 16 169 51] Swap0.swap _35 _41 _42); goto BB13 } BB13 { assume { Resolve1.resolve _36 }; _44 <- (); - old_w_43 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 170 28 170 43] self_1); + old_w_43 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 170 28 170 43] self_1); goto BB14 } BB14 { @@ -12583,13 +12389,13 @@ module CreuSat_Watches_Impl0_Unwatch self_1 <- { self_1 with current = (let Type.CreuSat_Watches_Watches a = * self_1 in Type.CreuSat_Watches_Watches ( ^ _49)) }; assume { Resolve2.resolve self_1 }; _50 <- watchidx_6; - _48 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 171 22 171 44] IndexMut0.index_mut _49 _50); + _48 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 171 22 171 44] IndexMut0.index_mut _49 _50); goto BB15 } BB15 { _47 <- borrow_mut ( * _48); _48 <- { _48 with current = ( ^ _47) }; - _46 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 171 22 171 50] Pop1.pop _47); + _46 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 171 22 171 50] Pop1.pop _47); goto BB16 } BB16 { @@ -12607,17 +12413,17 @@ module CreuSat_Watches_Impl0_Unwatch } BB19 { w_52 <- Type.core_option_option_Some_0 _46; - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 173 24 173 62] ^ old_w_43 = ^ self_1 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 173 24 173 62] ^ old_w_43 = ^ self_1 }; _53 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 174 24 174 122] let _ = LemmaPopWatchMaintainsWatcherInvariant0.lemma_pop_watch_maintains_watcher_invariant (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * old_w_43))) (UInt64.to_int watchidx_6))) f_2 in true }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 174 24 174 122] let _ = LemmaPopWatchMaintainsWatcherInvariant0.lemma_pop_watch_maintains_watcher_invariant (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * old_w_43))) (UInt64.to_int watchidx_6))) f_2 in true }; _54 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 175 24 175 100] WatcherCrefsInRange0.watcher_crefs_in_range (Pop0.pop (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * old_w_43))) (UInt64.to_int watchidx_6)))) f_2 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 175 24 175 100] WatcherCrefsInRange0.watcher_crefs_in_range (Pop0.pop (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * old_w_43))) (UInt64.to_int watchidx_6)))) f_2 }; _55 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 176 24 176 103] Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * self_1))) (UInt64.to_int watchidx_6)) = Pop0.pop (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * old_w_43))) (UInt64.to_int watchidx_6))) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 176 24 176 103] Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * self_1))) (UInt64.to_int watchidx_6)) = Pop0.pop (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * old_w_43))) (UInt64.to_int watchidx_6))) }; _56 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 177 24 177 94] WatcherCrefsInRange0.watcher_crefs_in_range (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * self_1))) (UInt64.to_int watchidx_6))) f_2 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 177 24 177 94] WatcherCrefsInRange0.watcher_crefs_in_range (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * self_1))) (UInt64.to_int watchidx_6))) f_2 }; _57 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 178 24 178 57] Invariant0.invariant' ( * self_1) f_2 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 178 24 178 57] Invariant0.invariant' ( * self_1) f_2 }; _58 <- (); _45 <- (); _0 <- (); @@ -12625,7 +12431,7 @@ module CreuSat_Watches_Impl0_Unwatch } BB20 { _17 <- (); - i_8 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 186 12 186 18] i_8 + (1 : usize)); + i_8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 186 12 186 18] i_8 + (1 : usize)); _9 <- (); goto BB2 } @@ -12646,27 +12452,26 @@ module CreuSat_Formula_Impl2_DeleteClause_Interface use mach.int.Int32 use seq.Seq use Type - clone CreuSat_Logic_LogicFormula_Impl1_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant1.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant1 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant1 with axiom . clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant0 val delete_clause [@cfg:stackify] (self : borrowed (Type.creusat_formula_formula)) (cref : usize) (watches : borrowed (Type.creusat_watches_watches)) (t : Type.creusat_trail_trail) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 208 4 208 51] Invariant0.invariant' ( * watches) ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 209 4 209 40] Invariant1.invariant' ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 210 4 210 42] Invariant2.invariant' t ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 211 4 211 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 212 4 212 52] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * self))) (UInt64.to_int cref))) > 1} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 213 4 213 46] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * self)))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 208 4 208 51] Invariant0.invariant' ( ^ watches) ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 209 4 209 40] Invariant1.invariant' ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 210 4 210 42] Invariant2.invariant' t ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 214 4 214 35] Equisat0.equisat ( * self) ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 215 4 215 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 208 4 208 51] Invariant0.invariant' ( * watches) ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 209 4 209 40] Invariant1.invariant' ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 210 4 210 42] Invariant2.invariant' t ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 211 4 211 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 212 4 212 52] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * self))) (UInt64.to_int cref))) > 1} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 213 4 213 46] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * self)))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 208 4 208 51] Invariant0.invariant' ( ^ watches) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 209 4 209 40] Invariant1.invariant' ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 210 4 210 42] Invariant2.invariant' t ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 214 4 214 35] Equisat0.equisat ( * self) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 215 4 215 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } end module CreuSat_Formula_Impl2_DeleteClause @@ -12677,147 +12482,135 @@ module CreuSat_Formula_Impl2_DeleteClause use seq.Seq use Type use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model8 with function Model0.model = Model9.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with function Model0.model = Model8.model - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model8.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = Invariant6.index_logic, function IndexLogic0.index_logic = SatInner1.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, + predicate SatInner0.sat_inner = SatInner2.sat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model6.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with function Model0.model = Model1.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model1.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner1.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model1.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with function Model0.model = Model1.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant3.invariant', - function Model0.model = Model1.model + type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model2.model = WatchesInvariantInternal0.model, + function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, + function Model0.model = Invariant3.model, function Model1.model = UnitAreSat0.model, + function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, + function Model1.model = Invariant7.model, function Model0.model = SatInner2.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = SatInner0.sat_inner + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with function Model0.model = Model0.model, - function Model1.model = Model1.model - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = Invariant6.invariant', - predicate Invariant1.invariant' = Invariant7.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model0.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicFormula_Impl1_SatInner as SatInner0 with function Model0.model = Model0.model, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_Equisat as Equisat0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model0.model, - function Model1.model = Model1.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model0.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model3 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model0.model, - predicate Invariant0.invariant' = Invariant3.invariant', function Model1.model = Model1.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant1 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model3.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model7.model, - function Model1.model = Model0.model, function Model2.model = Model1.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic + type a = Type.alloc_alloc_global, function Model1.model = WatchesInvariantInternal0.model, + function Model0.model = InvariantMirror0.model, function Model0.model = Model3.model, + function Model3.model = InvariantNoDecisionMirror0.model, function Model0.model = LongArePostUnitInner0.model, + function Model0.model = UnitAreSat0.model, function Model0.model = SatInner0.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model8.model, axiom . + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal + clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model8 with function Model2.model = InvariantNoDecision0.model, + function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant4.model, + function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant2.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model5.model, - function Model1.model = Model8.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model5.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model5.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model4.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model8.model, - function Model1.model = Model5.model, predicate Invariant0.invariant' = Invariant5.invariant', - function Model2.model = Model4.model, function Model3.model = Model0.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant4.invariant', function Model0.model = Model5.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model4.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model8.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model4.model, function Model1.model = Model5.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + type a = Type.alloc_alloc_global, function Model1.model = Invariant2.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant2.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant2.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant1.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model3 with function Model0.model = Invariant1.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant1.invariant_mirror + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant0.watches_invariant_internal clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant0 with function Model0.model = Model2.model, - predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal + type a = Type.alloc_alloc_global, function Model0.model = Invariant0.model, axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant1 with axiom . + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant0 + clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.creusat_clause_clause, + predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model10.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model as Model10 with type t = Type.creusat_clause_clause, + function Model0.model = Index1.model + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_clause_clause + clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause, + type Output0.output = Index0.output, type Output0.output = IndexMut0.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause, + predicate HasValue0.has_value = Index0.has_value, predicate HasValue0.has_value = IndexMut0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause, + predicate InBounds0.in_bounds = Index0.in_bounds, predicate InBounds0.in_bounds = IndexMut0.in_bounds clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.creusat_clause_clause + clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.creusat_clause_clause, type i = usize, + type a = Type.alloc_alloc_global clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_formula_formula clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_watches_watches - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_clause_clause - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Logic_Model_Impl0_Model as Model10 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model1.model - clone CreuSat_Clause_Impl0_Index_Interface as Index1 with function Model0.model = Model10.model - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.creusat_clause_clause, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - predicate ResolveElswhere0.resolve_elswhere = ResolveElswhere0.resolve_elswhere, type Output0.output = Output0.output + clone CreuSat_Watches_Impl0_Unwatch_Interface as Unwatch0 + clone CreuSat_Clause_Impl0_Index_Interface as Index1 clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.creusat_clause_clause, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - type Output0.output = Output0.output - clone CreuSat_Watches_Impl0_Unwatch_Interface as Unwatch0 with predicate Invariant0.invariant' = Invariant0.invariant', - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate Invariant1.invariant' = Invariant1.invariant', - predicate Invariant2.invariant' = Invariant2.invariant', function Model0.model = Model0.model, - function Model1.model = Model1.model, predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - let rec cfg delete_clause [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 216 4 216 78] (self : borrowed (Type.creusat_formula_formula)) (cref : usize) (watches : borrowed (Type.creusat_watches_watches)) (t : Type.creusat_trail_trail) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 208 4 208 51] Invariant0.invariant' ( * watches) ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 209 4 209 40] Invariant1.invariant' ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 210 4 210 42] Invariant2.invariant' t ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 211 4 211 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 212 4 212 52] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * self))) (UInt64.to_int cref))) > 1} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 213 4 213 46] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * self)))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 208 4 208 51] Invariant0.invariant' ( ^ watches) ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 209 4 209 40] Invariant1.invariant' ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 210 4 210 42] Invariant2.invariant' t ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 214 4 214 35] Equisat0.equisat ( * self) ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 215 4 215 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } + type a = Type.alloc_alloc_global + let rec cfg delete_clause [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 216 4 216 78] (self : borrowed (Type.creusat_formula_formula)) (cref : usize) (watches : borrowed (Type.creusat_watches_watches)) (t : Type.creusat_trail_trail) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 208 4 208 51] Invariant0.invariant' ( * watches) ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 209 4 209 40] Invariant1.invariant' ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 210 4 210 42] Invariant2.invariant' t ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 211 4 211 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 212 4 212 52] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * self))) (UInt64.to_int cref))) > 1} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 213 4 213 46] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * self)))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 208 4 208 51] Invariant0.invariant' ( ^ watches) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 209 4 209 40] Invariant1.invariant' ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 210 4 210 42] Invariant2.invariant' t ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 214 4 214 35] Equisat0.equisat ( * self) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 215 4 215 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } = var _0 : (); @@ -12864,7 +12657,7 @@ module CreuSat_Formula_Impl2_DeleteClause } BB0 { _6 <- (); - old_f_5 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 217 20 217 35] self_1); + old_f_5 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 217 20 217 35] self_1); goto BB1 } BB1 { @@ -12875,17 +12668,17 @@ module CreuSat_Formula_Impl2_DeleteClause _11 <- cref_2; _16 <- Type.creusat_formula_formula_Formula_clauses ( * self_1); _17 <- cref_2; - _15 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 218 39 218 57] Index0.index _16 _17); + _15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 218 39 218 57] Index0.index _16 _17); goto BB2 } BB2 { _14 <- _15; - _13 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 218 39 218 60] Index1.index _14 (0 : usize)); + _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 218 39 218 60] Index1.index _14 (0 : usize)); goto BB3 } BB3 { _12 <- _13; - _7 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 218 8 218 61] Unwatch0.unwatch _8 _9 _10 _11 _12); + _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 218 8 218 61] Unwatch0.unwatch _8 _9 _10 _11 _12); goto BB4 } BB4 { @@ -12896,17 +12689,17 @@ module CreuSat_Formula_Impl2_DeleteClause _22 <- cref_2; _27 <- Type.creusat_formula_formula_Formula_clauses ( * self_1); _28 <- cref_2; - _26 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 219 39 219 57] Index0.index _27 _28); + _26 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 219 39 219 57] Index0.index _27 _28); goto BB5 } BB5 { _25 <- _26; - _24 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 219 39 219 60] Index1.index _25 (1 : usize)); + _24 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 219 39 219 60] Index1.index _25 (1 : usize)); goto BB6 } BB6 { _23 <- _24; - _18 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 219 8 219 61] Unwatch0.unwatch _19 _20 _21 _22 _23); + _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 219 8 219 61] Unwatch0.unwatch _19 _20 _21 _22 _23); goto BB7 } BB7 { @@ -12915,17 +12708,17 @@ module CreuSat_Formula_Impl2_DeleteClause self_1 <- { self_1 with current = (let Type.CreuSat_Formula_Formula a b = * self_1 in Type.CreuSat_Formula_Formula ( ^ _30) b) }; assume { Resolve1.resolve self_1 }; _31 <- cref_2; - _29 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 220 8 220 26] IndexMut0.index_mut _30 _31); + _29 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 220 8 220 26] IndexMut0.index_mut _30 _31); goto BB8 } BB8 { _29 <- { _29 with current = (let Type.CreuSat_Clause_Clause a b c d = * _29 in Type.CreuSat_Clause_Clause true b c d) }; assume { Resolve2.resolve _29 }; - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 221 8 222 74] forall i : (int) . 0 <= i && i < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * self_1))) (UInt64.to_int cref_2))) -> Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * self_1))) (UInt64.to_int cref_2))) i = Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * old_f_5))) (UInt64.to_int cref_2))) i }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 221 8 222 74] forall i : (int) . 0 <= i && i < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * self_1))) (UInt64.to_int cref_2))) -> Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * self_1))) (UInt64.to_int cref_2))) i = Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * old_f_5))) (UInt64.to_int cref_2))) i }; _32 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 223 8 223 43] Equisat0.equisat ( * old_f_5) ( * self_1) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 223 8 223 43] Equisat0.equisat ( * old_f_5) ( * self_1) }; _33 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 224 8 224 46] ^ self_1 = ^ old_f_5 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 224 8 224 46] ^ self_1 = ^ old_f_5 }; _34 <- (); _0 <- (); return _0 @@ -12938,23 +12731,22 @@ module CreuSat_Formula_Impl2_DeleteClauses_Interface use prelude.Prelude use mach.int.Int32 use Type - clone CreuSat_Logic_LogicFormula_Impl1_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val delete_clauses [@cfg:stackify] (self : borrowed (Type.creusat_formula_formula)) (watches : borrowed (Type.creusat_watches_watches)) (t : Type.creusat_trail_trail) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 229 4 229 40] Invariant0.invariant' ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 230 4 230 51] Invariant1.invariant' ( * watches) ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 231 4 231 42] Invariant2.invariant' t ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 232 4 232 35] Invariant2.invariant' t ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 233 4 233 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 229 4 229 40] Invariant0.invariant' ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 230 4 230 51] Invariant1.invariant' ( ^ watches) ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 231 4 231 42] Invariant2.invariant' t ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 234 4 234 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 235 4 235 35] Equisat0.equisat ( * self) ( ^ self) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 229 4 229 40] Invariant0.invariant' ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 230 4 230 51] Invariant1.invariant' ( * watches) ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 231 4 231 42] Invariant2.invariant' t ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 232 4 232 35] Invariant2.invariant' t ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 233 4 233 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 229 4 229 40] Invariant0.invariant' ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 230 4 230 51] Invariant1.invariant' ( ^ watches) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 231 4 231 42] Invariant2.invariant' t ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 234 4 234 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 235 4 235 35] Equisat0.equisat ( * self) ( ^ self) } end module CreuSat_Formula_Impl2_DeleteClauses @@ -12964,148 +12756,132 @@ module CreuSat_Formula_Impl2_DeleteClauses use mach.int.Int32 use Type use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = Invariant6.index_logic, function IndexLogic0.index_logic = SatInner1.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, + predicate SatInner0.sat_inner = SatInner2.sat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model6 with function Model0.model = Model9.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model4 with function Model0.model = Model8.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant3 with function Model0.model = Model4.model - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with function Model0.model = Model6.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model6.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner1.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model4.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with function Model0.model = Model6.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant4.invariant', - function Model0.model = Model6.model - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model6.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . + type a = Type.alloc_alloc_global, function Model0.model = Model6.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model6 with function Model1.model = InvariantMirror0.model, + function Model0.model = FormulaInvariant0.model, function Model2.model = WatchesInvariantInternal0.model, + function Model0.model = Invariant4.model, function Model1.model = UnitAreSat0.model, + function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, + function Model1.model = Invariant7.model, function Model0.model = SatInner2.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = SatInner0.sat_inner + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with function Model0.model = Model5.model, - function Model1.model = Model6.model - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = Invariant6.invariant', - predicate Invariant1.invariant' = Invariant7.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model5.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicFormula_Impl1_SatInner as SatInner0 with function Model0.model = Model5.model, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_Equisat as Equisat0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model5.model, - function Model1.model = Model6.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model5.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model7.model, - function Model1.model = Model5.model, function Model2.model = Model6.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Model5.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model5.model, - predicate Invariant0.invariant' = Invariant4.invariant', function Model1.model = Model6.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model0.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . + type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, + function Model0.model = Model0.model, function Model1.model = WatchesInvariantInternal0.model, + function Model3.model = InvariantNoDecisionMirror0.model, function Model0.model = LongArePostUnitInner0.model, + function Model0.model = UnitAreSat0.model, function Model0.model = SatInner0.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant4.invariant_internal + clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model4.model, axiom . + clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model4 with function Model0.model = Invariant3.model, + function Model2.model = InvariantNoDecision0.model, function Model0.model = InvariantNoDecisionMirror0.model, + function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant2.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model3.model, - function Model1.model = Model4.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model3.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model3.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model2.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model4.model, - function Model1.model = Model3.model, predicate Invariant0.invariant' = Invariant5.invariant', - function Model2.model = Model2.model, function Model3.model = Model5.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant3.invariant', function Model0.model = Model3.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model2.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model4.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model2.model, function Model1.model = Model3.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + type a = Type.alloc_alloc_global, function Model1.model = Invariant2.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant2.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant2.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant1.watches_invariant_internal clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant1 with function Model0.model = Model1.model, - predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal + type a = Type.alloc_alloc_global, function Model0.model = Invariant1.model, axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Invariant0.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . + clone CreuSat_Logic_LogicClause_Impl2_Sat as Sat1 with predicate Sat0.sat = IsClauseSat0.sat + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model10.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model as Model10 with type t = Type.creusat_clause_clause, + function Model0.model = Len1.model + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_clause_clause + clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause, + type Output0.output = Index0.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause, + predicate HasValue0.has_value = Index0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause, + predicate InBounds0.in_bounds = Index0.in_bounds clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_watches_watches clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_clause_clause - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Logic_Model_Impl0_Model as Model10 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model6.model - clone CreuSat_Clause_Impl3_Len_Interface as Len1 with function Model0.model = Model10.model - clone CreuSat_Logic_LogicClause_Impl2_Sat as Sat1 with function Model0.model = Model4.model, - predicate SatInner0.sat_inner = SatInner2.sat_inner + clone CreuSat_Formula_Impl2_DeleteClause_Interface as DeleteClause0 + clone CreuSat_Formula_Impl2_IsClauseSat_Interface as IsClauseSat0 + clone CreuSat_Clause_Impl3_Len_Interface as Len1 clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.creusat_clause_clause, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model5.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - type Output0.output = Output0.output - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = Model5.model - clone CreuSat_Formula_Impl2_IsClauseSat_Interface as IsClauseSat0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant3.invariant', function Model0.model = Model5.model, - predicate Sat0.sat = Sat1.sat, predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_Formula_Impl2_DeleteClause_Interface as DeleteClause0 with predicate Invariant0.invariant' = Invariant1.invariant', - predicate Invariant1.invariant' = Invariant0.invariant', predicate Invariant2.invariant' = Invariant2.invariant', - function Model0.model = Model5.model, function Model1.model = Model6.model, - predicate Equisat0.equisat = Equisat0.equisat, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - let rec cfg delete_clauses [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 236 4 236 70] (self : borrowed (Type.creusat_formula_formula)) (watches : borrowed (Type.creusat_watches_watches)) (t : Type.creusat_trail_trail) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 229 4 229 40] Invariant0.invariant' ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 230 4 230 51] Invariant1.invariant' ( * watches) ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 231 4 231 42] Invariant2.invariant' t ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 232 4 232 35] Invariant2.invariant' t ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 233 4 233 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 229 4 229 40] Invariant0.invariant' ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 230 4 230 51] Invariant1.invariant' ( ^ watches) ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 231 4 231 42] Invariant2.invariant' t ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 234 4 234 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 235 4 235 35] Equisat0.equisat ( * self) ( ^ self) } + type a = Type.alloc_alloc_global + clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global + let rec cfg delete_clauses [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 236 4 236 70] (self : borrowed (Type.creusat_formula_formula)) (watches : borrowed (Type.creusat_watches_watches)) (t : Type.creusat_trail_trail) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 229 4 229 40] Invariant0.invariant' ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 230 4 230 51] Invariant1.invariant' ( * watches) ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 231 4 231 42] Invariant2.invariant' t ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 232 4 232 35] Invariant2.invariant' t ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 233 4 233 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 229 4 229 40] Invariant0.invariant' ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 230 4 230 51] Invariant1.invariant' ( ^ watches) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 231 4 231 42] Invariant2.invariant' t ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 234 4 234 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 235 4 235 35] Equisat0.equisat ( * self) ( ^ self) } = var _0 : (); @@ -13157,12 +12933,12 @@ module CreuSat_Formula_Impl2_DeleteClauses } BB0 { _5 <- (); - old_f_4 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 237 20 237 35] self_1); + old_f_4 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 237 20 237 35] self_1); goto BB1 } BB1 { _7 <- (); - old_w_6 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 238 20 238 38] watches_2); + old_w_6 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 238 20 238 38] watches_2); goto BB2 } BB2 { @@ -13170,20 +12946,20 @@ module CreuSat_Formula_Impl2_DeleteClauses goto BB3 } BB3 { - invariant w_inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 241 8 241 53] Invariant1.invariant' ( * watches_2) ( * self_1) }; - invariant t_inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 242 8 242 47] Invariant2.invariant' t_3 ( * self_1) }; - invariant f_inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 243 8 243 45] Invariant0.invariant' ( * self_1) }; - invariant proph_w { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 244 8 244 57] ^ watches_2 = ^ old_w_6 }; - invariant proph_f { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 245 8 245 54] ^ self_1 = ^ old_f_4 }; - invariant num_vars_unch { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 246 8 246 70] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self_1)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * old_f_4)) }; - invariant equi { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 247 8 247 56] Equisat0.equisat ( * self_1) ( * old_f_4) }; + invariant w_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 241 8 241 53] Invariant1.invariant' ( * watches_2) ( * self_1) }; + invariant t_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 242 8 242 47] Invariant2.invariant' t_3 ( * self_1) }; + invariant f_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 243 8 243 45] Invariant0.invariant' ( * self_1) }; + invariant proph_w { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 244 8 244 57] ^ watches_2 = ^ old_w_6 }; + invariant proph_f { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 245 8 245 54] ^ self_1 = ^ old_f_4 }; + invariant num_vars_unch { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 246 8 246 70] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self_1)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * old_f_4)) }; + invariant equi { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 247 8 247 56] Equisat0.equisat ( * self_1) ( * old_f_4) }; _11 <- i_8; _13 <- Type.creusat_formula_formula_Formula_clauses ( * self_1); - _12 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 248 18 248 36] Len0.len _13); + _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 248 18 248 36] Len0.len _13); goto BB4 } BB4 { - _10 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 248 14 248 36] _11 < _12); + _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 248 14 248 36] _11 < _12); switch (_10) | False -> goto BB20 | _ -> goto BB5 @@ -13192,7 +12968,7 @@ module CreuSat_Formula_Impl2_DeleteClauses BB5 { _18 <- Type.creusat_formula_formula_Formula_clauses ( * self_1); _19 <- i_8; - _17 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 249 16 249 31] Index0.index _18 _19); + _17 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 249 16 249 31] Index0.index _18 _19); goto BB6 } BB6 { @@ -13204,11 +12980,11 @@ module CreuSat_Formula_Impl2_DeleteClauses end } BB7 { - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 250 16 250 61] Invariant3.invariant' (Type.creusat_trail_trail_Trail_assignments t_3) ( * self_1) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 250 16 250 61] Invariant3.invariant' (Type.creusat_trail_trail_Trail_assignments t_3) ( * self_1) }; _20 <- (); _26 <- Type.creusat_formula_formula_Formula_clauses ( * self_1); _27 <- i_8; - _25 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 251 19 251 34] Index0.index _26 _27); + _25 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 251 19 251 34] Index0.index _26 _27); goto BB11 } BB8 { @@ -13220,7 +12996,7 @@ module CreuSat_Formula_Impl2_DeleteClauses _30 <- i_8; _32 <- Type.creusat_trail_trail_Trail_assignments t_3; _31 <- _32; - _28 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 251 48 251 85] IsClauseSat0.is_clause_sat _29 _30 _31); + _28 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 251 48 251 85] IsClauseSat0.is_clause_sat _29 _30 _31); goto BB13 } BB10 { @@ -13231,11 +13007,11 @@ module CreuSat_Formula_Impl2_DeleteClauses } BB11 { _24 <- _25; - _23 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 251 19 251 40] Len1.len _24); + _23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 251 19 251 40] Len1.len _24); goto BB12 } BB12 { - _22 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 251 19 251 44] _23 > (1 : usize)); + _22 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 251 19 251 44] _23 > (1 : usize)); switch (_22) | False -> goto BB8 | _ -> goto BB9 @@ -13252,7 +13028,7 @@ module CreuSat_Formula_Impl2_DeleteClauses _36 <- borrow_mut ( * watches_2); watches_2 <- { watches_2 with current = ( ^ _36) }; _37 <- t_3; - _33 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 252 20 252 53] DeleteClause0.delete_clause _34 _35 _36 _37); + _33 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 252 20 252 53] DeleteClause0.delete_clause _34 _35 _36 _37); goto BB15 } BB15 { @@ -13271,7 +13047,7 @@ module CreuSat_Formula_Impl2_DeleteClauses goto BB19 } BB19 { - i_8 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 255 12 255 18] i_8 + (1 : usize)); + i_8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 255 12 255 18] i_8 + (1 : usize)); _9 <- (); goto BB3 } @@ -13289,22 +13065,21 @@ module CreuSat_Formula_Impl2_SimplifyFormula_Interface use prelude.Prelude use mach.int.Int32 use Type - clone CreuSat_Logic_LogicFormula_Impl1_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val simplify_formula [@cfg:stackify] (self : borrowed (Type.creusat_formula_formula)) (watches : borrowed (Type.creusat_watches_watches)) (t : Type.creusat_trail_trail) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 262 4 262 40] Invariant0.invariant' ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 263 4 263 51] Invariant1.invariant' ( * watches) ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 264 4 264 42] Invariant2.invariant' t ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 265 4 265 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 262 4 262 40] Invariant0.invariant' ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 263 4 263 51] Invariant1.invariant' ( ^ watches) ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 264 4 264 42] Invariant2.invariant' t ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 266 4 266 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 267 4 267 35] Equisat0.equisat ( * self) ( ^ self) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 262 4 262 40] Invariant0.invariant' ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 263 4 263 51] Invariant1.invariant' ( * watches) ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 264 4 264 42] Invariant2.invariant' t ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 265 4 265 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 262 4 262 40] Invariant0.invariant' ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 263 4 263 51] Invariant1.invariant' ( ^ watches) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 264 4 264 42] Invariant2.invariant' t ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 266 4 266 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 267 4 267 35] Equisat0.equisat ( * self) ( ^ self) } end module CreuSat_Formula_Impl2_SimplifyFormula @@ -13314,127 +13089,115 @@ module CreuSat_Formula_Impl2_SimplifyFormula use mach.int.Int32 use Type use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model7 with function Model0.model = Model9.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with function Model0.model = Model7.model + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = Invariant6.index_logic, function IndexLogic0.index_logic = SatInner1.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, + predicate SatInner0.sat_inner = SatInner2.sat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model5 with function Model0.model = Model8.model - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with function Model0.model = Model5.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model5.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner1.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model7.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with function Model0.model = Model5.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant3.invariant', - function Model0.model = Model5.model - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model5.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . + type a = Type.alloc_alloc_global, function Model0.model = Model5.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model5 with function Model1.model = InvariantMirror0.model, + function Model0.model = FormulaInvariant0.model, function Model2.model = WatchesInvariantInternal0.model, + function Model0.model = Invariant3.model, function Model1.model = UnitAreSat0.model, + function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, + function Model1.model = Invariant7.model, function Model0.model = SatInner2.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = SatInner0.sat_inner + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with function Model0.model = Model4.model, - function Model1.model = Model5.model - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = Invariant6.invariant', - predicate Invariant1.invariant' = Invariant7.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model4.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicFormula_Impl1_SatInner as SatInner0 with function Model0.model = Model4.model, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_Equisat as Equisat0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model4.model, - function Model1.model = Model5.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model4.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model6.model, - function Model1.model = Model4.model, function Model2.model = Model5.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Model4.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model4.model, - predicate Invariant0.invariant' = Invariant3.invariant', function Model1.model = Model5.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model0.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . + type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, + function Model0.model = Model0.model, function Model1.model = WatchesInvariantInternal0.model, + function Model3.model = InvariantNoDecisionMirror0.model, function Model0.model = LongArePostUnitInner0.model, + function Model0.model = UnitAreSat0.model, function Model0.model = SatInner0.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model7.model, axiom . + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal + clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model7 with function Model2.model = InvariantNoDecision0.model, + function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant4.model, + function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant2.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model3.model, - function Model1.model = Model7.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model3.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model3.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model2.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model7.model, - function Model1.model = Model3.model, predicate Invariant0.invariant' = Invariant5.invariant', - function Model2.model = Model2.model, function Model3.model = Model4.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant4.invariant', function Model0.model = Model3.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model2.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model7.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model2.model, function Model1.model = Model3.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + type a = Type.alloc_alloc_global, function Model1.model = Invariant2.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant2.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant2.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant1.watches_invariant_internal clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant1 with function Model0.model = Model1.model, - predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal + type a = Type.alloc_alloc_global, function Model0.model = Invariant1.model, axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Invariant0.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_watches_watches clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula - clone CreuSat_Formula_Impl2_DeleteClauses_Interface as DeleteClauses0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant1.invariant', predicate Invariant2.invariant' = Invariant2.invariant', - predicate Equisat0.equisat = Equisat0.equisat, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - let rec cfg simplify_formula [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 268 4 268 72] (self : borrowed (Type.creusat_formula_formula)) (watches : borrowed (Type.creusat_watches_watches)) (t : Type.creusat_trail_trail) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 262 4 262 40] Invariant0.invariant' ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 263 4 263 51] Invariant1.invariant' ( * watches) ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 264 4 264 42] Invariant2.invariant' t ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 265 4 265 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 262 4 262 40] Invariant0.invariant' ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 263 4 263 51] Invariant1.invariant' ( ^ watches) ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 264 4 264 42] Invariant2.invariant' t ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 266 4 266 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 267 4 267 35] Equisat0.equisat ( * self) ( ^ self) } + clone CreuSat_Formula_Impl2_DeleteClauses_Interface as DeleteClauses0 + let rec cfg simplify_formula [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 268 4 268 72] (self : borrowed (Type.creusat_formula_formula)) (watches : borrowed (Type.creusat_watches_watches)) (t : Type.creusat_trail_trail) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 262 4 262 40] Invariant0.invariant' ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 263 4 263 51] Invariant1.invariant' ( * watches) ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 264 4 264 42] Invariant2.invariant' t ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 265 4 265 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 262 4 262 40] Invariant0.invariant' ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 263 4 263 51] Invariant1.invariant' ( ^ watches) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 264 4 264 42] Invariant2.invariant' t ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 266 4 266 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 267 4 267 35] Equisat0.equisat ( * self) ( ^ self) } = var _0 : (); @@ -13457,7 +13220,7 @@ module CreuSat_Formula_Impl2_SimplifyFormula _6 <- borrow_mut ( * watches_2); watches_2 <- { watches_2 with current = ( ^ _6) }; _7 <- t_3; - _4 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 270 8 270 39] DeleteClauses0.delete_clauses _5 _6 _7); + _4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 270 8 270 39] DeleteClauses0.delete_clauses _5 _6 _7); goto BB1 } BB1 { @@ -13474,24 +13237,23 @@ module CreuSat_Formula_Impl2_ReduceDb_Interface use prelude.Prelude use mach.int.Int32 use Type - clone CreuSat_Logic_LogicFormula_Impl1_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val reduceDB [@cfg:stackify] (self : borrowed (Type.creusat_formula_formula)) (watches : borrowed (Type.creusat_watches_watches)) (t : Type.creusat_trail_trail) (s : borrowed (Type.creusat_solver_solver)) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 275 4 275 40] Invariant0.invariant' ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 276 4 276 51] Invariant1.invariant' ( * watches) ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 277 4 277 42] Invariant2.invariant' t ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 278 4 278 33] Invariant0.invariant' ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 279 4 279 35] Invariant2.invariant' t ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 280 4 280 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 275 4 275 40] Invariant0.invariant' ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 276 4 276 51] Invariant1.invariant' ( ^ watches) ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 277 4 277 42] Invariant2.invariant' t ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 281 4 281 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 282 4 282 35] Equisat0.equisat ( * self) ( ^ self) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 275 4 275 40] Invariant0.invariant' ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 276 4 276 51] Invariant1.invariant' ( * watches) ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 277 4 277 42] Invariant2.invariant' t ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 278 4 278 33] Invariant0.invariant' ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 279 4 279 35] Invariant2.invariant' t ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 280 4 280 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 275 4 275 40] Invariant0.invariant' ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 276 4 276 51] Invariant1.invariant' ( ^ watches) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 277 4 277 42] Invariant2.invariant' t ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 281 4 281 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 282 4 282 35] Equisat0.equisat ( * self) ( ^ self) } end module CreuSat_Formula_Impl2_ReduceDb @@ -13501,151 +13263,137 @@ module CreuSat_Formula_Impl2_ReduceDb use mach.int.Int32 use Type use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model7 with function Model0.model = Model9.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with function Model0.model = Model7.model + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = Invariant6.index_logic, function IndexLogic0.index_logic = SatInner1.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, + predicate SatInner0.sat_inner = SatInner2.sat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model5 with function Model0.model = Model8.model - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with function Model0.model = Model5.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model5.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner1.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model7.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with function Model0.model = Model5.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant3.invariant', - function Model0.model = Model5.model - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model5.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . + type a = Type.alloc_alloc_global, function Model0.model = Model5.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model5 with function Model1.model = InvariantMirror0.model, + function Model0.model = FormulaInvariant0.model, function Model2.model = WatchesInvariantInternal0.model, + function Model0.model = Invariant3.model, function Model1.model = UnitAreSat0.model, + function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, + function Model1.model = Invariant7.model, function Model0.model = SatInner2.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = SatInner0.sat_inner + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with function Model0.model = Model4.model, - function Model1.model = Model5.model - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = Invariant6.invariant', - predicate Invariant1.invariant' = Invariant7.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model4.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicFormula_Impl1_SatInner as SatInner0 with function Model0.model = Model4.model, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_Equisat as Equisat0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model4.model, - function Model1.model = Model5.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model4.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model6.model, - function Model1.model = Model4.model, function Model2.model = Model5.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Model4.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model4.model, - predicate Invariant0.invariant' = Invariant3.invariant', function Model1.model = Model5.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model0.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . + type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, + function Model0.model = Model0.model, function Model1.model = WatchesInvariantInternal0.model, + function Model3.model = InvariantNoDecisionMirror0.model, function Model0.model = LongArePostUnitInner0.model, + function Model0.model = UnitAreSat0.model, function Model0.model = SatInner0.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model7.model, axiom . + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal + clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model7 with function Model2.model = InvariantNoDecision0.model, + function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant4.model, + function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant2.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model3.model, - function Model1.model = Model7.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model3.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model3.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model2.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model7.model, - function Model1.model = Model3.model, predicate Invariant0.invariant' = Invariant5.invariant', - function Model2.model = Model2.model, function Model3.model = Model4.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant4.invariant', function Model0.model = Model3.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model2.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model7.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model2.model, function Model1.model = Model3.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + type a = Type.alloc_alloc_global, function Model1.model = Invariant2.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant2.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant2.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant1.watches_invariant_internal clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant1 with function Model0.model = Model1.model, - predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal + type a = Type.alloc_alloc_global, function Model0.model = Invariant1.model, axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Invariant0.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy2 with type ModelTy0.modelTy = Model11.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_assignments_assignments, + function Model0.model = LitSat0.model + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model10.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model as Model10 with type t = Type.creusat_clause_clause, + function Model0.model = Len1.model, function Model0.model = Index1.model + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_clause_clause + clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause, + type Output0.output = Index0.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause, + predicate HasValue0.has_value = Index0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause, + predicate InBounds0.in_bounds = Index0.in_bounds clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_solver_solver clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_watches_watches clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy2 - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_clause_clause - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy2.modelTy, function Model0.model = Model7.model - clone CreusotContracts_Logic_Model_Impl0_Model as Model10 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model5.model - clone CreuSat_Clause_Impl0_Index_Interface as Index1 with function Model0.model = Model10.model - clone CreuSat_Clause_Impl3_Len_Interface as Len1 with function Model0.model = Model10.model - clone CreuSat_Lit_Impl1_LitSat_Interface as LitSat0 with function Model0.model = Model11.model, - predicate Invariant0.invariant' = Invariant6.invariant', predicate Sat0.sat = Sat0.sat + clone CreuSat_Formula_Impl2_DeleteClause_Interface as DeleteClause0 + clone CreuSat_Lit_Impl1_LitSat_Interface as LitSat0 + clone CreuSat_Clause_Impl0_Index_Interface as Index1 + clone CreuSat_Clause_Impl3_Len_Interface as Len1 clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.creusat_clause_clause, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model4.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - type Output0.output = Output0.output - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = Model4.model - clone CreuSat_Formula_Impl2_DeleteClause_Interface as DeleteClause0 with predicate Invariant0.invariant' = Invariant1.invariant', - predicate Invariant1.invariant' = Invariant0.invariant', predicate Invariant2.invariant' = Invariant2.invariant', - function Model0.model = Model4.model, function Model1.model = Model5.model, - predicate Equisat0.equisat = Equisat0.equisat, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - let rec cfg reduceDB [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 283 4 283 80] (self : borrowed (Type.creusat_formula_formula)) (watches : borrowed (Type.creusat_watches_watches)) (t : Type.creusat_trail_trail) (s : borrowed (Type.creusat_solver_solver)) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 275 4 275 40] Invariant0.invariant' ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 276 4 276 51] Invariant1.invariant' ( * watches) ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 277 4 277 42] Invariant2.invariant' t ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 278 4 278 33] Invariant0.invariant' ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 279 4 279 35] Invariant2.invariant' t ( * self)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 280 4 280 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 275 4 275 40] Invariant0.invariant' ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 276 4 276 51] Invariant1.invariant' ( ^ watches) ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 277 4 277 42] Invariant2.invariant' t ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 281 4 281 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 282 4 282 35] Equisat0.equisat ( * self) ( ^ self) } + type a = Type.alloc_alloc_global + clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global + let rec cfg reduceDB [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 283 4 283 80] (self : borrowed (Type.creusat_formula_formula)) (watches : borrowed (Type.creusat_watches_watches)) (t : Type.creusat_trail_trail) (s : borrowed (Type.creusat_solver_solver)) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 275 4 275 40] Invariant0.invariant' ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 276 4 276 51] Invariant1.invariant' ( * watches) ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 277 4 277 42] Invariant2.invariant' t ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 278 4 278 33] Invariant0.invariant' ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 279 4 279 35] Invariant2.invariant' t ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 280 4 280 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 275 4 275 40] Invariant0.invariant' ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 276 4 276 51] Invariant1.invariant' ( ^ watches) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 277 4 277 42] Invariant2.invariant' t ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 281 4 281 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 282 4 282 35] Equisat0.equisat ( * self) ( ^ self) } = var _0 : (); @@ -13739,23 +13487,23 @@ module CreuSat_Formula_Impl2_ReduceDb BB1 { _8 <- Type.creusat_solver_solver_Solver_num_lemmas ( * s_4); _9 <- Type.creusat_solver_solver_Solver_max_lemmas ( * s_4); - _7 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 285 14 285 41] _8 > _9); + _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 285 14 285 41] _8 > _9); switch (_7) | False -> goto BB5 | _ -> goto BB2 end } BB2 { - _11 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 286 15 286 31] (18446744073709551615 : usize) - (300 : usize)); + _11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 286 15 286 31] (18446744073709551615 : usize) - (300 : usize)); _12 <- Type.creusat_solver_solver_Solver_max_lemmas ( * s_4); - _10 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 286 15 286 46] _11 > _12); + _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 286 15 286 46] _11 > _12); switch (_10) | False -> goto BB4 | _ -> goto BB3 end } BB3 { - s_4 <- { s_4 with current = (let Type.CreuSat_Solver_Solver a b c d e f g h = * s_4 in Type.CreuSat_Solver_Solver a ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 287 16 287 35] Type.creusat_solver_solver_Solver_max_lemmas ( * s_4) + (300 : usize)) c d e f g h) }; + s_4 <- { s_4 with current = (let Type.CreuSat_Solver_Solver a b c d e f g h = * s_4 in Type.CreuSat_Solver_Solver a ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 287 16 287 35] Type.creusat_solver_solver_Solver_max_lemmas ( * s_4) + (300 : usize)) c d e f g h) }; _6 <- (); goto BB1 } @@ -13770,32 +13518,32 @@ module CreuSat_Formula_Impl2_ReduceDb BB6 { i_17 <- Type.creusat_solver_solver_Solver_initial_len ( * s_4); _19 <- (); - old_f_18 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 294 20 294 35] self_1); + old_f_18 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 294 20 294 35] self_1); goto BB7 } BB7 { _21 <- (); - old_w_20 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 295 20 295 38] watches_2); + old_w_20 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 295 20 295 38] watches_2); goto BB8 } BB8 { goto BB9 } BB9 { - invariant w_inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 296 8 296 53] Invariant1.invariant' ( * watches_2) ( * self_1) }; - invariant t_inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 297 8 297 47] Invariant2.invariant' t_3 ( * self_1) }; - invariant f_inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 298 8 298 45] Invariant0.invariant' ( * self_1) }; - invariant proph_w { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 299 8 299 57] ^ watches_2 = ^ old_w_20 }; - invariant proph_f { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 300 8 300 54] ^ self_1 = ^ old_f_18 }; - invariant num_vars_unch { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 301 8 301 70] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self_1)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * old_f_18)) }; - invariant equi { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 302 8 302 56] Equisat0.equisat ( * self_1) ( * old_f_18) }; + invariant w_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 296 8 296 53] Invariant1.invariant' ( * watches_2) ( * self_1) }; + invariant t_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 297 8 297 47] Invariant2.invariant' t_3 ( * self_1) }; + invariant f_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 298 8 298 45] Invariant0.invariant' ( * self_1) }; + invariant proph_w { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 299 8 299 57] ^ watches_2 = ^ old_w_20 }; + invariant proph_f { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 300 8 300 54] ^ self_1 = ^ old_f_18 }; + invariant num_vars_unch { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 301 8 301 70] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self_1)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * old_f_18)) }; + invariant equi { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 302 8 302 56] Equisat0.equisat ( * self_1) ( * old_f_18) }; _23 <- i_17; _25 <- Type.creusat_formula_formula_Formula_clauses ( * self_1); - _24 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 303 18 303 36] Len0.len _25); + _24 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 303 18 303 36] Len0.len _25); goto BB10 } BB10 { - _22 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 303 14 303 36] _23 < _24); + _22 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 303 14 303 36] _23 < _24); switch (_22) | False -> goto BB42 | _ -> goto BB11 @@ -13804,7 +13552,7 @@ module CreuSat_Formula_Impl2_ReduceDb BB11 { _30 <- Type.creusat_formula_formula_Formula_clauses ( * self_1); _31 <- i_17; - _29 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 304 16 304 31] Index0.index _30 _31); + _29 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 304 16 304 31] Index0.index _30 _31); goto BB12 } BB12 { @@ -13818,16 +13566,16 @@ module CreuSat_Formula_Impl2_ReduceDb BB13 { _36 <- Type.creusat_formula_formula_Formula_clauses ( * self_1); _37 <- i_17; - _35 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 306 19 306 34] Index0.index _36 _37); + _35 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 306 19 306 34] Index0.index _36 _37); goto BB14 } BB14 { _34 <- _35; - _33 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 306 19 306 40] Len1.len _34); + _33 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 306 19 306 40] Len1.len _34); goto BB15 } BB15 { - _32 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 306 19 306 44] _33 > (6 : usize)); + _32 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 306 19 306 44] _33 > (6 : usize)); switch (_32) | False -> goto BB38 | _ -> goto BB16 @@ -13842,7 +13590,7 @@ module CreuSat_Formula_Impl2_ReduceDb _43 <- j_39; _47 <- Type.creusat_formula_formula_Formula_clauses ( * self_1); _48 <- i_17; - _46 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 309 30 309 45] Index0.index _47 _48); + _46 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 309 30 309 45] Index0.index _47 _48); goto BB21 } BB18 { @@ -13851,7 +13599,7 @@ module CreuSat_Formula_Impl2_ReduceDb } BB19 { _50 <- cnt_38; - _49 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 309 55 309 62] _50 < (6 : int32)); + _49 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 309 55 309 62] _50 < (6 : int32)); _41 <- _49; goto BB20 } @@ -13863,11 +13611,11 @@ module CreuSat_Formula_Impl2_ReduceDb } BB21 { _45 <- _46; - _44 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 309 30 309 51] Len1.len _45); + _44 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 309 30 309 51] Len1.len _45); goto BB22 } BB22 { - _42 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 309 26 309 51] _43 < _44); + _42 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 309 26 309 51] _43 < _44); switch (_42) | False -> goto BB18 | _ -> goto BB19 @@ -13876,20 +13624,20 @@ module CreuSat_Formula_Impl2_ReduceDb BB23 { _57 <- Type.creusat_formula_formula_Formula_clauses ( * self_1); _58 <- i_17; - _56 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 310 27 310 42] Index0.index _57 _58); + _56 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 310 27 310 42] Index0.index _57 _58); goto BB24 } BB24 { _55 <- _56; _59 <- j_39; - _54 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 310 27 310 45] Index1.index _55 _59); + _54 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 310 27 310 45] Index1.index _55 _59); goto BB25 } BB25 { _53 <- _54; _61 <- Type.creusat_trail_trail_Trail_assignments t_3; _60 <- _61; - _52 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 310 27 310 69] LitSat0.lit_sat _53 _60); + _52 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 310 27 310 69] LitSat0.lit_sat _53 _60); goto BB26 } BB26 { @@ -13899,7 +13647,7 @@ module CreuSat_Formula_Impl2_ReduceDb end } BB27 { - cnt_38 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 311 28 311 36] cnt_38 + (1 : int32)); + cnt_38 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 311 28 311 36] cnt_38 + (1 : int32)); _51 <- (); goto BB29 } @@ -13908,14 +13656,14 @@ module CreuSat_Formula_Impl2_ReduceDb goto BB29 } BB29 { - j_39 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 313 24 313 30] j_39 + (1 : usize)); + j_39 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 313 24 313 30] j_39 + (1 : usize)); _6 <- (); goto BB17 } BB30 { _40 <- (); _66 <- cnt_38; - _65 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 315 23 315 31] _66 >= (6 : int32)); + _65 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 315 23 315 31] _66 >= (6 : int32)); switch (_65) | False -> goto BB32 | _ -> goto BB31 @@ -13923,7 +13671,7 @@ module CreuSat_Formula_Impl2_ReduceDb } BB31 { _69 <- Type.creusat_solver_solver_Solver_num_lemmas ( * s_4); - _68 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 317 27 317 43] _69 > (0 : usize)); + _68 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 317 27 317 43] _69 > (0 : usize)); switch (_68) | False -> goto BB34 | _ -> goto BB33 @@ -13934,7 +13682,7 @@ module CreuSat_Formula_Impl2_ReduceDb goto BB37 } BB33 { - s_4 <- { s_4 with current = (let Type.CreuSat_Solver_Solver a b c d e f g h = * s_4 in Type.CreuSat_Solver_Solver ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 318 28 318 45] Type.creusat_solver_solver_Solver_num_lemmas ( * s_4) - (1 : usize)) b c d e f g h) }; + s_4 <- { s_4 with current = (let Type.CreuSat_Solver_Solver a b c d e f g h = * s_4 in Type.CreuSat_Solver_Solver ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 318 28 318 45] Type.creusat_solver_solver_Solver_num_lemmas ( * s_4) - (1 : usize)) b c d e f g h) }; _67 <- (); goto BB35 } @@ -13949,7 +13697,7 @@ module CreuSat_Formula_Impl2_ReduceDb _73 <- borrow_mut ( * watches_2); watches_2 <- { watches_2 with current = ( ^ _73) }; _74 <- t_3; - _70 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 320 24 320 57] DeleteClause0.delete_clause _71 _72 _73 _74); + _70 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 320 24 320 57] DeleteClause0.delete_clause _71 _72 _73 _74); goto BB36 } BB36 { @@ -13971,7 +13719,7 @@ module CreuSat_Formula_Impl2_ReduceDb goto BB41 } BB41 { - i_17 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/formula.rs" 324 12 324 18] i_17 + (1 : usize)); + i_17 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 324 12 324 18] i_17 + (1 : usize)); _6 <- (); goto BB9 } @@ -13992,7 +13740,7 @@ end module CreuSat_Lit_Impl4_Clone use prelude.Prelude use Type - let rec cfg clone' [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 11 9 11 14] (self : Type.creusat_lit_lit) : Type.creusat_lit_lit + let rec cfg clone' [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 11 9 11 14] (self : Type.creusat_lit_lit) : Type.creusat_lit_lit = var _0 : Type.creusat_lit_lit; @@ -14013,23 +13761,22 @@ module CreuSat_Lit_Impl0_Model_Interface end module CreuSat_Lit_Impl0_Model use Type - function model [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 22 4 22 26] (self : Type.creusat_lit_lit) : Type.creusat_lit_lit + function model [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 22 4 22 26] (self : Type.creusat_lit_lit) : Type.creusat_lit_lit = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 23 8 23 12] self + [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 23 8 23 12] self end module CreuSat_Lit_Impl1_LitSet_Interface use seq.Seq use Type use prelude.Prelude + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy clone CreuSat_Logic_LogicLit_Impl1_Unset_Interface as Unset0 clone CreuSat_Logic_LogicLit_Impl1_Invariant_Interface as Invariant0 - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments val lit_set [@cfg:stackify] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) : bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 81 4 81 43] Invariant0.invariant' self (Seq.length (Model0.model a))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 82 4 82 41] result = (not Unset0.unset self a) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 81 4 81 43] Invariant0.invariant' self (Seq.length (Model0.model a))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 82 4 82 41] result = (not Unset0.unset self a) } end module CreuSat_Lit_Impl1_LitSet @@ -14038,22 +13785,23 @@ module CreuSat_Lit_Impl1_LitSet use prelude.Prelude use mach.int.Int use prelude.UInt8 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_UnsetInner as UnsetInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Unset as Unset0 with function Model0.model = Model1.model, - predicate UnsetInner0.unset_inner = UnsetInner0.unset_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = Invariant0.index_logic, + function IndexLogic0.index_logic = UnsetInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_UnsetInner as UnsetInner0 with predicate UnsetInner0.unset_inner = Unset0.unset_inner + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model0.model, + function Model0.model = Unset0.model + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicLit_Impl1_Unset as Unset0 + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant0 + clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_assignments_assignments use mach.int.UInt64 - clone CreuSat_Lit_Impl1_Index_Interface as Index0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Assignments_Impl0_Index_Interface as Index1 with function Model0.model = Model0.model - let rec cfg lit_set [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 83 4 83 49] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) : bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 81 4 81 43] Invariant0.invariant' self (Seq.length (Model0.model a))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 82 4 82 41] result = (not Unset0.unset self a) } + clone CreuSat_Assignments_Impl0_Index_Interface as Index1 + clone CreuSat_Lit_Impl1_Index_Interface as Index0 + let rec cfg lit_set [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 83 4 83 49] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) : bool + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 81 4 81 43] Invariant0.invariant' self (Seq.length (Model0.model a))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 82 4 82 41] result = (not Unset0.unset self a) } = var _0 : bool; @@ -14072,16 +13820,16 @@ module CreuSat_Lit_Impl1_LitSet BB0 { _5 <- a_2; _7 <- self_1; - _6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 84 10 84 22] Index0.index _7); + _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 84 10 84 22] Index0.index _7); goto BB1 } BB1 { - _4 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 84 8 84 23] Index1.index _5 _6); + _4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 84 8 84 23] Index1.index _5 _6); goto BB2 } BB2 { _3 <- _4; - _0 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 84 8 84 27] _3 < (2 : uint8)); + _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 84 8 84 27] _3 < (2 : uint8)); return _0 } @@ -14097,10 +13845,10 @@ module CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic use mach.int.Int32 clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic_Interface as IsPositiveLogic0 clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - function to_watchidx_logic [@inline:trivial] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 33 4 33 41] (self : Type.creusat_lit_lit) : int + function to_watchidx_logic [@inline:trivial] [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 33 4 33 41] (self : Type.creusat_lit_lit) : int = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 34 8 34 91] IndexLogic0.index_logic self * 2 + (if IsPositiveLogic0.is_positive_logic self then + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 34 8 34 91] IndexLogic0.index_logic self * 2 + (if IsPositiveLogic0.is_positive_logic self then 0 else 1 @@ -14116,9 +13864,9 @@ module CreuSat_Lit_Impl1_ToWatchidx_Interface clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic_Interface as ToWatchidxLogic0 clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 val to_watchidx [@cfg:stackify] (self : Type.creusat_lit_lit) : usize - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 89 4 89 51] IndexLogic0.index_logic self < div 18446744073709551615 2} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 90 4 90 51] UInt64.to_int result = ToWatchidxLogic0.to_watchidx_logic self } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 91 4 91 96] UInt64.to_int result = IndexLogic0.index_logic self * 2 + (if IsPositiveLogic0.is_positive_logic self then + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 89 4 89 51] IndexLogic0.index_logic self < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 90 4 90 51] UInt64.to_int result = ToWatchidxLogic0.to_watchidx_logic self } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 91 4 91 96] UInt64.to_int result = IndexLogic0.index_logic self * 2 + (if IsPositiveLogic0.is_positive_logic self then 0 else 1 @@ -14131,16 +13879,15 @@ module CreuSat_Lit_Impl1_ToWatchidx use mach.int.UInt64 use mach.int.Int32 use Type - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic as ToWatchidxLogic0 with function IndexLogic0.index_logic = IndexLogic0.index_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic - clone CreuSat_Lit_Impl1_IsPositive_Interface as IsPositive0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic - clone CreuSat_Lit_Impl1_Index_Interface as Index0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - let rec cfg to_watchidx [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 92 4 92 37] (self : Type.creusat_lit_lit) : usize - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 89 4 89 51] IndexLogic0.index_logic self < div 18446744073709551615 2} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 90 4 90 51] UInt64.to_int result = ToWatchidxLogic0.to_watchidx_logic self } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 91 4 91 96] UInt64.to_int result = IndexLogic0.index_logic self * 2 + (if IsPositiveLogic0.is_positive_logic self then + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = ToWatchidxLogic0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = ToWatchidxLogic0.index_logic + clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic as ToWatchidxLogic0 + clone CreuSat_Lit_Impl1_IsPositive_Interface as IsPositive0 + clone CreuSat_Lit_Impl1_Index_Interface as Index0 + let rec cfg to_watchidx [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 92 4 92 37] (self : Type.creusat_lit_lit) : usize + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 89 4 89 51] IndexLogic0.index_logic self < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 90 4 90 51] UInt64.to_int result = ToWatchidxLogic0.to_watchidx_logic self } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 91 4 91 96] UInt64.to_int result = IndexLogic0.index_logic self * 2 + (if IsPositiveLogic0.is_positive_logic self then 0 else 1 @@ -14161,13 +13908,13 @@ module CreuSat_Lit_Impl1_ToWatchidx } BB0 { _4 <- self_1; - _3 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 93 8 93 20] Index0.index _4); + _3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 93 8 93 20] Index0.index _4); goto BB1 } BB1 { - _2 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 93 8 93 24] _3 * (2 : usize)); + _2 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 93 8 93 24] _3 * (2 : usize)); _7 <- self_1; - _6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 93 30 93 48] IsPositive0.is_positive _7); + _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 93 30 93 48] IsPositive0.is_positive _7); goto BB2 } BB2 { @@ -14185,7 +13932,7 @@ module CreuSat_Lit_Impl1_ToWatchidx goto BB5 } BB5 { - _0 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 93 8 93 65] _2 + _5); + _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 93 8 93 65] _2 + _5); return _0 } @@ -14198,15 +13945,14 @@ module CreuSat_Lit_Impl1_PhaseSaved_Interface use mach.int.Int32 use prelude.Prelude use Type + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic_Interface as IsPositiveLogic0 clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments val phase_saved [@cfg:stackify] (idx : usize) (assignments : Type.creusat_assignments_assignments) : Type.creusat_lit_lit - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 105 4 105 44] UInt64.to_int idx < Seq.length (Model0.model assignments)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 106 4 106 44] IndexLogic0.index_logic result = UInt64.to_int idx } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 107 4 107 74] IsPositiveLogic0.is_positive_logic result = (UInt8.to_int (Seq.get (Model0.model assignments) (UInt64.to_int idx)) = 1) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 105 4 105 44] UInt64.to_int idx < Seq.length (Model0.model assignments)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 106 4 106 44] IndexLogic0.index_logic result = UInt64.to_int idx } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 107 4 107 74] IsPositiveLogic0.is_positive_logic result = (UInt8.to_int (Seq.get (Model0.model assignments) (UInt64.to_int idx)) = 1) } end module CreuSat_Lit_Impl1_PhaseSaved @@ -14217,18 +13963,18 @@ module CreuSat_Lit_Impl1_PhaseSaved use mach.int.Int32 use prelude.Prelude use Type - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model2.model + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model0.model + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model - clone CreuSat_Assignments_Impl0_Index_Interface as Index0 with function Model0.model = Model0.model - let rec cfg phase_saved [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 108 4 108 68] (idx : usize) (assignments : Type.creusat_assignments_assignments) : Type.creusat_lit_lit - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 105 4 105 44] UInt64.to_int idx < Seq.length (Model0.model assignments)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 106 4 106 44] IndexLogic0.index_logic result = UInt64.to_int idx } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 107 4 107 74] IsPositiveLogic0.is_positive_logic result = (UInt8.to_int (Seq.get (Model0.model assignments) (UInt64.to_int idx)) = 1) } + clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_assignments_assignments + clone CreuSat_Assignments_Impl0_Index_Interface as Index0 + let rec cfg phase_saved [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 108 4 108 68] (idx : usize) (assignments : Type.creusat_assignments_assignments) : Type.creusat_lit_lit + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 105 4 105 44] UInt64.to_int idx < Seq.length (Model0.model assignments)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 106 4 106 44] IndexLogic0.index_logic result = UInt64.to_int idx } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 107 4 107 74] IsPositiveLogic0.is_positive_logic result = (UInt8.to_int (Seq.get (Model0.model assignments) (UInt64.to_int idx)) = 1) } = var _0 : Type.creusat_lit_lit; @@ -14250,12 +13996,12 @@ module CreuSat_Lit_Impl1_PhaseSaved _3 <- idx_1; _8 <- assignments_2; _9 <- idx_1; - _7 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 109 37 109 53] Index0.index _8 _9); + _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 109 37 109 53] Index0.index _8 _9); goto BB1 } BB1 { _6 <- _7; - _5 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 109 37 109 58] _6 = (1 : uint8)); + _5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 109 37 109 58] _6 = (1 : uint8)); switch (_5) | False -> goto BB3 | _ -> goto BB2 @@ -14279,7 +14025,7 @@ module CreuSat_Lit_Impl2_Eq_Interface use prelude.Prelude use Type val eq [@cfg:stackify] (self : Type.creusat_lit_lit) (other : Type.creusat_lit_lit) : bool - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 120 4 120 41] result = (self = other) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 120 4 120 41] result = (self = other) } end module CreuSat_Lit_Impl2_Eq @@ -14287,12 +14033,12 @@ module CreuSat_Lit_Impl2_Eq use Type use mach.int.Int use mach.int.UInt64 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Lit_Impl1_IsPositive_Interface as IsPositive0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Lit_Impl1_Index_Interface as Index0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - let rec cfg eq [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 122 4 122 37] (self : Type.creusat_lit_lit) (other : Type.creusat_lit_lit) : bool - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 120 4 120 41] result = (self = other) } + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = IsPositive0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = Index0.index_logic + clone CreuSat_Lit_Impl1_IsPositive_Interface as IsPositive0 + clone CreuSat_Lit_Impl1_Index_Interface as Index0 + let rec cfg eq [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 122 4 122 37] (self : Type.creusat_lit_lit) (other : Type.creusat_lit_lit) : bool + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 120 4 120 41] result = (self = other) } = var _0 : bool; @@ -14315,7 +14061,7 @@ module CreuSat_Lit_Impl2_Eq } BB0 { _5 <- self_1; - _4 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 123 8 123 20] Index0.index _5); + _4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 123 8 123 20] Index0.index _5); goto BB4 } BB1 { @@ -14324,7 +14070,7 @@ module CreuSat_Lit_Impl2_Eq } BB2 { _10 <- self_1; - _9 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 123 41 123 59] IsPositive0.is_positive _10); + _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 123 41 123 59] IsPositive0.is_positive _10); goto BB6 } BB3 { @@ -14332,11 +14078,11 @@ module CreuSat_Lit_Impl2_Eq } BB4 { _7 <- other_2; - _6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 123 24 123 37] Index0.index _7); + _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 123 24 123 37] Index0.index _7); goto BB5 } BB5 { - _3 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 123 8 123 37] _4 = _6); + _3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 123 8 123 37] _4 = _6); switch (_3) | False -> goto BB1 | _ -> goto BB2 @@ -14344,7 +14090,7 @@ module CreuSat_Lit_Impl2_Eq } BB6 { _12 <- other_2; - _11 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 123 63 123 82] IsPositive0.is_positive _12); + _11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 123 63 123 82] IsPositive0.is_positive _12); goto BB7 } BB7 { @@ -14359,8 +14105,8 @@ module CreuSat_Lit_Impl3_Not_Interface clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic_Interface as IsPositiveLogic0 clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 val not' [@cfg:stackify] (self : Type.creusat_lit_lit) : Type.creusat_lit_lit - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 132 4 132 58] IndexLogic0.index_logic result = IndexLogic0.index_logic self } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 133 4 133 71] IsPositiveLogic0.is_positive_logic result = (not IsPositiveLogic0.is_positive_logic self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 132 4 132 58] IndexLogic0.index_logic result = IndexLogic0.index_logic self } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 133 4 133 71] IsPositiveLogic0.is_positive_logic result = (not IsPositiveLogic0.is_positive_logic self) } end module CreuSat_Lit_Impl3_Not @@ -14370,11 +14116,11 @@ module CreuSat_Lit_Impl3_Not use mach.int.Int use prelude.Prelude use mach.int.UInt64 - clone CreuSat_Lit_Impl1_IsPositive_Interface as IsPositive0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic - clone CreuSat_Lit_Impl1_Index_Interface as Index0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - let rec cfg not' [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 134 4 134 23] (self : Type.creusat_lit_lit) : Type.creusat_lit_lit - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 132 4 132 58] IndexLogic0.index_logic result = IndexLogic0.index_logic self } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 133 4 133 71] IsPositiveLogic0.is_positive_logic result = (not IsPositiveLogic0.is_positive_logic self) } + clone CreuSat_Lit_Impl1_IsPositive_Interface as IsPositive0 + clone CreuSat_Lit_Impl1_Index_Interface as Index0 + let rec cfg not' [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 134 4 134 23] (self : Type.creusat_lit_lit) : Type.creusat_lit_lit + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 132 4 132 58] IndexLogic0.index_logic result = IndexLogic0.index_logic self } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 133 4 133 71] IsPositiveLogic0.is_positive_logic result = (not IsPositiveLogic0.is_positive_logic self) } = var _0 : Type.creusat_lit_lit; @@ -14390,12 +14136,12 @@ module CreuSat_Lit_Impl3_Not } BB0 { _3 <- self_1; - _2 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 135 19 135 31] Index0.index _3); + _2 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 135 19 135 31] Index0.index _3); goto BB1 } BB1 { _6 <- self_1; - _5 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/lit.rs" 135 44 135 62] IsPositive0.is_positive _6); + _5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 135 44 135 62] IsPositive0.is_positive _6); goto BB2 } BB2 { @@ -14405,6 +14151,90 @@ module CreuSat_Lit_Impl3_Not } end +module CreuSat_Logic_Logic_Inner_Impl0_SatisfiesClause_Interface + use Type + use seq.Seq + predicate satisfies_clause (self : Type.creusat_logic_logic_inner_m) (cl : Seq.seq (Type.creusat_lit_lit)) +end +module CreuSat_Logic_Logic_Inner_Impl0_SatisfiesClause + use Type + use seq.Seq + use mach.int.Int + use mach.int.Int32 + use mach.int.UInt64 + use map.Map + predicate satisfies_clause [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 17 8 17 55] (self : Type.creusat_logic_logic_inner_m) (cl : Seq.seq (Type.creusat_lit_lit)) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 18 12 20 13] forall i : (int) . 0 <= i && i < Seq.length cl -> Map.get (Type.creusat_logic_logic_inner_m_M_0 self) (UInt64.to_int (Type.creusat_lit_lit_Lit_idx (Seq.get cl i))) = Type.creusat_lit_lit_Lit_polarity (Seq.get cl i) +end +module CreuSat_Logic_Logic_Inner_Impl0_Satisfies_Interface + use Type + use seq.Seq + predicate satisfies (self : Type.creusat_logic_logic_inner_m) (fml : Seq.seq (Seq.seq (Type.creusat_lit_lit))) +end +module CreuSat_Logic_Logic_Inner_Impl0_Satisfies + use Type + use seq.Seq + use mach.int.Int + use mach.int.Int32 + clone CreuSat_Logic_Logic_Inner_Impl0_SatisfiesClause_Interface as SatisfiesClause0 + predicate satisfies [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 24 8 24 54] (self : Type.creusat_logic_logic_inner_m) (fml : Seq.seq (Seq.seq (Type.creusat_lit_lit))) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 25 12 27 13] forall c : (int) . 0 <= c && c < Seq.length fml -> SatisfiesClause0.satisfies_clause self (Seq.get fml c) +end +module CreuSat_Logic_LogicFormula_Impl1_RealModel_Interface + use Type + use seq.Seq + function real_model (self : Type.creusat_formula_formula) : Seq.seq (Seq.seq (Type.creusat_lit_lit)) +end +module CreuSat_Logic_LogicFormula_Impl1_RealModel + use Type + use seq.Seq + function real_model [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 22 4 22 44] (self : Type.creusat_formula_formula) : Seq.seq (Seq.seq (Type.creusat_lit_lit)) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 23 8 23 18] Seq.empty +end +module CreuSat_Logic_Logic_Inner_Impl1_Unsat2_Interface + use Type + predicate unsat2 (self : Type.creusat_formula_formula) +end +module CreuSat_Logic_Logic_Inner_Impl1_Unsat2 + use Type + clone CreuSat_Logic_Logic_Inner_Impl0_Satisfies_Interface as Satisfies0 + clone CreuSat_Logic_LogicFormula_Impl1_RealModel_Interface as RealModel0 + predicate unsat2 [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 34 8 34 31] (self : Type.creusat_formula_formula) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 35 12 35 80] forall m : (Type.creusat_logic_logic_inner_m) . Satisfies0.satisfies m (RealModel0.real_model self) -> false +end +module CreuSat_Logic_Logic_Inner_Impl1_Sat2_Interface + use Type + predicate sat2 (self : Type.creusat_formula_formula) +end +module CreuSat_Logic_Logic_Inner_Impl1_Sat2 + use Type + clone CreuSat_Logic_Logic_Inner_Impl0_Satisfies_Interface as Satisfies0 + clone CreuSat_Logic_LogicFormula_Impl1_RealModel_Interface as RealModel0 + predicate sat2 [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 39 8 39 29] (self : Type.creusat_formula_formula) + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 40 12 40 70] exists m : (Type.creusat_logic_logic_inner_m) . Satisfies0.satisfies m (RealModel0.real_model self) +end +module CreuSat_Logic_Logic_Inner_Impl1_Equisat2_Interface + use Type + predicate equisat2 (self : Type.creusat_formula_formula) (f : Type.creusat_formula_formula) +end +module CreuSat_Logic_Logic_Inner_Impl1_Equisat2 + use Type + clone CreuSat_Logic_Logic_Inner_Impl0_Satisfies_Interface as Satisfies0 + clone CreuSat_Logic_LogicFormula_Impl1_RealModel_Interface as RealModel0 + predicate equisat2 [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 44 8 44 42] (self : Type.creusat_formula_formula) (f : Type.creusat_formula_formula) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 45 12 47 13] forall m : (Type.creusat_logic_logic_inner_m) . Satisfies0.satisfies m (RealModel0.real_model self) -> Satisfies0.satisfies m (RealModel0.real_model f) && Satisfies0.satisfies m (RealModel0.real_model f) -> Satisfies0.satisfies m (RealModel0.real_model self) +end module CreuSat_Logic_Logic_Pos_Interface use mach.int.Int use prelude.Prelude @@ -14415,8 +14245,8 @@ module CreuSat_Logic_Logic_Pos use mach.int.Int use prelude.Prelude use prelude.UInt8 - function pos [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic.rs" 10 0 10 25] (_ : ()) : uint8 = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic.rs" 11 4 11 7] (1 : uint8) + function pos [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 56 0 56 25] (_ : ()) : uint8 = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 57 4 57 7] (1 : uint8) end module CreuSat_Logic_Logic_Neg_Interface use mach.int.Int @@ -14428,8 +14258,8 @@ module CreuSat_Logic_Logic_Neg use mach.int.Int use prelude.Prelude use prelude.UInt8 - function neg [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic.rs" 15 0 15 25] (_ : ()) : uint8 = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic.rs" 16 4 16 7] (0 : uint8) + function neg [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 61 0 61 25] (_ : ()) : uint8 = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 62 4 62 7] (0 : uint8) end module CreuSat_Logic_Logic_BoolToAssignedstate_Interface use prelude.UInt8 @@ -14443,11 +14273,9 @@ module CreuSat_Logic_Logic_BoolToAssignedstate use mach.int.Int use mach.int.Int32 use prelude.Prelude - function bool_to_assignedstate [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic.rs" 34 0 34 54] (b : bool) : uint8 - - = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic.rs" 31 0 31 8] if b then (1 : uint8) else (0 : uint8) - axiom bool_to_assignedstate_spec : forall b : bool . ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic.rs" 33 0 33 31] not b -> UInt8.to_int (bool_to_assignedstate b) = 0) && ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic.rs" 32 0 32 30] b -> UInt8.to_int (bool_to_assignedstate b) = 1) + function bool_to_assignedstate [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 80 0 80 54] (b : bool) : uint8 = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 77 0 77 8] if b then (1 : uint8) else (0 : uint8) + axiom bool_to_assignedstate_spec : forall b : bool . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 79 0 79 31] not b -> UInt8.to_int (bool_to_assignedstate b) = 0) && ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 78 0 78 30] b -> UInt8.to_int (bool_to_assignedstate b) = 1) end module CreuSat_Logic_Logic_BoolToAssignedstate_Impl use prelude.UInt8 @@ -14455,11 +14283,11 @@ module CreuSat_Logic_Logic_BoolToAssignedstate_Impl use mach.int.Int32 use prelude.Prelude let rec ghost function bool_to_assignedstate (b : bool) : uint8 - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic.rs" 32 0 32 30] b -> UInt8.to_int result = 1 } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic.rs" 33 0 33 31] not b -> UInt8.to_int result = 0 } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 78 0 78 30] b -> UInt8.to_int result = 1 } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 79 0 79 31] not b -> UInt8.to_int result = 0 } = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic.rs" 31 0 31 8] if b then (1 : uint8) else (0 : uint8) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 77 0 77 8] if b then (1 : uint8) else (0 : uint8) end module CreuSat_Logic_Logic_FlipV_Interface use mach.int.Int @@ -14472,8 +14300,8 @@ module CreuSat_Logic_Logic_FlipV use prelude.Prelude use prelude.UInt8 use mach.int.Int32 - function flip_v [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic.rs" 43 0 43 44] (v : uint8) : uint8 = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic.rs" 44 4 52 5] if UInt8.to_int v = 0 then + function flip_v [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 89 0 89 44] (v : uint8) : uint8 = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 90 4 98 5] if UInt8.to_int v = 0 then (1 : uint8) else if UInt8.to_int v = 1 then (0 : uint8) else v @@ -14493,10 +14321,10 @@ module CreuSat_Logic_LogicAssignments_CompatibleInner use prelude.UInt8 use mach.int.Int32 clone CreuSat_Logic_Logic_Unset_Interface as Unset0 - predicate compatible_inner [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_assignments.rs" 25 0 25 78] (a : Seq.seq uint8) (a2 : Seq.seq uint8) + predicate compatible_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 25 0 25 78] (a : Seq.seq uint8) (a2 : Seq.seq uint8) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_assignments.rs" 26 4 29 5] Seq.length a = Seq.length a2 && (forall i : (int) . 0 <= i && i < Seq.length a -> Unset0.unset (Seq.get a i) || Seq.get a i = Seq.get a2 i) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 26 4 29 5] Seq.length a = Seq.length a2 && (forall i : (int) . 0 <= i && i < Seq.length a -> Unset0.unset (Seq.get a i) || Seq.get a i = Seq.get a2 i) end module CreuSat_Logic_LogicAssignments_CompatibleCompleteInner_Interface use seq.Seq @@ -14512,10 +14340,10 @@ module CreuSat_Logic_LogicAssignments_CompatibleCompleteInner use prelude.UInt8 clone CreuSat_Logic_LogicAssignments_CompleteInner_Interface as CompleteInner0 clone CreuSat_Logic_LogicAssignments_CompatibleInner_Interface as CompatibleInner0 - predicate compatible_complete_inner [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_assignments.rs" 40 0 40 87] (a : Seq.seq uint8) (a2 : Seq.seq uint8) + predicate compatible_complete_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 40 0 40 87] (a : Seq.seq uint8) (a2 : Seq.seq uint8) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_assignments.rs" 39 0 39 12] CompatibleInner0.compatible_inner a a2 && CompleteInner0.complete_inner a2 + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 39 0 39 12] CompatibleInner0.compatible_inner a a2 && CompleteInner0.complete_inner a2 end module CreuSat_Logic_LogicClause_Impl1_PostUnitInner_Interface use Type @@ -14535,10 +14363,10 @@ module CreuSat_Logic_LogicClause_Impl1_PostUnitInner clone CreuSat_Logic_LogicLit_Impl1_UnsatInner_Interface as UnsatInner0 clone CreuSat_Logic_LogicLit_Impl1_SatInner_Interface as SatInner0 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 - predicate post_unit_inner [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 56 4 56 63] (self : Type.creusat_clause_clause) (a : Seq.seq uint8) + predicate post_unit_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 56 4 56 63] (self : Type.creusat_clause_clause) (a : Seq.seq uint8) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 57 8 61 9] exists i : (int) . 0 <= i && i < Seq.length (Model0.model self) && SatInner0.sat_inner (Seq.get (Model0.model self) i) a && (forall j : (int) . 0 <= j && j < Seq.length (Model0.model self) && j <> i -> UnsatInner0.unsat_inner (Seq.get (Model0.model self) j) a) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 57 8 61 9] exists i : (int) . 0 <= i && i < Seq.length (Model0.model self) && SatInner0.sat_inner (Seq.get (Model0.model self) i) a && (forall j : (int) . 0 <= j && j < Seq.length (Model0.model self) && j <> i -> UnsatInner0.unsat_inner (Seq.get (Model0.model self) j) a) end module CreuSat_Logic_LogicClause_Impl1_NoUnsetInner_Interface use Type @@ -14557,10 +14385,10 @@ module CreuSat_Logic_LogicClause_Impl1_NoUnsetInner use mach.int.Int32 clone CreuSat_Logic_LogicLit_Impl1_UnsetInner_Interface as UnsetInner0 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 - predicate no_unset_inner [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 65 4 65 62] (self : Type.creusat_clause_clause) (a : Seq.seq uint8) + predicate no_unset_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 65 4 65 62] (self : Type.creusat_clause_clause) (a : Seq.seq uint8) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 66 8 68 9] forall j : (int) . 0 <= j && j < Seq.length (Model0.model self) -> not UnsetInner0.unset_inner (Seq.get (Model0.model self) j) a + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 66 8 68 9] forall j : (int) . 0 <= j && j < Seq.length (Model0.model self) -> not UnsetInner0.unset_inner (Seq.get (Model0.model self) j) a end module CreuSat_Logic_LogicClause_Impl1_PostUnit_Interface use Type @@ -14570,10 +14398,10 @@ module CreuSat_Logic_LogicClause_Impl1_PostUnit use Type clone CreuSat_Logic_LogicClause_Impl1_PostUnitInner_Interface as PostUnitInner0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - predicate post_unit [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 72 4 72 50] (self : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) + predicate post_unit [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 72 4 72 50] (self : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 73 8 73 46] PostUnitInner0.post_unit_inner self (Model0.model a) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 73 8 73 46] PostUnitInner0.post_unit_inner self (Model0.model a) end module CreuSat_Logic_LogicClause_Impl1_EqAssnInner_Interface use Type @@ -14592,10 +14420,10 @@ module CreuSat_Logic_LogicClause_Impl1_EqAssnInner use mach.int.Int32 clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 - predicate eq_assn_inner [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 77 4 77 85] (self : Type.creusat_clause_clause) (a : Seq.seq uint8) (a2 : Seq.seq uint8) + predicate eq_assn_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 77 4 77 85] (self : Type.creusat_clause_clause) (a : Seq.seq uint8) (a2 : Seq.seq uint8) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 78 8 81 9] forall i : (int) . 0 <= i && i < Seq.length (Model0.model self) -> Seq.get a (IndexLogic0.index_logic (Seq.get (Model0.model self) i)) = Seq.get a2 (IndexLogic0.index_logic (Seq.get (Model0.model self) i)) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 78 8 81 9] forall i : (int) . 0 <= i && i < Seq.length (Model0.model self) -> Seq.get a (IndexLogic0.index_logic (Seq.get (Model0.model self) i)) = Seq.get a2 (IndexLogic0.index_logic (Seq.get (Model0.model self) i)) end module CreuSat_Logic_LogicClause_Impl2_Unknown_Interface use Type @@ -14605,10 +14433,10 @@ module CreuSat_Logic_LogicClause_Impl2_Unknown use Type clone CreuSat_Logic_LogicClause_Impl2_Unsat_Interface as Unsat0 clone CreuSat_Logic_LogicClause_Impl2_Sat_Interface as Sat0 - predicate unknown [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 173 4 173 48] (self : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) + predicate unknown [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 173 4 173 48] (self : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 172 4 172 16] not Sat0.sat self a && not Unsat0.unsat self a + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 172 4 172 16] not Sat0.sat self a && not Unsat0.unsat self a end module CreuSat_Logic_LogicClause_Impl2_SearchIdxInRange_Interface use Type @@ -14621,10 +14449,10 @@ module CreuSat_Logic_LogicClause_Impl2_SearchIdxInRange use mach.int.UInt64 use seq.Seq clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 - predicate search_idx_in_range [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 188 4 188 44] (self : Type.creusat_clause_clause) + predicate search_idx_in_range [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 188 4 188 44] (self : Type.creusat_clause_clause) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 189 8 191 9] 2 <= UInt64.to_int (Type.creusat_clause_clause_Clause_search self) && UInt64.to_int (Type.creusat_clause_clause_Clause_search self) <= Seq.length (Model0.model self) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 189 8 191 9] 2 <= UInt64.to_int (Type.creusat_clause_clause_Clause_search self) && UInt64.to_int (Type.creusat_clause_clause_Clause_search self) <= Seq.length (Model0.model self) end module CreuSat_Logic_LogicClause_Impl2_InvariantUnaryOk_Interface use Type @@ -14637,16 +14465,16 @@ module CreuSat_Logic_LogicClause_Impl2_InvariantUnaryOk clone CreuSat_Logic_LogicClause_Impl2_SearchIdxInRange_Interface as SearchIdxInRange0 clone CreuSat_Logic_LogicClause_Impl2_NoDuplicateIndexes_Interface as NoDuplicateIndexes0 clone CreuSat_Logic_LogicClause_Impl2_VarsInRange_Interface as VarsInRange0 - predicate invariant_unary_ok [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 203 4 203 51] (self : Type.creusat_clause_clause) (n : int) + predicate invariant_unary_ok [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 203 4 203 51] (self : Type.creusat_clause_clause) (n : int) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_clause.rs" 205 8 205 104] VarsInRange0.vars_in_range self n && NoDuplicateIndexes0.no_duplicate_indexes self && SearchIdxInRange0.search_idx_in_range self + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 205 8 205 104] VarsInRange0.vars_in_range self n && NoDuplicateIndexes0.no_duplicate_indexes self && SearchIdxInRange0.search_idx_in_range self end -module CreuSat_Logic_LogicFormula_Impl1_Compatible_Interface +module CreuSat_Logic_LogicFormula_Impl2_Compatible_Interface use Type predicate compatible (self : Type.creusat_formula_formula) (o : Type.creusat_formula_formula) end -module CreuSat_Logic_LogicFormula_Impl1_Compatible +module CreuSat_Logic_LogicFormula_Impl2_Compatible use Type use mach.int.UInt64 use seq.Seq @@ -14655,12 +14483,12 @@ module CreuSat_Logic_LogicFormula_Impl1_Compatible clone CreuSat_Logic_LogicClause_Impl2_Equals_Interface as Equals0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . - predicate compatible [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 84 4 84 47] (self : Type.creusat_formula_formula) (o : Type.creusat_formula_formula) + predicate compatible [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 91 4 91 47] (self : Type.creusat_formula_formula) (o : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 85 8 90 9] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars o) && Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses o)) >= Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) -> Equals0.equals (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) i) (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses o)) i)) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 92 8 97 9] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars o) && Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses o)) >= Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) -> Equals0.equals (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) i) (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses o)) i)) end -module CreuSat_Logic_LogicFormula_Impl1_EventuallySatInner_Interface +module CreuSat_Logic_LogicFormula_Impl2_EventuallySatInner_Interface use Type use seq.Seq use mach.int.Int @@ -14668,21 +14496,21 @@ module CreuSat_Logic_LogicFormula_Impl1_EventuallySatInner_Interface use prelude.UInt8 predicate eventually_sat_inner (self : Type.creusat_formula_formula) (a : Seq.seq uint8) end -module CreuSat_Logic_LogicFormula_Impl1_EventuallySatInner +module CreuSat_Logic_LogicFormula_Impl2_EventuallySatInner use Type use seq.Seq use mach.int.Int use prelude.Prelude use prelude.UInt8 use mach.int.UInt64 - clone CreuSat_Logic_LogicFormula_Impl1_SatInner_Interface as SatInner0 + clone CreuSat_Logic_LogicFormula_Impl2_SatInner_Interface as SatInner0 clone CreuSat_Logic_LogicAssignments_CompatibleInner_Interface as CompatibleInner0 - predicate eventually_sat_inner [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 118 4 118 64] (self : Type.creusat_formula_formula) (a : Seq.seq uint8) + predicate eventually_sat_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 125 4 125 64] (self : Type.creusat_formula_formula) (a : Seq.seq uint8) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 119 8 121 9] exists a2 : (Seq.seq uint8) . Seq.length a2 = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self) && CompatibleInner0.compatible_inner a a2 && SatInner0.sat_inner self a2 + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 126 8 128 9] exists a2 : (Seq.seq uint8) . Seq.length a2 = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self) && CompatibleInner0.compatible_inner a a2 && SatInner0.sat_inner self a2 end -module CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteInner_Interface +module CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteInner_Interface use Type use seq.Seq use mach.int.Int @@ -14690,47 +14518,47 @@ module CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteInner_Interface use prelude.UInt8 predicate eventually_sat_complete_inner (self : Type.creusat_formula_formula) (a : Seq.seq uint8) end -module CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteInner +module CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteInner use Type use seq.Seq use mach.int.Int use prelude.Prelude use prelude.UInt8 use mach.int.UInt64 - clone CreuSat_Logic_LogicFormula_Impl1_SatInner_Interface as SatInner0 + clone CreuSat_Logic_LogicFormula_Impl2_SatInner_Interface as SatInner0 clone CreuSat_Logic_LogicAssignments_CompatibleCompleteInner_Interface as CompatibleCompleteInner0 - predicate eventually_sat_complete_inner [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 125 4 125 73] (self : Type.creusat_formula_formula) (a : Seq.seq uint8) + predicate eventually_sat_complete_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 132 4 132 73] (self : Type.creusat_formula_formula) (a : Seq.seq uint8) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 126 8 128 9] exists a2 : (Seq.seq uint8) . Seq.length a2 = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self) && CompatibleCompleteInner0.compatible_complete_inner a a2 && SatInner0.sat_inner self a2 + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 133 8 135 9] exists a2 : (Seq.seq uint8) . Seq.length a2 = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self) && CompatibleCompleteInner0.compatible_complete_inner a a2 && SatInner0.sat_inner self a2 end -module CreuSat_Logic_LogicFormula_Impl1_EventuallySatComplete_Interface +module CreuSat_Logic_LogicFormula_Impl2_EventuallySatComplete_Interface use Type predicate eventually_sat_complete (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) end -module CreuSat_Logic_LogicFormula_Impl1_EventuallySatComplete +module CreuSat_Logic_LogicFormula_Impl2_EventuallySatComplete use Type - clone CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteInner_Interface as EventuallySatCompleteInner0 + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteInner_Interface as EventuallySatCompleteInner0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - predicate eventually_sat_complete [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 132 4 132 60] (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) + predicate eventually_sat_complete [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 139 4 139 60] (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 133 8 133 59] EventuallySatCompleteInner0.eventually_sat_complete_inner self (Model0.model a) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 140 8 140 59] EventuallySatCompleteInner0.eventually_sat_complete_inner self (Model0.model a) end -module CreuSat_Logic_LogicFormula_Impl1_EventuallySat_Interface +module CreuSat_Logic_LogicFormula_Impl2_EventuallySat_Interface use Type predicate eventually_sat (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) end -module CreuSat_Logic_LogicFormula_Impl1_EventuallySat +module CreuSat_Logic_LogicFormula_Impl2_EventuallySat use Type - clone CreuSat_Logic_LogicFormula_Impl1_EventuallySatInner_Interface as EventuallySatInner0 + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatInner_Interface as EventuallySatInner0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - predicate eventually_sat [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 137 4 137 51] (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) + predicate eventually_sat [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 144 4 144 51] (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 138 8 138 50] EventuallySatInner0.eventually_sat_inner self (Model0.model a) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 145 8 145 50] EventuallySatInner0.eventually_sat_inner self (Model0.model a) end -module CreuSat_Logic_LogicFormula_Impl1_UnsatInner_Interface +module CreuSat_Logic_LogicFormula_Impl2_UnsatInner_Interface use Type use seq.Seq use mach.int.Int @@ -14738,7 +14566,7 @@ module CreuSat_Logic_LogicFormula_Impl1_UnsatInner_Interface use prelude.UInt8 predicate unsat_inner (self : Type.creusat_formula_formula) (a : Seq.seq uint8) end -module CreuSat_Logic_LogicFormula_Impl1_UnsatInner +module CreuSat_Logic_LogicFormula_Impl2_UnsatInner use Type use seq.Seq use mach.int.Int @@ -14748,23 +14576,23 @@ module CreuSat_Logic_LogicFormula_Impl1_UnsatInner clone CreuSat_Logic_LogicClause_Impl2_UnsatInner_Interface as UnsatInner0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . - predicate unsat_inner [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 155 4 155 55] (self : Type.creusat_formula_formula) (a : Seq.seq uint8) + predicate unsat_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 162 4 162 55] (self : Type.creusat_formula_formula) (a : Seq.seq uint8) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 156 8 159 9] exists i : (int) . 0 <= i && i < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) && UnsatInner0.unsat_inner (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) i) a + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 163 8 166 9] exists i : (int) . 0 <= i && i < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) && UnsatInner0.unsat_inner (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) i) a end -module CreuSat_Logic_LogicFormula_Impl1_Unsat_Interface +module CreuSat_Logic_LogicFormula_Impl2_Unsat_Interface use Type predicate unsat (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) end -module CreuSat_Logic_LogicFormula_Impl1_Unsat +module CreuSat_Logic_LogicFormula_Impl2_Unsat use Type - clone CreuSat_Logic_LogicFormula_Impl1_UnsatInner_Interface as UnsatInner0 + clone CreuSat_Logic_LogicFormula_Impl2_UnsatInner_Interface as UnsatInner0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - predicate unsat [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 163 4 163 46] (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) + predicate unsat [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 170 4 170 46] (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_formula.rs" 164 8 164 42] UnsatInner0.unsat_inner self (Model0.model a) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 171 8 171 42] UnsatInner0.unsat_inner self (Model0.model a) end module CreuSat_Logic_LogicLit_Impl1_LitInInternal_Interface use Type @@ -14776,10 +14604,10 @@ module CreuSat_Logic_LogicLit_Impl1_LitInInternal use seq.Seq use mach.int.Int use mach.int.Int32 - predicate lit_in_internal [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 54 4 54 53] (self : Type.creusat_lit_lit) (c : Seq.seq (Type.creusat_lit_lit)) + predicate lit_in_internal [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 54 4 54 53] (self : Type.creusat_lit_lit) (c : Seq.seq (Type.creusat_lit_lit)) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 55 8 57 9] exists i : (int) . 0 <= i && i < Seq.length c && Seq.get c i = self + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 55 8 57 9] exists i : (int) . 0 <= i && i < Seq.length c && Seq.get c i = self end module CreuSat_Logic_LogicLit_Impl1_IdxInTrail_Interface use Type @@ -14794,10 +14622,10 @@ module CreuSat_Logic_LogicLit_Impl1_IdxInTrail clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, axiom . - predicate idx_in_trail [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 121 4 121 51] (self : Type.creusat_lit_lit) (t : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global)) + predicate idx_in_trail [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 121 4 121 51] (self : Type.creusat_lit_lit) (t : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global)) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_lit.rs" 122 8 125 9] exists i : (int) . 0 <= i && i < Seq.length (Model0.model t) && IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit (Seq.get (Model0.model t) i)) = IndexLogic0.index_logic self + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 122 8 125 9] exists i : (int) . 0 <= i && i < Seq.length (Model0.model t) && IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit (Seq.get (Model0.model t) i)) = IndexLogic0.index_logic self end module CreuSat_Logic_LogicTrail_Impl0_InvariantReasonNew_Interface use Type @@ -14816,10 +14644,10 @@ module CreuSat_Logic_LogicTrail_Impl0_InvariantReasonNew clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . - predicate invariant_reason_new [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 27 4 27 73] (self : Type.creusat_trail_reason) (f : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) + predicate invariant_reason_new [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 27 4 27 73] (self : Type.creusat_trail_reason) (f : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 28 8 42 9] match (self) with + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 28 8 42 9] match (self) with | Type.CreuSat_Trail_Reason_Long cref -> 0 <= UInt64.to_int cref && UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) && Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) > 1 && (forall i : (int) . 1 <= i && i < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) -> UnsatInner0.unsat_inner (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) i) (Model2.model a)) && SatInner0.sat_inner (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) 0) (Model2.model a) | Type.CreuSat_Trail_Reason_Unit cref -> 0 <= UInt64.to_int cref && UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) && Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) = 1 && SatInner0.sat_inner (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) 0) (Model2.model a) | _ -> true @@ -14837,10 +14665,10 @@ module CreuSat_Logic_LogicTrail_Impl2_NewPostUnit clone CreuSat_Logic_LogicTrail_Impl0_InvariantReasonNew_Interface as InvariantReasonNew0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, axiom . - predicate new_post_unit [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 105 4 105 50] (self : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) + predicate new_post_unit [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 105 4 105 50] (self : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 106 8 109 9] forall j : (int) . 0 <= j && j < Seq.length (Model0.model (Type.creusat_trail_trail_Trail_trail self)) -> InvariantReasonNew0.invariant_reason_new (Type.creusat_trail_step_Step_reason (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_trail self)) j)) f (Type.creusat_trail_trail_Trail_assignments self) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 106 8 109 9] forall j : (int) . 0 <= j && j < Seq.length (Model0.model (Type.creusat_trail_trail_Trail_trail self)) -> InvariantReasonNew0.invariant_reason_new (Type.creusat_trail_step_Step_reason (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_trail self)) j)) f (Type.creusat_trail_trail_Trail_assignments self) end module CreuSat_Logic_LogicTrail_ClausePostWithRegardsTo_Interface use Type @@ -14853,10 +14681,10 @@ module CreuSat_Logic_LogicTrail_ClausePostWithRegardsTo use mach.int.Int clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner_Interface as ClausePostWithRegardsToInner0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - predicate clause_post_with_regards_to [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 187 0 187 77] (c : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) (j : int) + predicate clause_post_with_regards_to [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 187 0 187 77] (c : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) (j : int) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 188 4 190 5] ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner c (Model0.model a) j + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 188 4 190 5] ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner c (Model0.model a) j end module CreuSat_Logic_LogicTrail_ClausePostWithRegardsToLit_Interface use Type @@ -14868,10 +14696,10 @@ module CreuSat_Logic_LogicTrail_ClausePostWithRegardsToLit use mach.int.UInt64 clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner_Interface as ClausePostWithRegardsToInner0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - predicate clause_post_with_regards_to_lit [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 203 0 203 83] (c : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) (lit : Type.creusat_lit_lit) + predicate clause_post_with_regards_to_lit [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 203 0 203 83] (c : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) (lit : Type.creusat_lit_lit) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 204 4 206 5] ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner c (Model0.model a) (UInt64.to_int (Type.creusat_lit_lit_Lit_idx lit)) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 204 4 206 5] ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner c (Model0.model a) (UInt64.to_int (Type.creusat_lit_lit_Lit_idx lit)) end module CreuSat_Logic_LogicTrail_LongArePostUnit_Interface use Type @@ -14889,10 +14717,10 @@ module CreuSat_Logic_LogicTrail_LongArePostUnit type a = Type.alloc_alloc_global, axiom . clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, axiom . - predicate long_are_post_unit [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 219 0 219 59] (trail : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) + predicate long_are_post_unit [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 219 0 219 59] (trail : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 220 4 226 5] forall j : (int) . 0 <= j && j < Seq.length (Model0.model (Type.creusat_trail_trail_Trail_trail trail)) -> match (Type.creusat_trail_step_Step_reason (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_trail trail)) j)) with + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 220 4 226 5] forall j : (int) . 0 <= j && j < Seq.length (Model0.model (Type.creusat_trail_trail_Trail_trail trail)) -> match (Type.creusat_trail_step_Step_reason (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_trail trail)) j)) with | Type.CreuSat_Trail_Reason_Long k -> ClausePostWithRegardsTo0.clause_post_with_regards_to (Seq.get (Model1.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int k)) (Type.creusat_trail_trail_Trail_assignments trail) (IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_trail trail)) j))) | _ -> true end @@ -14904,6 +14732,7 @@ module CreuSat_Logic_LogicTrail_LemmaAssignMaintainsLongArePostUnit_Interface use prelude.Prelude use prelude.UInt8 use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant1.invariant_mirror clone CreuSat_Logic_LogicTrail_LongArePostUnitInner_Interface as LongArePostUnitInner0 clone CreuSat_Logic_Logic_Unset_Interface as Unset0 clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 @@ -14911,9 +14740,7 @@ module CreuSat_Logic_LogicTrail_LemmaAssignMaintainsLongArePostUnit_Interface clone CreuSat_Logic_LogicLit_Impl1_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicTrail_CrefsInRange_Interface as CrefsInRange0 clone CreuSat_Logic_LogicTrail_TrailInvariant_Interface as TrailInvariant0 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant1 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant1 with axiom . clone CreuSat_Logic_LogicAssignments_Impl1_Invariant_Interface as Invariant0 function lemma_assign_maintains_long_are_post_unit (v : Seq.seq (Type.creusat_trail_step)) (f : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) (lit : Type.creusat_lit_lit) : () @@ -14925,6 +14752,7 @@ module CreuSat_Logic_LogicTrail_LemmaAssignMaintainsLongArePostUnit use prelude.Prelude use prelude.UInt8 use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant1.invariant_mirror clone CreuSat_Logic_LogicTrail_LongArePostUnitInner_Interface as LongArePostUnitInner0 clone CreuSat_Logic_Logic_Unset_Interface as Unset0 clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 @@ -14932,15 +14760,13 @@ module CreuSat_Logic_LogicTrail_LemmaAssignMaintainsLongArePostUnit clone CreuSat_Logic_LogicLit_Impl1_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicTrail_CrefsInRange_Interface as CrefsInRange0 clone CreuSat_Logic_LogicTrail_TrailInvariant_Interface as TrailInvariant0 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant1 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant1 with axiom . clone CreuSat_Logic_LogicAssignments_Impl1_Invariant_Interface as Invariant0 - function lemma_assign_maintains_long_are_post_unit [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 264 0 264 100] (v : Seq.seq (Type.creusat_trail_step)) (f : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) (lit : Type.creusat_lit_lit) : () + function lemma_assign_maintains_long_are_post_unit [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 264 0 264 100] (v : Seq.seq (Type.creusat_trail_step)) (f : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) (lit : Type.creusat_lit_lit) : () = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 254 0 254 8] () - axiom lemma_assign_maintains_long_are_post_unit_spec : forall v : Seq.seq (Type.creusat_trail_step), f : Type.creusat_formula_formula, a : Type.creusat_assignments_assignments, lit : Type.creusat_lit_lit . ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 255 0 255 27] Invariant0.invariant' a f) -> ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 256 0 256 26] Invariant1.invariant' f) -> ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 257 0 257 34] TrailInvariant0.trail_invariant v f) -> ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 258 0 258 33] CrefsInRange0.crefs_in_range v f) -> ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 259 0 259 39] Invariant2.invariant' lit (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))) -> ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 260 0 260 43] Unset0.unset (Seq.get (Model0.model a) (IndexLogic0.index_logic lit))) -> ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 261 0 261 47] LongArePostUnitInner0.long_are_post_unit_inner v f (Model0.model a)) -> ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 263 0 263 76] LongArePostUnitInner0.long_are_post_unit_inner v f (Seq.set (Model0.model a) (IndexLogic0.index_logic lit) (0 : uint8))) && ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 262 0 262 76] LongArePostUnitInner0.long_are_post_unit_inner v f (Seq.set (Model0.model a) (IndexLogic0.index_logic lit) (1 : uint8))) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 254 0 254 8] () + axiom lemma_assign_maintains_long_are_post_unit_spec : forall v : Seq.seq (Type.creusat_trail_step), f : Type.creusat_formula_formula, a : Type.creusat_assignments_assignments, lit : Type.creusat_lit_lit . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 255 0 255 27] Invariant0.invariant' a f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 256 0 256 26] Invariant1.invariant' f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 257 0 257 34] TrailInvariant0.trail_invariant v f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 258 0 258 33] CrefsInRange0.crefs_in_range v f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 259 0 259 39] Invariant2.invariant' lit (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 260 0 260 43] Unset0.unset (Seq.get (Model0.model a) (IndexLogic0.index_logic lit))) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 261 0 261 47] LongArePostUnitInner0.long_are_post_unit_inner v f (Model0.model a)) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 263 0 263 76] LongArePostUnitInner0.long_are_post_unit_inner v f (Seq.set (Model0.model a) (IndexLogic0.index_logic lit) (0 : uint8))) && ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 262 0 262 76] LongArePostUnitInner0.long_are_post_unit_inner v f (Seq.set (Model0.model a) (IndexLogic0.index_logic lit) (1 : uint8))) end module CreuSat_Logic_LogicTrail_LemmaAssignMaintainsLongArePostUnit_Impl use mach.int.UInt64 @@ -14949,65 +14775,64 @@ module CreuSat_Logic_LogicTrail_LemmaAssignMaintainsLongArePostUnit_Impl use prelude.Prelude use prelude.UInt8 use Type - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = Invariant2.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = SatInner0.index_logic, function IndexLogic0.index_logic = UnsatInner0.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant2 with predicate Invariant0.invariant' = Invariant3.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model4 with function Model0.model = Model5.model + type a = Type.alloc_alloc_global, function Model0.model = Model4.model, axiom . + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant4.invariant_internal + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner + clone CreuSat_Logic_LogicClause_Impl0_Model as Model4 with function Model1.model = InvariantMirror0.model, + function Model0.model = FormulaInvariant0.model, function Model0.model = ClausePostWithRegardsToInner0.model, + function Model0.model = Invariant4.model, function Model1.model = Invariant5.model clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant5 with function Model0.model = Model3.model, - function Model1.model = Model4.model - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Model3.model + type a = Type.alloc_alloc_global, function Model0.model = LongArePostUnitInner0.model, + function Model0.model = InvariantMirror0.model, function Model0.model = Model1.model, + function Model0.model = Invariant5.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant5 with predicate Invariant1.invariant' = Invariant3.invariant' + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant1.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Invariant1.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant1.invariant_mirror + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model0 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant0 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model4.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner0.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model3.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant2 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant2.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with function Model0.model = Model4.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant4.invariant', - function Model0.model = Model4.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model3.model, - predicate Invariant0.invariant' = Invariant4.invariant', function Model1.model = Model4.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant1 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model1.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = Invariant2.invariant', - predicate Invariant1.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant3.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model0 with function Model0.model = Invariant0.model + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant1 with axiom . + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant0 let rec ghost function lemma_assign_maintains_long_are_post_unit (v : Seq.seq (Type.creusat_trail_step)) (f : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) (lit : Type.creusat_lit_lit) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 255 0 255 27] Invariant0.invariant' a f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 256 0 256 26] Invariant1.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 257 0 257 34] TrailInvariant0.trail_invariant v f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 258 0 258 33] CrefsInRange0.crefs_in_range v f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 259 0 259 39] Invariant2.invariant' lit (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 260 0 260 43] Unset0.unset (Seq.get (Model0.model a) (IndexLogic0.index_logic lit))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 261 0 261 47] LongArePostUnitInner0.long_are_post_unit_inner v f (Model0.model a)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 262 0 262 76] LongArePostUnitInner0.long_are_post_unit_inner v f (Seq.set (Model0.model a) (IndexLogic0.index_logic lit) (1 : uint8)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 263 0 263 76] LongArePostUnitInner0.long_are_post_unit_inner v f (Seq.set (Model0.model a) (IndexLogic0.index_logic lit) (0 : uint8)) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 255 0 255 27] Invariant0.invariant' a f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 256 0 256 26] Invariant1.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 257 0 257 34] TrailInvariant0.trail_invariant v f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 258 0 258 33] CrefsInRange0.crefs_in_range v f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 259 0 259 39] Invariant2.invariant' lit (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 260 0 260 43] Unset0.unset (Seq.get (Model0.model a) (IndexLogic0.index_logic lit))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 261 0 261 47] LongArePostUnitInner0.long_are_post_unit_inner v f (Model0.model a)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 262 0 262 76] LongArePostUnitInner0.long_are_post_unit_inner v f (Seq.set (Model0.model a) (IndexLogic0.index_logic lit) (1 : uint8)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 263 0 263 76] LongArePostUnitInner0.long_are_post_unit_inner v f (Seq.set (Model0.model a) (IndexLogic0.index_logic lit) (0 : uint8)) } = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 254 0 254 8] () + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 254 0 254 8] () end module CreuSat_Logic_LogicTrail_LemmaPushMaintainsLitNotInLess_Interface use seq.Seq use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror clone CreuSat_Logic_LogicTrail_LitNotInLessInner_Interface as LitNotInLessInner0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, axiom . @@ -15016,15 +14841,14 @@ module CreuSat_Logic_LogicTrail_LemmaPushMaintainsLitNotInLess_Interface clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . function lemma_push_maintains_lit_not_in_less (t : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) (step : Type.creusat_trail_step) : () end module CreuSat_Logic_LogicTrail_LemmaPushMaintainsLitNotInLess use seq.Seq use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror clone CreuSat_Logic_LogicTrail_LitNotInLessInner_Interface as LitNotInLessInner0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, axiom . @@ -15033,14 +14857,12 @@ module CreuSat_Logic_LogicTrail_LemmaPushMaintainsLitNotInLess clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . - function lemma_push_maintains_lit_not_in_less [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 274 0 274 77] (t : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) (step : Type.creusat_trail_step) : () + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . + function lemma_push_maintains_lit_not_in_less [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 274 0 274 77] (t : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) (step : Type.creusat_trail_step) : () = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 267 0 267 8] () - axiom lemma_push_maintains_lit_not_in_less_spec : forall t : Type.creusat_trail_trail, f : Type.creusat_formula_formula, step : Type.creusat_trail_step . ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 268 0 268 26] Invariant0.invariant' f) -> ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 269 0 269 27] Invariant1.invariant' t f) -> ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 270 0 270 60] Unset0.unset (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments t)) (IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit step)))) -> ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 271 0 271 30] Invariant2.invariant' step f) -> ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 272 0 272 47] LitNotInLessInner0.lit_not_in_less_inner (Model1.model (Type.creusat_trail_trail_Trail_trail t)) f) -> ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 273 0 273 59] LitNotInLessInner0.lit_not_in_less_inner (Seq.snoc (Model1.model (Type.creusat_trail_trail_Trail_trail t)) step) f) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 267 0 267 8] () + axiom lemma_push_maintains_lit_not_in_less_spec : forall t : Type.creusat_trail_trail, f : Type.creusat_formula_formula, step : Type.creusat_trail_step . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 268 0 268 26] Invariant0.invariant' f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 269 0 269 27] Invariant1.invariant' t f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 270 0 270 60] Unset0.unset (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments t)) (IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit step)))) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 271 0 271 30] Invariant2.invariant' step f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 272 0 272 47] LitNotInLessInner0.lit_not_in_less_inner (Model1.model (Type.creusat_trail_trail_Trail_trail t)) f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 273 0 273 59] LitNotInLessInner0.lit_not_in_less_inner (Seq.snoc (Model1.model (Type.creusat_trail_trail_Trail_trail t)) step) f) end module CreuSat_Logic_LogicTrail_LemmaPushMaintainsLitNotInLess_Impl use seq.Seq @@ -15049,104 +14871,98 @@ module CreuSat_Logic_LogicTrail_LemmaPushMaintainsLitNotInLess_Impl use prelude.Prelude use prelude.UInt8 use mach.int.UInt64 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = Invariant3.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = SatInner0.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = Invariant2.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model6 with function Model0.model = Model7.model - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 + type a = Type.alloc_alloc_global, function Model0.model = Model6.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model6 with function Model1.model = InvariantMirror0.model, + function Model0.model = FormulaInvariant0.model, function Model1.model = Invariant4.model, + function Model0.model = LitIdxIn0.model, function Model0.model = Invariant5.model, + function Model1.model = UnitAreSat0.model, function Model0.model = ClausePostWithRegardsToInner0.model + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant4 with function Model0.model = Model5.model, - function Model1.model = Model6.model - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Model5.model - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model6.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner0.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model5.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model6.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model5.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant3.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant5 with function Model0.model = Model6.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant5.invariant', - function Model0.model = Model6.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model5.model, - predicate Invariant0.invariant' = Invariant5.invariant', function Model1.model = Model6.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model2.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant2 with predicate Invariant0.invariant' = Invariant3.invariant', - predicate Invariant1.invariant' = Invariant4.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant2.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model0 with function Model0.model = Model4.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model0.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model5.model, - function Model1.model = Model6.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant6 with function Model0.model = Model0.model + type a = Type.alloc_alloc_global, function Model0.model = LitNotInLessInner0.model, + function Model0.model = InvariantMirror0.model, function Model0.model = Model2.model, + function Model3.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant4.model, + function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant4 with predicate Invariant1.invariant' = Invariant2.invariant' + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant5.invariant_internal + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model0.model, axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model0 with function Model2.model = InvariantNoDecision0.model, + function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant6.model, + function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model1.model, - function Model1.model = Model0.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model1.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model1.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model3.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model0.model, - function Model1.model = Model1.model, predicate Invariant0.invariant' = Invariant2.invariant', - function Model2.model = Model3.model, function Model3.model = Model5.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant6.invariant', function Model0.model = Model1.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model3.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model0.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model3.model, function Model1.model = Model1.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Invariant0.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_Logic_Unset as Unset0 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . let rec ghost function lemma_push_maintains_lit_not_in_less (t : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) (step : Type.creusat_trail_step) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 268 0 268 26] Invariant0.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 269 0 269 27] Invariant1.invariant' t f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 270 0 270 60] Unset0.unset (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments t)) (IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit step)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 271 0 271 30] Invariant2.invariant' step f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 272 0 272 47] LitNotInLessInner0.lit_not_in_less_inner (Model1.model (Type.creusat_trail_trail_Trail_trail t)) f} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 273 0 273 59] LitNotInLessInner0.lit_not_in_less_inner (Seq.snoc (Model1.model (Type.creusat_trail_trail_Trail_trail t)) step) f } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 268 0 268 26] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 269 0 269 27] Invariant1.invariant' t f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 270 0 270 60] Unset0.unset (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments t)) (IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit step)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 271 0 271 30] Invariant2.invariant' step f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 272 0 272 47] LitNotInLessInner0.lit_not_in_less_inner (Model1.model (Type.creusat_trail_trail_Trail_trail t)) f} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 273 0 273 59] LitNotInLessInner0.lit_not_in_less_inner (Seq.snoc (Model1.model (Type.creusat_trail_trail_Trail_trail t)) step) f } = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_trail.rs" 267 0 267 8] () + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 267 0 267 8] () end module CreuSat_Logic_LogicUtil_LastIdx_Interface type t @@ -15160,9 +14976,9 @@ module CreuSat_Logic_LogicUtil_LastIdx use seq.Seq use mach.int.Int use mach.int.Int32 - function last_idx [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 77 0 77 36] (s : Seq.seq t) : int = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 78 4 78 27] Seq.length s - 1 - axiom last_idx_spec : forall s : Seq.seq t . ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 76 0 76 24] Seq.length s > 0) -> true + function last_idx [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 77 0 77 36] (s : Seq.seq t) : int = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 78 4 78 27] Seq.length s - 1 + axiom last_idx_spec : forall s : Seq.seq t . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 76 0 76 24] Seq.length s > 0) -> true end module CreuSat_Logic_LogicUtil_LastIdx_Impl type t @@ -15170,10 +14986,10 @@ module CreuSat_Logic_LogicUtil_LastIdx_Impl use mach.int.Int use mach.int.Int32 let rec ghost function last_idx (s : Seq.seq t) : int - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 76 0 76 24] Seq.length s > 0} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 76 0 76 24] Seq.length s > 0} = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 78 4 78 27] Seq.length s - 1 + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 78 4 78 27] Seq.length s - 1 end module CreuSat_Logic_LogicUtil_LastElem_Interface type t @@ -15187,9 +15003,9 @@ module CreuSat_Logic_LogicUtil_LastElem use seq.Seq use mach.int.Int use mach.int.Int32 - function last_elem [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 84 0 84 35] (s : Seq.seq t) : t = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 85 4 85 30] Seq.get s (Seq.length s - 1) - axiom last_elem_spec : forall s : Seq.seq t . ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 83 0 83 24] Seq.length s > 0) -> true + function last_elem [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 84 0 84 35] (s : Seq.seq t) : t = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 85 4 85 30] Seq.get s (Seq.length s - 1) + axiom last_elem_spec : forall s : Seq.seq t . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 83 0 83 24] Seq.length s > 0) -> true end module CreuSat_Logic_LogicUtil_LastElem_Impl type t @@ -15197,10 +15013,10 @@ module CreuSat_Logic_LogicUtil_LastElem_Impl use mach.int.Int use mach.int.Int32 let rec ghost function last_elem (s : Seq.seq t) : t - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 83 0 83 24] Seq.length s > 0} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 83 0 83 24] Seq.length s > 0} = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 85 4 85 30] Seq.get s (Seq.length s - 1) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 85 4 85 30] Seq.get s (Seq.length s - 1) end module CreuSat_Logic_LogicUtil_LemmaPopMaintainsSorted_Interface use seq.Seq @@ -15220,11 +15036,11 @@ module CreuSat_Logic_LogicUtil_LemmaPopMaintainsSorted use mach.int.UInt64 clone CreuSat_Logic_LogicUtil_Pop_Interface as Pop0 with type t = usize, axiom . clone CreuSat_Logic_LogicUtil_Sorted_Interface as Sorted0 - function lemma_pop_maintains_sorted [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 93 0 93 48] (s : Seq.seq usize) : () + function lemma_pop_maintains_sorted [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 93 0 93 48] (s : Seq.seq usize) : () = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 88 0 88 8] () - axiom lemma_pop_maintains_sorted_spec : forall s : Seq.seq usize . ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 90 0 90 24] Seq.length s > 0) -> ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 91 0 91 22] Sorted0.sorted s) -> ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 92 0 92 26] Sorted0.sorted (Pop0.pop s)) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 88 0 88 8] () + axiom lemma_pop_maintains_sorted_spec : forall s : Seq.seq usize . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 90 0 90 24] Seq.length s > 0) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 91 0 91 22] Sorted0.sorted s) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 92 0 92 26] Sorted0.sorted (Pop0.pop s)) end module CreuSat_Logic_LogicUtil_LemmaPopMaintainsSorted_Impl use seq.Seq @@ -15232,16 +15048,16 @@ module CreuSat_Logic_LogicUtil_LemmaPopMaintainsSorted_Impl use mach.int.Int32 use prelude.Prelude use mach.int.UInt64 + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range clone CreuSat_Logic_LogicUtil_Pop as Pop0 with type t = usize, axiom . - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 let rec ghost function lemma_pop_maintains_sorted (s : Seq.seq usize) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 90 0 90 24] Seq.length s > 0} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 91 0 91 22] Sorted0.sorted s} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 92 0 92 26] Sorted0.sorted (Pop0.pop s) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 90 0 90 24] Seq.length s > 0} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 91 0 91 22] Sorted0.sorted s} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 92 0 92 26] Sorted0.sorted (Pop0.pop s) } = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_util.rs" 88 0 88 8] () + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 88 0 88 8] () end module CreuSat_Logic_LogicWatches_WatchValid_Interface use seq.Seq @@ -15258,10 +15074,10 @@ module CreuSat_Logic_LogicWatches_WatchValid clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . - predicate watch_valid [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 25 0 25 55] (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) + predicate watch_valid [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 25 0 25 55] (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 26 4 31 5] forall j : (int) . 0 <= j && j < Seq.length w -> UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref (Seq.get w j)) < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) && Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref (Seq.get w j))))) > 1 && IndexLogic0.index_logic (Type.creusat_watches_watcher_Watcher_blocker (Seq.get w j)) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 26 4 31 5] forall j : (int) . 0 <= j && j < Seq.length w -> UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref (Seq.get w j)) < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) && Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref (Seq.get w j))))) > 1 && IndexLogic0.index_logic (Type.creusat_watches_watcher_Watcher_blocker (Seq.get w j)) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) end module CreuSat_Logic_LogicWatches_WatchesCrefsInRange_Interface use seq.Seq @@ -15277,10 +15093,10 @@ module CreuSat_Logic_LogicWatches_WatchesCrefsInRange clone CreuSat_Logic_LogicWatches_WatcherCrefsInRange_Interface as WatcherCrefsInRange0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_watches_watcher, type a = Type.alloc_alloc_global, axiom . - predicate watches_crefs_in_range [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 43 0 43 71] (w : Seq.seq (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global))) (f : Type.creusat_formula_formula) + predicate watches_crefs_in_range [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 43 0 43 71] (w : Seq.seq (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global))) (f : Type.creusat_formula_formula) = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 44 4 47 5] forall i : (int) . 0 <= i && i < Seq.length w -> WatcherCrefsInRange0.watcher_crefs_in_range (Model0.model (Seq.get w i)) f + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 44 4 47 5] forall i : (int) . 0 <= i && i < Seq.length w -> WatcherCrefsInRange0.watcher_crefs_in_range (Model0.model (Seq.get w i)) f end module CreuSat_Logic_LogicWatches_LemmaPushMaintainsWatcherInvariant_Interface use mach.int.UInt64 @@ -15301,11 +15117,11 @@ module CreuSat_Logic_LogicWatches_LemmaPushMaintainsWatcherInvariant clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . clone CreuSat_Logic_LogicWatches_WatcherCrefsInRange_Interface as WatcherCrefsInRange0 - function lemma_push_maintains_watcher_invariant [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 62 0 62 86] (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) (o : Type.creusat_watches_watcher) : () + function lemma_push_maintains_watcher_invariant [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 62 0 62 86] (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) (o : Type.creusat_watches_watcher) : () = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 57 0 57 8] () - axiom lemma_push_maintains_watcher_invariant_spec : forall w : Seq.seq (Type.creusat_watches_watcher), f : Type.creusat_formula_formula, o : Type.creusat_watches_watcher . ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 59 0 59 41] WatcherCrefsInRange0.watcher_crefs_in_range w f) -> ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 60 0 60 41] UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref o) < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))) -> ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 61 0 61 48] WatcherCrefsInRange0.watcher_crefs_in_range (Seq.snoc w o) f) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 57 0 57 8] () + axiom lemma_push_maintains_watcher_invariant_spec : forall w : Seq.seq (Type.creusat_watches_watcher), f : Type.creusat_formula_formula, o : Type.creusat_watches_watcher . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 59 0 59 41] WatcherCrefsInRange0.watcher_crefs_in_range w f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 60 0 60 41] UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref o) < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 61 0 61 48] WatcherCrefsInRange0.watcher_crefs_in_range (Seq.snoc w o) f) end module CreuSat_Logic_LogicWatches_LemmaPushMaintainsWatcherInvariant_Impl use mach.int.UInt64 @@ -15313,15 +15129,15 @@ module CreuSat_Logic_LogicWatches_LemmaPushMaintainsWatcherInvariant_Impl use mach.int.Int use Type clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_WatcherCrefsInRange as WatcherCrefsInRange0 with function Model0.model = Model0.model + type a = Type.alloc_alloc_global, function Model0.model = WatcherCrefsInRange0.model, axiom . + clone CreuSat_Logic_LogicWatches_WatcherCrefsInRange as WatcherCrefsInRange0 let rec ghost function lemma_push_maintains_watcher_invariant (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) (o : Type.creusat_watches_watcher) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 59 0 59 41] WatcherCrefsInRange0.watcher_crefs_in_range w f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 60 0 60 41] UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref o) < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 61 0 61 48] WatcherCrefsInRange0.watcher_crefs_in_range (Seq.snoc w o) f } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 59 0 59 41] WatcherCrefsInRange0.watcher_crefs_in_range w f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 60 0 60 41] UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref o) < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 61 0 61 48] WatcherCrefsInRange0.watcher_crefs_in_range (Seq.snoc w o) f } = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/logic/logic_watches.rs" 57 0 57 8] () + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 57 0 57 8] () end module CreuSat_Solver_GetAssertingLevel_Interface use mach.int.UInt64 @@ -15330,29 +15146,26 @@ module CreuSat_Solver_GetAssertingLevel_Interface use mach.int.Int32 use prelude.Prelude use Type + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model1.modelTy + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner_Interface as NoDuplicateIndexesInner0 clone CreuSat_Logic_LogicClause_VarsInRangeInner_Interface as VarsInRangeInner0 - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model1 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy1.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model1 with type t = Type.creusat_clause_clause clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicClause_EquisatExtensionInner_Interface as EquisatExtensionInner0 - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_formula_formula clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val get_asserting_level [@cfg:stackify] (clause : Type.creusat_clause_clause) (trail : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) : (usize, usize) - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 32 0 32 26] Invariant0.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 33 0 33 32] Invariant1.invariant' trail f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 34 0 34 49] EquisatExtensionInner0.equisat_extension_inner clause (Model0.model f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 35 0 35 42] Invariant2.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 36 0 36 32] Seq.length (Model1.model clause) > 1} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 37 0 37 54] VarsInRangeInner0.vars_in_range_inner (Model1.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 38 0 38 48] NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model clause)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 39 0 39 39] UInt64.to_int (let (a, _) = result in a) < Seq.length (Model1.model clause) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 32 0 32 26] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 33 0 33 32] Invariant1.invariant' trail f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 34 0 34 49] EquisatExtensionInner0.equisat_extension_inner clause (Model0.model f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 35 0 35 42] Invariant2.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 36 0 36 32] Seq.length (Model1.model clause) > 1} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 37 0 37 54] VarsInRangeInner0.vars_in_range_inner (Model1.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 38 0 38 48] NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model clause)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 39 0 39 39] UInt64.to_int (let (a, _) = result in a) < Seq.length (Model1.model clause) } end module CreuSat_Solver_GetAssertingLevel @@ -15363,127 +15176,118 @@ module CreuSat_Solver_GetAssertingLevel use prelude.Prelude use Type use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model7 with function Model0.model = Model9.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with function Model0.model = Model7.model + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = Invariant3.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = SatInner0.index_logic, function IndexLogic0.index_logic = UnsatInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, + predicate SatInner0.sat_inner = SatInner1.sat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model5 with function Model0.model = Model8.model - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 + type a = Type.alloc_alloc_global, function Model0.model = Model5.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model5 with function Model0.model = Invariant2.model, + function Model0.model = Model1.model, function Model1.model = InvariantMirror0.model, + function Model0.model = FormulaInvariant0.model, function Model1.model = UnitAreSat0.model, + function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, + function Model1.model = Invariant6.model, function Model0.model = SatInner1.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner1 with predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant6 with function Model0.model = Model6.model, - function Model1.model = Model5.model - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Model6.model - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner1 with function Model0.model = Model5.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model5.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner0.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model6.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model7.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model6.model, - function Model1.model = Model5.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model5.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model6.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = Invariant3.invariant', - predicate Invariant1.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant3.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with function Model0.model = Model5.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant2.invariant', - function Model0.model = Model5.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model6.model, - predicate Invariant0.invariant' = Invariant2.invariant', function Model1.model = Model5.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model2.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 - clone CreusotContracts_Logic_Model_Impl0_Model as Model1 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model5.model - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model2.model + type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, + function Model0.model = Model2.model, function Model3.model = InvariantNoDecisionMirror0.model, + function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant6.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant6 with predicate Invariant1.invariant' = Invariant5.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model7.model, axiom . + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant', + predicate Invariant0.invariant' = Invariant5.invariant' + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss0.formula_sat_inner + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model7 with function Model2.model = InvariantNoDecision0.model, + function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant4.model, + function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model4.model, - function Model1.model = Model7.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model4.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model4.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model3.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model7.model, - function Model1.model = Model4.model, predicate Invariant0.invariant' = Invariant5.invariant', - function Model2.model = Model3.model, function Model3.model = Model6.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant4.invariant', function Model0.model = Model4.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model3.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model7.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model3.model, function Model1.model = Model4.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model1.modelTy + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant2.invariant_internal + clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Invariant0.model, + function Model0.model = Model0.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreusotContracts_Logic_Model_Impl0_Model as Model1 with type t = Type.creusat_clause_clause + clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 + clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_formula_formula + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy2 with type t = usize - clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize - clone CreuSat_Lit_Impl1_Index_Interface as Index1 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Clause_Impl3_Len_Interface as Len0 with function Model0.model = Model1.model - clone CreuSat_Clause_Impl0_Index_Interface as Index0 with function Model0.model = Model1.model - clone Alloc_Vec_Impl16_Index_Interface as Index2 with type t = usize, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model3.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - type Output0.output = Output0.output - let rec cfg get_asserting_level [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 40 0 40 89] (clause : Type.creusat_clause_clause) (trail : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) : (usize, usize) - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 32 0 32 26] Invariant0.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 33 0 33 32] Invariant1.invariant' trail f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 34 0 34 49] EquisatExtensionInner0.equisat_extension_inner clause (Model0.model f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 35 0 35 42] Invariant2.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 36 0 36 32] Seq.length (Model1.model clause) > 1} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 37 0 37 54] VarsInRangeInner0.vars_in_range_inner (Model1.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 38 0 38 48] NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model clause)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 39 0 39 39] UInt64.to_int (let (a, _) = result in a) < Seq.length (Model1.model clause) } + clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize, type Output0.output = Index2.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize, + predicate HasValue0.has_value = Index2.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize, + predicate InBounds0.in_bounds = Index2.in_bounds + clone CreuSat_Clause_Impl3_Len_Interface as Len0 + clone Alloc_Vec_Impl16_Index_Interface as Index2 with type t = usize, type i = usize, type a = Type.alloc_alloc_global + clone CreuSat_Lit_Impl1_Index_Interface as Index1 + clone CreuSat_Clause_Impl0_Index_Interface as Index0 + let rec cfg get_asserting_level [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 40 0 40 89] (clause : Type.creusat_clause_clause) (trail : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) : (usize, usize) + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 32 0 32 26] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 33 0 33 32] Invariant1.invariant' trail f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 34 0 34 49] EquisatExtensionInner0.equisat_extension_inner clause (Model0.model f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 35 0 35 42] Invariant2.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 36 0 36 32] Seq.length (Model1.model clause) > 1} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 37 0 37 54] VarsInRangeInner0.vars_in_range_inner (Model1.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 38 0 38 48] NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model clause)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 39 0 39 39] UInt64.to_int (let (a, _) = result in a) < Seq.length (Model1.model clause) } = var _0 : (usize, usize); @@ -15534,16 +15338,16 @@ module CreuSat_Solver_GetAssertingLevel max_i_4 <- (1 : usize); _7 <- Type.creusat_trail_trail_Trail_lit_to_level trail_2; _11 <- clause_1; - _10 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 42 43 42 52] Index0.index _11 (1 : usize)); + _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 42 43 42 52] Index0.index _11 (1 : usize)); goto BB1 } BB1 { _9 <- _10; - _8 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 42 43 42 60] Index1.index _9); + _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 42 43 42 60] Index1.index _9); goto BB2 } BB2 { - _6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 42 24 42 61] Index2.index _7 _8); + _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 42 24 42 61] Index2.index _7 _8); goto BB3 } BB3 { @@ -15552,14 +15356,14 @@ module CreuSat_Solver_GetAssertingLevel goto BB4 } BB4 { - invariant max_i_less { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 44 4 44 54] UInt64.to_int max_i_4 < Seq.length (Model1.model clause_1) }; + invariant max_i_less { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 44 4 44 54] UInt64.to_int max_i_4 < Seq.length (Model1.model clause_1) }; _16 <- i_12; _18 <- clause_1; - _17 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 45 14 45 26] Len0.len _18); + _17 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 45 14 45 26] Len0.len _18); goto BB5 } BB5 { - _15 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 45 10 45 26] _16 < _17); + _15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 45 10 45 26] _16 < _17); switch (_15) | False -> goto BB13 | _ -> goto BB6 @@ -15569,23 +15373,23 @@ module CreuSat_Solver_GetAssertingLevel _21 <- Type.creusat_trail_trail_Trail_lit_to_level trail_2; _25 <- clause_1; _26 <- i_12; - _24 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 46 39 46 48] Index0.index _25 _26); + _24 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 46 39 46 48] Index0.index _25 _26); goto BB7 } BB7 { _23 <- _24; - _22 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 46 39 46 56] Index1.index _23); + _22 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 46 39 46 56] Index1.index _23); goto BB8 } BB8 { - _20 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 46 20 46 57] Index2.index _21 _22); + _20 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 46 20 46 57] Index2.index _21 _22); goto BB9 } BB9 { level_19 <- _20; _29 <- level_19; _30 <- max_level_5; - _28 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 47 11 47 28] _29 > _30); + _28 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 47 11 47 28] _29 > _30); switch (_28) | False -> goto BB11 | _ -> goto BB10 @@ -15604,7 +15408,7 @@ module CreuSat_Solver_GetAssertingLevel goto BB12 } BB12 { - i_12 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 51 8 51 14] i_12 + (1 : usize)); + i_12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 51 8 51 14] i_12 + (1 : usize)); _14 <- (); goto BB4 } @@ -15641,16 +15445,17 @@ module CreuSat_Assignments_Impl1 use prelude.UInt8 use Type use mach.int.UInt64 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model2.model - clone CreuSat_Assignments_Impl0_Output as Output0 - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model1.model, axiom . + clone CreuSat_Assignments_Impl0_Output as Output0 with type Output0.output = IndexMut1.output + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model1.model = IndexMut0.model, + function Model0.model = Model0.model clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model - clone CreuSat_Assignments_Impl1_IndexMut_Interface as IndexMut0 with function Model0.model = Model0.model, - function Model1.model = Model1.model + function Model0.model = IndexMut0.model + clone CreuSat_Assignments_Impl1_IndexMut_Interface as IndexMut0 with val index_mut = IndexMut1.index_mut clone Core_Ops_Index_IndexMut_IndexMut_Interface as IndexMut1 with type self = Type.creusat_assignments_assignments, - type idx = usize, val index_mut = IndexMut0.index_mut, type Output0.output = Output0.output + type idx = usize end module CreuSat_Trail_Impl0_Backstep_Interface use mach.int.UInt64 @@ -15658,24 +15463,22 @@ module CreuSat_Trail_Impl0_Backstep_Interface use mach.int.Int32 use prelude.Prelude use Type + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror_Interface as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror clone CreuSat_Logic_LogicTrail_LongArePostUnitInner_Interface as LongArePostUnitInner0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model1 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror_Interface as InvariantNoDecisionMirror0 - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision_Interface as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - axiom . - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision_Interface as InvariantNoDecision0 with axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val backstep [@cfg:stackify] (self : borrowed (Type.creusat_trail_trail)) (f : Type.creusat_formula_formula) : usize - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 58 4 58 30] Invariant0.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 59 4 59 32] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) > 0} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 60 4 60 54] InvariantNoDecision0.invariant_no_decision ( * self) f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 61 4 61 77] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 60 4 60 54] InvariantNoDecision0.invariant_no_decision ( ^ self) f } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 62 4 62 86] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 63 4 63 37] UInt64.to_int result < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 58 4 58 30] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 59 4 59 32] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) > 0} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 60 4 60 54] InvariantNoDecision0.invariant_no_decision ( * self) f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 61 4 61 77] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 60 4 60 54] InvariantNoDecision0.invariant_no_decision ( ^ self) f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 62 4 62 86] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 63 4 63 37] UInt64.to_int result < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) } end module CreuSat_Trail_Impl0_Backstep @@ -15685,120 +15488,111 @@ module CreuSat_Trail_Impl0_Backstep use prelude.Prelude use Type use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, function IndexLogic0.index_logic = SatInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic, function IndexLogic0.index_logic = Invariant4.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = Invariant3.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model6 with function Model0.model = Model7.model - clone CreuSat_Logic_LogicUtil_Pop as Pop0 with type t = Type.creusat_trail_step, axiom . - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant4 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant4.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with function Model0.model = Model6.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant2.invariant', - function Model0.model = Model6.model - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model6.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner0.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model6.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic + type a = Type.alloc_alloc_global, function Model0.model = Model6.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model6 with function Model1.model = InvariantMirror0.model, + function Model0.model = FormulaInvariant0.model, function Model1.model = UnitAreSat0.model, + function Model0.model = ClausePostWithRegardsToInner0.model, function Model0.model = Invariant2.model, + function Model0.model = LitIdxIn0.model, function Model1.model = Invariant5.model clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant5 with function Model0.model = Model5.model, - function Model1.model = Model6.model - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = Invariant4.invariant', - predicate Invariant1.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant3.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model5.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Model5.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model5.model, - predicate Invariant0.invariant' = Invariant2.invariant', function Model1.model = Model6.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model2.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model5.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model4.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model1.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model5.model, - function Model1.model = Model6.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant1 with function Model0.model = Model1.model - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model3.model, - predicate Sorted0.sorted = Sorted0.sorted + type a = Type.alloc_alloc_global, function Model0.model = LongArePostUnitInner0.model, + function Model0.model = InvariantMirror0.model, function Model0.model = Model2.model, + function Model3.model = InvariantNoDecisionMirror0.model, function Model0.model = UnitAreSat0.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant5.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant5 with predicate Invariant1.invariant' = Invariant3.invariant' + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant2.invariant_internal + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, + predicate SatInner0.sat_inner = Sat0.sat_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model2.model = InvariantNoDecision0.model, + function Model0.model = Invariant1.model, function Model1.model = TrailEntriesAreAssigned0.model, + function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = usize, type a = Type.alloc_alloc_global, + function Model1.model = InvariantNoDecision0.model, function Model2.model = InvariantNoDecisionMirror0.model, + function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model1.model, - function Model1.model = Model0.model, predicate Invariant0.invariant' = Invariant3.invariant', - function Model2.model = Model3.model, function Model3.model = Model5.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model0.model, - function Model1.model = Model1.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model0.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model0.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant1.invariant', function Model0.model = Model0.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model3.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model1.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . + type a = Type.alloc_alloc_global, function Model0.model = InvariantNoDecision0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, function Model1.model = InvariantNoDecisionMirror0.model, + axiom . + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Invariant0.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicUtil_Pop as Pop0 with type t = Type.creusat_trail_step, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . use mach.int.Int64 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = usize clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = usize - clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = usize - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = uint8 - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_trail_trail - clone CreuSat_Lit_Impl1_Index_Interface as Index0 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize, type Output0.output = IndexMut1.output + clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = usize, + predicate ResolveElswhere0.resolve_elswhere = IndexMut1.resolve_elswhere + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize, + predicate HasValue0.has_value = IndexMut1.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize, + predicate InBounds0.in_bounds = IndexMut1.in_bounds + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model8.modelTy clone CreusotContracts_Logic_Model_Impl1_Model as Model8 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model - clone CreuSat_Assignments_Impl1_IndexMut_Interface as IndexMut0 with function Model0.model = Model8.model, - function Model1.model = Model1.model + function Model0.model = IndexMut0.model + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = usize clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut1 with type t = usize, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model3.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - predicate ResolveElswhere0.resolve_elswhere = ResolveElswhere0.resolve_elswhere, type Output0.output = Output0.output - clone Alloc_Vec_Impl1_Pop_Interface as Pop1 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, - function Model0.model = Model0.model - let rec cfg backstep [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 65 4 65 48] (self : borrowed (Type.creusat_trail_trail)) (f : Type.creusat_formula_formula) : usize - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 58 4 58 30] Invariant0.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 59 4 59 32] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) > 0} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 60 4 60 54] InvariantNoDecision0.invariant_no_decision ( * self) f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 61 4 61 77] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 60 4 60 54] InvariantNoDecision0.invariant_no_decision ( ^ self) f } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 62 4 62 86] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 63 4 63 37] UInt64.to_int result < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) } + type a = Type.alloc_alloc_global + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = uint8 + clone CreuSat_Assignments_Impl1_IndexMut_Interface as IndexMut0 + clone CreuSat_Lit_Impl1_Index_Interface as Index0 + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_trail_trail + clone Alloc_Vec_Impl1_Pop_Interface as Pop1 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global + let rec cfg backstep [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 65 4 65 48] (self : borrowed (Type.creusat_trail_trail)) (f : Type.creusat_formula_formula) : usize + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 58 4 58 30] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 59 4 59 32] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) > 0} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 60 4 60 54] InvariantNoDecision0.invariant_no_decision ( * self) f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 61 4 61 77] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 60 4 60 54] InvariantNoDecision0.invariant_no_decision ( ^ self) f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 62 4 62 86] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 63 4 63 37] UInt64.to_int result < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) } = var _0 : usize; @@ -15838,13 +15632,13 @@ module CreuSat_Trail_Impl0_Backstep } BB0 { _5 <- (); - old_t_4 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 66 20 66 35] self_1); + old_t_4 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 66 20 66 35] self_1); goto BB1 } BB1 { _7 <- borrow_mut (Type.creusat_trail_trail_Trail_trail ( * self_1)); self_1 <- { self_1 with current = (let Type.CreuSat_Trail_Trail a b c d e = * self_1 in Type.CreuSat_Trail_Trail a b ( ^ _7) d e) }; - last_6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 68 19 68 35] Pop1.pop _7); + last_6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 68 19 68 35] Pop1.pop _7); goto BB2 } BB2 { @@ -15855,18 +15649,18 @@ module CreuSat_Trail_Impl0_Backstep } BB3 { assume { Resolve0.resolve self_1 }; - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 85 16 85 98] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) f_2 (Model1.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) && true }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 85 16 85 98] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) f_2 (Model1.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) && true }; _24 <- (); _8 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 88 8 88 53] Invariant1.invariant' (Type.creusat_trail_trail_Trail_assignments ( * self_1)) f_2 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 88 8 88 53] Invariant1.invariant' (Type.creusat_trail_trail_Trail_assignments ( * self_1)) f_2 }; _25 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 92 8 92 47] LitNotInLess0.lit_not_in_less ( * self_1) f_2 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 92 8 92 47] LitNotInLess0.lit_not_in_less ( * self_1) f_2 }; _26 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 93 8 93 43] LitIsUnique0.lit_is_unique ( * self_1) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 93 8 93 43] LitIsUnique0.lit_is_unique ( * self_1) }; _27 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 94 8 94 83] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) f_2 (Model1.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 94 8 94 83] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) f_2 (Model1.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) }; _28 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 95 8 95 56] TrailEntriesAreAssigned0.trail_entries_are_assigned ( * self_1) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 95 8 95 56] TrailEntriesAreAssigned0.trail_entries_are_assigned ( * self_1) }; _29 <- (); _0 <- (0 : usize); goto BB11 @@ -15880,38 +15674,38 @@ module CreuSat_Trail_Impl0_Backstep _13 <- borrow_mut (Type.creusat_trail_trail_Trail_assignments ( * self_1)); self_1 <- { self_1 with current = (let Type.CreuSat_Trail_Trail a b c d e = * self_1 in Type.CreuSat_Trail_Trail ( ^ _13) b c d e) }; _15 <- Type.creusat_trail_step_Step_lit step_10; - _14 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 72 33 72 49] Index0.index _15); + _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 72 33 72 49] Index0.index _15); goto BB6 } BB6 { - _12 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 72 16 72 50] IndexMut0.index_mut _13 _14); + _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 72 16 72 50] IndexMut0.index_mut _13 _14); goto BB7 } BB7 { - _12 <- { _12 with current = ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 72 16 72 55] * _12 + (2 : uint8)) }; + _12 <- { _12 with current = ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 72 16 72 55] * _12 + (2 : uint8)) }; assume { Resolve1.resolve _12 }; - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 74 16 74 63] Model0.model (Type.creusat_trail_trail_Trail_trail ( * self_1)) = Pop0.pop (Model0.model (Type.creusat_trail_trail_Trail_trail ( * old_t_4))) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 74 16 74 63] Model0.model (Type.creusat_trail_trail_Trail_trail ( * self_1)) = Pop0.pop (Model0.model (Type.creusat_trail_trail_Trail_trail ( * old_t_4))) }; _16 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 75 16 75 54] ^ old_t_4 = ^ self_1 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 75 16 75 54] ^ old_t_4 = ^ self_1 }; _17 <- (); _19 <- borrow_mut (Type.creusat_trail_trail_Trail_lit_to_level ( * self_1)); self_1 <- { self_1 with current = (let Type.CreuSat_Trail_Trail a b c d e = * self_1 in Type.CreuSat_Trail_Trail a ( ^ _19) c d e) }; assume { Resolve0.resolve self_1 }; _21 <- Type.creusat_trail_step_Step_lit step_10; - _20 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 77 34 77 50] Index0.index _21); + _20 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 77 34 77 50] Index0.index _21); goto BB8 } BB8 { - _18 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 77 16 77 51] IndexMut1.index_mut _19 _20); + _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 77 16 77 51] IndexMut1.index_mut _19 _20); goto BB9 } BB9 { _18 <- { _18 with current = (18446744073709551615 : usize) }; assume { Resolve2.resolve _18 }; - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 79 16 79 91] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) f_2 (Model1.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 79 16 79 91] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) f_2 (Model1.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) }; _22 <- (); _23 <- Type.creusat_trail_step_Step_lit step_10; - _0 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 80 23 80 39] Index0.index _23); + _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 80 23 80 39] Index0.index _23); goto BB10 } BB10 { @@ -15928,26 +15722,25 @@ module CreuSat_Trail_Impl0_BacktrackTo_Interface use mach.int.Int use prelude.Prelude use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror clone CreuSat_Logic_LogicTrail_LongArePostUnitInner_Interface as LongArePostUnitInner0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model2 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, axiom . clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = usize, type a = Type.alloc_alloc_global, axiom . val backtrack_to [@cfg:stackify] (self : borrowed (Type.creusat_trail_trail)) (level : usize) (f : Type.creusat_formula_formula) (d : borrowed (Type.creusat_decision_decisions)) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 113 4 113 49] Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self))) > UInt64.to_int level} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 114 4 114 30] Invariant0.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 115 4 115 42] Invariant1.invariant' ( * self) f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 116 4 116 48] Invariant2.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 118 4 118 77] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 115 4 115 42] Invariant1.invariant' ( ^ self) f } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 116 4 116 48] Invariant2.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 119 4 119 86] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 113 4 113 49] Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self))) > UInt64.to_int level} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 114 4 114 30] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 115 4 115 42] Invariant1.invariant' ( * self) f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 116 4 116 48] Invariant2.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 118 4 118 77] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 115 4 115 42] Invariant1.invariant' ( ^ self) f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 116 4 116 48] Invariant2.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 119 4 119 86] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } end module CreuSat_Trail_Impl0_BacktrackTo @@ -15958,139 +15751,123 @@ module CreuSat_Trail_Impl0_BacktrackTo use Type use mach.int.Int32 use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, function IndexLogic0.index_logic = SatInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic, function IndexLogic0.index_logic = Invariant6.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model7 with function Model0.model = Model8.model - clone CreuSat_Logic_LogicUtil_Pop as Pop0 with type t = usize, axiom . - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range - clone CreuSat_Logic_LogicUtil_LemmaPopMaintainsSorted as LemmaPopMaintainsSorted0 with predicate Sorted0.sorted = Sorted0.sorted, - function Pop0.pop = Pop0.pop, axiom . - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with function Model0.model = Model7.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant4.invariant', - function Model0.model = Model7.model - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model7.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner0.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model7.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic + type a = Type.alloc_alloc_global, function Model0.model = Model7.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model7 with function Model1.model = InvariantMirror0.model, + function Model0.model = FormulaInvariant0.model, function Model0.model = ClausePostWithRegardsToInner0.model, + function Model1.model = UnitAreSat0.model, function Model0.model = Invariant4.model, + function Model0.model = LitIdxIn0.model, function Model1.model = Invariant7.model clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with function Model0.model = Model6.model, - function Model1.model = Model7.model - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = Invariant6.invariant', - predicate Invariant1.invariant' = Invariant7.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model6.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model4 with function Model0.model = Model6.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model6.model, - predicate Invariant0.invariant' = Invariant4.invariant', function Model1.model = Model7.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model4.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model6.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model0.model = Model5.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model2.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model6.model, - function Model1.model = Model7.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant3 with function Model0.model = Model2.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant2 with function Model0.model = Model3.model + type a = Type.alloc_alloc_global, function Model0.model = LongArePostUnitInner0.model, + function Model0.model = InvariantMirror0.model, function Model0.model = Model4.model, + function Model3.model = InvariantNoDecisionMirror0.model, function Model0.model = UnitAreSat0.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant4.invariant_internal + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, + predicate SatInner0.sat_inner = Sat0.sat_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model2.model, axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model2.model = InvariantNoDecision0.model, + function Model0.model = Invariant3.model, function Model1.model = TrailEntriesAreAssigned0.model, + function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = LemmaPopMaintainsSorted0.sorted, + predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model1.model, - function Model1.model = Model2.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model1.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model1.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model0.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model2.model, - function Model1.model = Model1.model, predicate Invariant0.invariant' = Invariant5.invariant', - function Model2.model = Model0.model, function Model3.model = Model6.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant3.invariant', function Model0.model = Model1.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model0.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model2.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model0.model, function Model1.model = Model1.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, + function Model0.model = InvariantNoDecision0.model, function Model0.model = LitNotInLess0.model, + function Model0.model = LitIsUnique0.model, function Model0.model = TrailEntriesAreAssigned0.model, + function Model1.model = InvariantNoDecisionMirror0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model4 with function Model0.model = Invariant0.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicUtil_Pop as Pop0 with type t = usize, function Pop0.pop = LemmaPopMaintainsSorted0.pop, + axiom . + clone CreuSat_Logic_LogicUtil_LemmaPopMaintainsSorted as LemmaPopMaintainsSorted0 with axiom . + clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_decision_node, + type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant2 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . use mach.int.Int64 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_trail_trail - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_decision_decisions clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_decision_node - clone Core_Slice_Index_Impl2_Output as Output1 with type t = Type.creusat_decision_node - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = Type.creusat_decision_node - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = Type.creusat_decision_node + clone Core_Slice_Index_Impl2_Output as Output1 with type t = Type.creusat_decision_node, + type Output0.output = Index1.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = Type.creusat_decision_node, + predicate HasValue0.has_value = Index1.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = Type.creusat_decision_node, + predicate InBounds0.in_bounds = Index1.in_bounds clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = usize - clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize + clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize, type Output0.output = Index0.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize, + predicate HasValue0.has_value = Index0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize, + predicate InBounds0.in_bounds = Index0.in_bounds + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_trail_trail + clone Alloc_Vec_Impl1_Pop_Interface as Pop1 with type t = usize, type a = Type.alloc_alloc_global + clone Alloc_Vec_Impl1_Len_Interface as Len1 with type t = usize, type a = Type.alloc_alloc_global + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_decision_decisions + clone CreuSat_Trail_Impl0_Backstep_Interface as Backstep0 clone Alloc_Vec_Impl16_Index_Interface as Index1 with type t = Type.creusat_decision_node, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model3.model, - predicate InBounds0.in_bounds = InBounds1.in_bounds, predicate HasValue0.has_value = HasValue1.has_value, - type Output0.output = Output1.output - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, - function Model0.model = Model1.model - clone Alloc_Vec_Impl1_Pop_Interface as Pop1 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Model0.model - clone Alloc_Vec_Impl1_Len_Interface as Len1 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Model0.model - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = usize, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - type Output0.output = Output0.output - clone CreuSat_Trail_Impl0_Backstep_Interface as Backstep0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model1.model, function Model1.model = Model2.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror - let rec cfg backtrack_to [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 121 4 121 80] (self : borrowed (Type.creusat_trail_trail)) (level : usize) (f : Type.creusat_formula_formula) (d : borrowed (Type.creusat_decision_decisions)) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 113 4 113 49] Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self))) > UInt64.to_int level} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 114 4 114 30] Invariant0.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 115 4 115 42] Invariant1.invariant' ( * self) f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 116 4 116 48] Invariant2.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 118 4 118 77] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 115 4 115 42] Invariant1.invariant' ( ^ self) f } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 116 4 116 48] Invariant2.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 119 4 119 86] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } + type a = Type.alloc_alloc_global + clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = usize, type i = usize, type a = Type.alloc_alloc_global + clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global + let rec cfg backtrack_to [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 121 4 121 80] (self : borrowed (Type.creusat_trail_trail)) (level : usize) (f : Type.creusat_formula_formula) (d : borrowed (Type.creusat_decision_decisions)) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 113 4 113 49] Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self))) > UInt64.to_int level} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 114 4 114 30] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 115 4 115 42] Invariant1.invariant' ( * self) f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 116 4 116 48] Invariant2.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 118 4 118 77] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 115 4 115 42] Invariant1.invariant' ( ^ self) f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 116 4 116 48] Invariant2.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 119 4 119 86] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } = var _0 : (); @@ -16214,31 +15991,31 @@ module CreuSat_Trail_Impl0_BacktrackTo } BB0 { _6 <- (); - old_t_5 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 122 20 122 35] self_1); + old_t_5 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 122 20 122 35] self_1); goto BB1 } BB1 { _8 <- (); - old_d_7 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 123 20 123 32] d_4); + old_d_7 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 123 20 123 32] d_4); goto BB2 } BB2 { _11 <- Type.creusat_trail_trail_Trail_trail ( * self_1); - _10 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 124 23 124 39] Len0.len _11); + _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 124 23 124 39] Len0.len _11); goto BB3 } BB3 { _14 <- Type.creusat_trail_trail_Trail_decisions ( * self_1); _15 <- level_2; - _13 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 124 42 124 63] Index0.index _14 _15); + _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 124 42 124 63] Index0.index _14 _15); goto BB4 } BB4 { _12 <- _13; - how_many_9 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 124 23 124 63] _10 - _12); + how_many_9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 124 23 124 63] _10 - _12); _18 <- Type.creusat_trail_trail_Trail_decisions ( * self_1); _19 <- level_2; - _17 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 125 18 125 39] Index0.index _18 _19); + _17 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 125 18 125 39] Index0.index _18 _19); goto BB5 } BB5 { @@ -16246,7 +16023,7 @@ module CreuSat_Trail_Impl0_BacktrackTo i_20 <- (0 : usize); curr_21 <- Type.creusat_decision_decisions_Decisions_search ( * d_4); _24 <- curr_21; - _23 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 128 31 128 49] _24 <> (18446744073709551615 : usize)); + _23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 128 31 128 49] _24 <> (18446744073709551615 : usize)); switch (_23) | False -> goto BB8 | _ -> goto BB6 @@ -16255,7 +16032,7 @@ module CreuSat_Trail_Impl0_BacktrackTo BB6 { _26 <- Type.creusat_decision_decisions_Decisions_linked_list ( * d_4); _27 <- curr_21; - _25 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 128 52 128 71] Index1.index _26 _27); + _25 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 128 52 128 71] Index1.index _26 _27); goto BB7 } BB7 { @@ -16270,17 +16047,17 @@ module CreuSat_Trail_Impl0_BacktrackTo goto BB10 } BB10 { - invariant i_less2 { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 129 8 129 57] UInt64.to_int i_20 <= Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail ( * old_t_5))) }; - invariant i_less { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 130 8 130 43] i_20 <= how_many_9 }; - invariant post_unit { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 131 8 131 93] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) f_3 (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) }; - invariant inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 132 8 132 57] InvariantNoDecision0.invariant_no_decision ( * self_1) f_3 }; - invariant d_inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 133 8 133 53] Invariant2.invariant' ( * d_4) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_3)) }; - invariant proph { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 135 8 135 52] ^ old_t_5 = ^ self_1 }; - invariant proph_d { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 136 8 136 51] ^ old_d_7 = ^ d_4 }; - invariant curr_less { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 137 8 137 87] UInt64.to_int curr_21 < Seq.length (Model3.model (Type.creusat_decision_decisions_Decisions_linked_list ( * d_4))) || UInt64.to_int curr_21 = 18446744073709551615 }; + invariant i_less2 { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 129 8 129 57] UInt64.to_int i_20 <= Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail ( * old_t_5))) }; + invariant i_less { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 130 8 130 43] i_20 <= how_many_9 }; + invariant post_unit { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 131 8 131 93] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) f_3 (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) }; + invariant inv { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 132 8 132 57] InvariantNoDecision0.invariant_no_decision ( * self_1) f_3 }; + invariant d_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 133 8 133 53] Invariant2.invariant' ( * d_4) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_3)) }; + invariant proph { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 135 8 135 52] ^ old_t_5 = ^ self_1 }; + invariant proph_d { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 136 8 136 51] ^ old_d_7 = ^ d_4 }; + invariant curr_less { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 137 8 137 87] UInt64.to_int curr_21 < Seq.length (Model3.model (Type.creusat_decision_decisions_Decisions_linked_list ( * d_4))) || UInt64.to_int curr_21 = 18446744073709551615 }; _31 <- i_20; _32 <- how_many_9; - _30 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 139 14 139 26] _31 < _32); + _30 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 139 14 139 26] _31 < _32); switch (_30) | False -> goto BB17 | _ -> goto BB11 @@ -16290,22 +16067,22 @@ module CreuSat_Trail_Impl0_BacktrackTo _34 <- borrow_mut ( * self_1); self_1 <- { self_1 with current = ( ^ _34) }; _35 <- f_3; - idx_33 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 140 22 140 38] Backstep0.backstep _34 _35); + idx_33 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 140 22 140 38] Backstep0.backstep _34 _35); goto BB12 } BB12 { - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 141 12 141 45] UInt64.to_int idx_33 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_3) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 141 12 141 45] UInt64.to_int idx_33 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_3) }; _36 <- (); _39 <- Type.creusat_decision_decisions_Decisions_linked_list ( * d_4); _40 <- idx_33; - _38 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 142 33 142 51] Index1.index _39 _40); + _38 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 142 33 142 51] Index1.index _39 _40); goto BB13 } BB13 { curr_timestamp_37 <- Type.creusat_decision_node_Node_ts _38; _43 <- curr_timestamp_37; _44 <- timestamp_22; - _42 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 143 15 143 41] _43 > _44); + _42 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 143 15 143 41] _43 > _44); switch (_42) | False -> goto BB15 | _ -> goto BB14 @@ -16324,7 +16101,7 @@ module CreuSat_Trail_Impl0_BacktrackTo goto BB16 } BB16 { - i_20 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 147 12 147 18] i_20 + (1 : usize)); + i_20 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 147 12 147 18] i_20 + (1 : usize)); _29 <- (); goto BB10 } @@ -16336,16 +16113,16 @@ module CreuSat_Trail_Impl0_BacktrackTo goto BB18 } BB18 { - invariant post_unit { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 151 8 151 93] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) f_3 (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) }; - invariant inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 152 8 152 57] InvariantNoDecision0.invariant_no_decision ( * self_1) f_3 }; - invariant proph { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 153 8 153 52] ^ old_t_5 = ^ self_1 }; + invariant post_unit { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 151 8 151 93] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) f_3 (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) }; + invariant inv { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 152 8 152 57] InvariantNoDecision0.invariant_no_decision ( * self_1) f_3 }; + invariant proph { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 153 8 153 52] ^ old_t_5 = ^ self_1 }; _54 <- Type.creusat_trail_trail_Trail_decisions ( * self_1); - _53 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 154 14 154 34] Len1.len _54); + _53 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 154 14 154 34] Len1.len _54); goto BB19 } BB19 { _55 <- level_2; - _52 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 154 14 154 42] _53 > _55); + _52 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 154 14 154 42] _53 > _55); switch (_52) | False -> goto BB26 | _ -> goto BB20 @@ -16353,19 +16130,19 @@ module CreuSat_Trail_Impl0_BacktrackTo } BB20 { _57 <- (); - old_t2_56 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 155 25 155 40] self_1); + old_t2_56 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 155 25 155 40] self_1); goto BB21 } BB21 { - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 156 12 156 50] Sorted0.sorted (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 156 12 156 50] Sorted0.sorted (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) }; _58 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 157 12 157 54] Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) > 0 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 157 12 157 54] Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) > 0 }; _59 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 158 12 158 76] let _ = LemmaPopMaintainsSorted0.lemma_pop_maintains_sorted (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) in true }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 158 12 158 76] let _ = LemmaPopMaintainsSorted0.lemma_pop_maintains_sorted (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) in true }; _60 <- (); _63 <- borrow_mut (Type.creusat_trail_trail_Trail_decisions ( * self_1)); self_1 <- { self_1 with current = (let Type.CreuSat_Trail_Trail a b c d e = * self_1 in Type.CreuSat_Trail_Trail a b c d ( ^ _63)) }; - _62 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 159 18 159 38] Pop1.pop _63); + _62 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 159 18 159 38] Pop1.pop _63); goto BB22 } BB22 { @@ -16383,12 +16160,12 @@ module CreuSat_Trail_Impl0_BacktrackTo absurd } BB25 { - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 161 20 161 76] Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1)) = Pop0.pop (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * old_t2_56))) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 161 20 161 76] Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1)) = Pop0.pop (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * old_t2_56))) }; _65 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 162 20 162 61] ^ old_t2_56 = ^ self_1 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 162 20 162 61] ^ old_t2_56 = ^ self_1 }; _66 <- (); _61 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 168 12 168 50] Sorted0.sorted (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 168 12 168 50] Sorted0.sorted (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) }; _69 <- (); _29 <- (); goto BB18 @@ -16398,11 +16175,11 @@ module CreuSat_Trail_Impl0_BacktrackTo goto BB27 } BB27 { - invariant post_unit { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 171 8 171 93] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) f_3 (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) }; - invariant inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 172 8 172 57] InvariantNoDecision0.invariant_no_decision ( * self_1) f_3 }; - invariant proph { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 173 8 173 52] ^ old_t_5 = ^ self_1 }; + invariant post_unit { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 171 8 171 93] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) f_3 (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) }; + invariant inv { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 172 8 172 57] InvariantNoDecision0.invariant_no_decision ( * self_1) f_3 }; + invariant proph { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 173 8 173 52] ^ old_t_5 = ^ self_1 }; _77 <- Type.creusat_trail_trail_Trail_decisions ( * self_1); - _76 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 174 14 174 34] Len1.len _77); + _76 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 174 14 174 34] Len1.len _77); goto BB31 } BB28 { @@ -16412,7 +16189,7 @@ module CreuSat_Trail_Impl0_BacktrackTo BB29 { _81 <- Type.creusat_trail_trail_Trail_decisions ( * self_1); _84 <- Type.creusat_trail_trail_Trail_decisions ( * self_1); - _83 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 174 57 174 77] Len1.len _84); + _83 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 174 57 174 77] Len1.len _84); goto BB32 } BB30 { @@ -16422,43 +16199,43 @@ module CreuSat_Trail_Impl0_BacktrackTo end } BB31 { - _75 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 174 14 174 38] _76 > (0 : usize)); + _75 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 174 14 174 38] _76 > (0 : usize)); switch (_75) | False -> goto BB28 | _ -> goto BB29 end } BB32 { - _82 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 174 57 174 81] _83 - (1 : usize)); - _80 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 174 42 174 82] Index0.index _81 _82); + _82 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 174 57 174 81] _83 - (1 : usize)); + _80 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 174 42 174 82] Index0.index _81 _82); goto BB33 } BB33 { _79 <- _80; _86 <- Type.creusat_trail_trail_Trail_trail ( * self_1); - _85 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 174 85 174 101] Len0.len _86); + _85 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 174 85 174 101] Len0.len _86); goto BB34 } BB34 { - _78 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 174 42 174 101] _79 > _85); + _78 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 174 42 174 101] _79 > _85); _74 <- _78; goto BB30 } BB35 { _88 <- (); - old_t3_87 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 175 25 175 40] self_1); + old_t3_87 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 175 25 175 40] self_1); goto BB36 } BB36 { - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 176 12 176 50] Sorted0.sorted (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 176 12 176 50] Sorted0.sorted (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) }; _89 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 177 12 177 54] Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) > 0 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 177 12 177 54] Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) > 0 }; _90 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 178 12 178 76] let _ = LemmaPopMaintainsSorted0.lemma_pop_maintains_sorted (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) in true }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 178 12 178 76] let _ = LemmaPopMaintainsSorted0.lemma_pop_maintains_sorted (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) in true }; _91 <- (); _94 <- borrow_mut (Type.creusat_trail_trail_Trail_decisions ( * self_1)); self_1 <- { self_1 with current = (let Type.CreuSat_Trail_Trail a b c d e = * self_1 in Type.CreuSat_Trail_Trail a b c d ( ^ _94)) }; - _93 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 180 18 180 38] Pop1.pop _94); + _93 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 180 18 180 38] Pop1.pop _94); goto BB37 } BB37 { @@ -16476,31 +16253,31 @@ module CreuSat_Trail_Impl0_BacktrackTo absurd } BB40 { - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 182 20 182 78] Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1)) = Pop0.pop (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * old_t3_87))) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 182 20 182 78] Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1)) = Pop0.pop (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * old_t3_87))) }; _96 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 183 20 183 61] ^ old_t3_87 = ^ self_1 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 183 20 183 61] ^ old_t3_87 = ^ self_1 }; _97 <- (); _92 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 189 12 189 78] let _ = LemmaPopMaintainsSorted0.lemma_pop_maintains_sorted (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * old_t3_87))) in true }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 189 12 189 78] let _ = LemmaPopMaintainsSorted0.lemma_pop_maintains_sorted (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * old_t3_87))) in true }; _100 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 190 12 190 50] Sorted0.sorted (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 190 12 190 50] Sorted0.sorted (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) }; _101 <- (); _29 <- (); goto BB27 } BB41 { _73 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 192 8 195 9] Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) = 0 || UInt64.to_int (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) (Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) - 1)) <= Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 192 8 195 9] Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) = 0 || UInt64.to_int (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) (Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) - 1)) <= Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) }; _105 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 197 8 197 53] Invariant3.invariant' (Type.creusat_trail_trail_Trail_assignments ( * self_1)) f_3 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 197 8 197 53] Invariant3.invariant' (Type.creusat_trail_trail_Trail_assignments ( * self_1)) f_3 }; _106 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 200 8 200 47] LitNotInLess0.lit_not_in_less ( * self_1) f_3 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 200 8 200 47] LitNotInLess0.lit_not_in_less ( * self_1) f_3 }; _107 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 201 8 201 43] LitIsUnique0.lit_is_unique ( * self_1) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 201 8 201 43] LitIsUnique0.lit_is_unique ( * self_1) }; _108 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 202 8 202 83] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) f_3 (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 202 8 202 83] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) f_3 (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) }; _109 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 203 8 203 56] TrailEntriesAreAssigned0.trail_entries_are_assigned ( * self_1) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 203 8 203 56] TrailEntriesAreAssigned0.trail_entries_are_assigned ( * self_1) }; _110 <- (); _111 <- level_2; self_1 <- { self_1 with current = (let Type.CreuSat_Trail_Trail a b c d e = * self_1 in Type.CreuSat_Trail_Trail a b c _111 e) }; @@ -16515,23 +16292,22 @@ module CreuSat_Trail_Impl0_BacktrackSafe_Interface use prelude.Prelude use Type use mach.int.Int + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror clone CreuSat_Logic_LogicTrail_LongArePostUnitInner_Interface as LongArePostUnitInner0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model1 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, axiom . clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val backtrack_safe [@cfg:stackify] (self : borrowed (Type.creusat_trail_trail)) (level : usize) (f : Type.creusat_formula_formula) (d : borrowed (Type.creusat_decision_decisions)) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 101 4 101 30] Invariant0.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 102 4 102 42] Invariant1.invariant' ( * self) f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 103 4 103 48] Invariant2.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 104 4 104 77] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 102 4 102 42] Invariant1.invariant' ( ^ self) f } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 103 4 103 48] Invariant2.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 105 4 105 86] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 101 4 101 30] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 102 4 102 42] Invariant1.invariant' ( * self) f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 103 4 103 48] Invariant2.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 104 4 104 77] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 102 4 102 42] Invariant1.invariant' ( ^ self) f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 103 4 103 48] Invariant2.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 105 4 105 86] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } end module CreuSat_Trail_Impl0_BacktrackSafe @@ -16540,113 +16316,101 @@ module CreuSat_Trail_Impl0_BacktrackSafe use Type use mach.int.Int use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = SatInner0.index_logic, function IndexLogic0.index_logic = UnsatInner0.index_logic, + function IndexLogic0.index_logic = Invariant6.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model7 with function Model0.model = Model8.model - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with function Model0.model = Model7.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant3.invariant', - function Model0.model = Model7.model - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model7.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner0.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model7.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic + type a = Type.alloc_alloc_global, function Model0.model = Model7.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model7 with function Model1.model = InvariantMirror0.model, + function Model0.model = FormulaInvariant0.model, function Model0.model = ClausePostWithRegardsToInner0.model, + function Model0.model = Invariant3.model, function Model1.model = UnitAreSat0.model, + function Model0.model = LitIdxIn0.model, function Model1.model = Invariant7.model clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with function Model0.model = Model6.model, - function Model1.model = Model7.model - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = Invariant6.invariant', - predicate Invariant1.invariant' = Invariant7.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model6.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Model6.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model6.model, - predicate Invariant0.invariant' = Invariant3.invariant', function Model1.model = Model7.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model2.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model6.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model5.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model1.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model6.model, - function Model1.model = Model7.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with function Model0.model = Model1.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant2 with function Model0.model = Model4.model + type a = Type.alloc_alloc_global, function Model0.model = LongArePostUnitInner0.model, + function Model0.model = InvariantMirror0.model, function Model0.model = Model2.model, + function Model3.model = InvariantNoDecisionMirror0.model, function Model0.model = UnitAreSat0.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model2.model = InvariantNoDecision0.model, + function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant4.model, + function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model0.model, - function Model1.model = Model1.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model0.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model0.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model3.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model1.model, - function Model1.model = Model0.model, predicate Invariant0.invariant' = Invariant5.invariant', - function Model2.model = Model3.model, function Model3.model = Model6.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant4.invariant', function Model0.model = Model0.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model3.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model1.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model3.model, function Model1.model = Model0.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_decision_node, + type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Invariant0.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant2 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_decision_decisions clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_trail_trail - clone CreuSat_Trail_Impl0_DecisionLevel_Interface as DecisionLevel0 with function Model0.model = Model3.model - clone CreuSat_Trail_Impl0_BacktrackTo_Interface as BacktrackTo0 with function Model0.model = Model3.model, - predicate Invariant0.invariant' = Invariant0.invariant', predicate Invariant1.invariant' = Invariant1.invariant', - predicate Invariant2.invariant' = Invariant2.invariant', function Model1.model = Model0.model, - function Model2.model = Model1.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - let rec cfg backtrack_safe [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 106 4 106 82] (self : borrowed (Type.creusat_trail_trail)) (level : usize) (f : Type.creusat_formula_formula) (d : borrowed (Type.creusat_decision_decisions)) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 101 4 101 30] Invariant0.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 102 4 102 42] Invariant1.invariant' ( * self) f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 103 4 103 48] Invariant2.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 104 4 104 77] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 102 4 102 42] Invariant1.invariant' ( ^ self) f } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 103 4 103 48] Invariant2.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 105 4 105 86] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } + clone CreuSat_Trail_Impl0_BacktrackTo_Interface as BacktrackTo0 + clone CreuSat_Trail_Impl0_DecisionLevel_Interface as DecisionLevel0 + let rec cfg backtrack_safe [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 106 4 106 82] (self : borrowed (Type.creusat_trail_trail)) (level : usize) (f : Type.creusat_formula_formula) (d : borrowed (Type.creusat_decision_decisions)) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 101 4 101 30] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 102 4 102 42] Invariant1.invariant' ( * self) f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 103 4 103 48] Invariant2.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 104 4 104 77] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 102 4 102 42] Invariant1.invariant' ( ^ self) f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 103 4 103 48] Invariant2.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 105 4 105 86] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } = var _0 : (); @@ -16673,11 +16437,11 @@ module CreuSat_Trail_Impl0_BacktrackSafe BB0 { _6 <- level_2; _8 <- * self_1; - _7 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 107 19 107 40] DecisionLevel0.decision_level _8); + _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 107 19 107 40] DecisionLevel0.decision_level _8); goto BB1 } BB1 { - _5 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 107 11 107 40] _6 < _7); + _5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 107 11 107 40] _6 < _7); switch (_5) | False -> goto BB4 | _ -> goto BB2 @@ -16690,7 +16454,7 @@ module CreuSat_Trail_Impl0_BacktrackSafe _12 <- f_3; _13 <- borrow_mut ( * d_4); d_4 <- { d_4 with current = ( ^ _13) }; - _9 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 108 12 108 42] BacktrackTo0.backtrack_to _10 _11 _12 _13); + _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 108 12 108 42] BacktrackTo0.backtrack_to _10 _11 _12 _13); goto BB3 } BB3 { @@ -16717,6 +16481,7 @@ module CreuSat_Trail_Impl0_EnqAssignment_Interface use mach.int.Int use mach.int.Int32 use prelude.Prelude + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant1.invariant_mirror clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToLit_Interface as ClausePostWithRegardsToLit0 clone CreuSat_Logic_LogicLit_Impl1_Sat_Interface as Sat0 clone CreuSat_Logic_LogicTrail_LongArePostUnitInner_Interface as LongArePostUnitInner0 @@ -16733,33 +16498,31 @@ module CreuSat_Trail_Impl0_EnqAssignment_Interface type a = Type.alloc_alloc_global, axiom . clone CreuSat_Logic_LogicTrail_Impl1_Invariant_Interface as Invariant3 clone CreuSat_Logic_LogicLit_Impl1_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant1 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant1 with axiom . clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant0 val enq_assignment [@cfg:stackify] (self : borrowed (Type.creusat_trail_trail)) (step : Type.creusat_trail_step) (_f : Type.creusat_formula_formula) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 211 4 211 43] Invariant0.invariant' ( * self) _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 212 4 212 31] Invariant1.invariant' _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 213 4 213 49] Invariant2.invariant' (Type.creusat_trail_step_Step_lit step) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 214 4 214 36] Invariant3.invariant' step _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 215 4 228 7] match (Type.creusat_trail_step_Step_reason step) with + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 211 4 211 43] Invariant0.invariant' ( * self) _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 212 4 212 31] Invariant1.invariant' _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 213 4 213 49] Invariant2.invariant' (Type.creusat_trail_step_Step_lit step) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 214 4 214 36] Invariant3.invariant' step _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 215 4 228 7] match (Type.creusat_trail_step_Step_reason step) with | Type.CreuSat_Trail_Reason_Long cref -> UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) && Unset0.unset (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) 0) (Type.creusat_trail_trail_Trail_assignments ( * self)) && (forall i : (int) . 1 <= i && i < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) -> Unsat0.unsat (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) i) (Type.creusat_trail_trail_Trail_assignments ( * self))) && Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) 0 = Type.creusat_trail_step_Step_lit step | Type.CreuSat_Trail_Reason_Unit cref -> UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) && Type.creusat_trail_step_Step_lit step = Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) 0 | _ -> true end} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 229 4 229 51] not IdxInTrail0.idx_in_trail (Type.creusat_trail_step_Step_lit step) (Type.creusat_trail_trail_Trail_trail ( * self))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 230 4 230 67] Unset1.unset (Seq.get (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self))) (IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit step)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 231 4 231 78] LongArePostUnitInner0.long_are_post_unit_inner (Model3.model (Type.creusat_trail_trail_Trail_trail ( * self))) _f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 211 4 211 43] Invariant0.invariant' ( ^ self) _f } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 232 4 233 94] forall j : (int) . 0 <= j && j < Seq.length (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self))) && j <> IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit step) -> Seq.get (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self))) j = Seq.get (Model2.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) j } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 234 4 234 49] Sat0.sat (Type.creusat_trail_step_Step_lit step) (Type.creusat_trail_trail_Trail_assignments ( ^ self)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 235 4 235 87] LongArePostUnitInner0.long_are_post_unit_inner (Model3.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) _f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 236 4 239 7] match (Type.creusat_trail_step_Step_reason step) with + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 229 4 229 51] not IdxInTrail0.idx_in_trail (Type.creusat_trail_step_Step_lit step) (Type.creusat_trail_trail_Trail_trail ( * self))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 230 4 230 67] Unset1.unset (Seq.get (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self))) (IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit step)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 231 4 231 78] LongArePostUnitInner0.long_are_post_unit_inner (Model3.model (Type.creusat_trail_trail_Trail_trail ( * self))) _f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 211 4 211 43] Invariant0.invariant' ( ^ self) _f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 232 4 233 94] forall j : (int) . 0 <= j && j < Seq.length (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self))) && j <> IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit step) -> Seq.get (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self))) j = Seq.get (Model2.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) j } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 234 4 234 49] Sat0.sat (Type.creusat_trail_step_Step_lit step) (Type.creusat_trail_trail_Trail_assignments ( ^ self)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 235 4 235 87] LongArePostUnitInner0.long_are_post_unit_inner (Model3.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) _f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 236 4 239 7] match (Type.creusat_trail_step_Step_reason step) with | Type.CreuSat_Trail_Reason_Long k -> ClausePostWithRegardsToLit0.clause_post_with_regards_to_lit (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int k)) (Type.creusat_trail_trail_Trail_assignments ( ^ self)) (Type.creusat_trail_step_Step_lit step) | _ -> true end } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 240 4 240 65] Seq.length (Model3.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) = 1 + Seq.length (Model3.model (Type.creusat_trail_trail_Trail_trail ( * self))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 241 4 241 51] Type.creusat_trail_trail_Trail_decisions ( ^ self) = Type.creusat_trail_trail_Trail_decisions ( * self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 240 4 240 65] Seq.length (Model3.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) = 1 + Seq.length (Model3.model (Type.creusat_trail_trail_Trail_trail ( * self))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 241 4 241 51] Type.creusat_trail_trail_Trail_decisions ( ^ self) = Type.creusat_trail_trail_Trail_decisions ( * self) } end module CreuSat_Trail_Impl0_EnqAssignment @@ -16770,162 +16533,152 @@ module CreuSat_Trail_Impl0_EnqAssignment use mach.int.Int32 use prelude.Prelude use prelude.UInt8 - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreuSat_Logic_Logic_Unset as Unset1 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model0.model = Model7.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with function Model0.model = Model2.model + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = Invariant2.index_logic, + function IndexLogic0.index_logic = IdxInTrail0.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LemmaPushMaintainsLitNotInLess0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = UnsetInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic, function IndexLogic0.index_logic = SatInner0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant2 with predicate Invariant0.invariant' = Invariant3.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant6.invariant_internal + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model6.model + type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = ClausePostWithRegardsToInner0.model, + function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, + function Model1.model = Invariant4.model, function Model1.model = UnitAreSat0.model, + function Model0.model = LitIdxIn0.model, function Model0.model = Invariant6.model clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant4 with function Model0.model = Model0.model, - function Model1.model = Model1.model - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model5 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model1.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model0.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model2.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model0.model, - function Model1.model = Model1.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model1.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner0.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToLit as ClausePostWithRegardsToLit0 with function Model0.model = Model2.model, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model0.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat0 with function Model0.model = Model2.model, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_UnsetInner as UnsetInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Unset as Unset0 with function Model0.model = Model2.model, - predicate UnsetInner0.unset_inner = UnsetInner0.unset_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant2 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant2.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant6 with function Model0.model = Model1.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant6.invariant', - function Model0.model = Model1.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model0.model, - predicate Invariant0.invariant' = Invariant6.invariant', function Model1.model = Model1.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant1 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model5.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = Invariant2.invariant', - predicate Invariant1.invariant' = Invariant4.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant3.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range + type a = Type.alloc_alloc_global, function Model0.model = LongArePostUnitInner0.model, + function Model3.model = InvariantNoDecisionMirror0.model, function Model0.model = InvariantMirror0.model, + function Model0.model = Model5.model, function Model0.model = Invariant4.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = UnitAreSat0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant4 with predicate Invariant1.invariant' = Invariant3.invariant' + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant3 with predicate Invariant2.invariant' = LemmaPushMaintainsLitNotInLess0.invariant', + predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant6 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model2.model, axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model0.model = Unset0.model, + function Model0.model = Unsat0.model, function Model0.model = Sat0.model, + function Model0.model = ClausePostWithRegardsToLit0.model, + function Model0.model = LemmaPushMaintainsLitNotInLess0.model, function Model2.model = InvariantNoDecision0.model, + function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant5.model, + function Model1.model = TrailEntriesAreAssigned0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant0.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model3.model, - function Model1.model = Model2.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model3.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model3.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicLit_Impl1_IdxInTrail as IdxInTrail0 with function Model0.model = Model3.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model4.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model2.model, - function Model1.model = Model3.model, predicate Invariant0.invariant' = Invariant3.invariant', - function Model2.model = Model4.model, function Model3.model = Model0.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant5.invariant', function Model0.model = Model3.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model4.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model2.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant0 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model4.model, function Model1.model = Model3.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_LemmaPushMaintainsLitNotInLess as LemmaPushMaintainsLitNotInLess0 with predicate Invariant0.invariant' = Invariant1.invariant', - predicate Invariant1.invariant' = Invariant0.invariant', function Model0.model = Model2.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate Unset0.unset = Unset1.unset, - predicate Invariant2.invariant' = Invariant3.invariant', function Model1.model = Model3.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, axiom . - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_trail_trail - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy2 + type a = Type.alloc_alloc_global, function Model1.model = Invariant0.model, function Model0.model = IdxInTrail0.model, + function Model1.model = LemmaPushMaintainsLitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = InvariantNoDecision0.model, + function Model1.model = InvariantNoDecisionMirror0.model, function Model0.model = TrailEntriesAreAssigned0.model, + axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LemmaPushMaintainsLitNotInLess0.lit_not_in_less_inner, + predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner, + predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicLit_Impl1_UnsetInner as UnsetInner0 with predicate UnsetInner0.unset_inner = Unset0.unset_inner + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant1.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model5 with function Model0.model = Invariant1.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant1.invariant_mirror, + predicate InvariantMirror0.invariant_mirror = LemmaPushMaintainsLitNotInLess0.invariant_mirror + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner, + predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToLit0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant0.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant0.invariant_no_decision, + axiom . + clone CreuSat_Logic_Logic_Unset as Unset1 with predicate Unset0.unset = LemmaPushMaintainsLitNotInLess0.unset + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant0 with predicate Invariant1.invariant' = LemmaPushMaintainsLitNotInLess0.invariant' + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant1 with predicate Invariant0.invariant' = LemmaPushMaintainsLitNotInLess0.invariant', + axiom . + clone CreuSat_Logic_LogicTrail_LemmaPushMaintainsLitNotInLess as LemmaPushMaintainsLitNotInLess0 with axiom . + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToLit as ClausePostWithRegardsToLit0 + clone CreuSat_Logic_LogicLit_Impl1_IdxInTrail as IdxInTrail0 + clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat0 + clone CreuSat_Logic_LogicLit_Impl1_Unset as Unset0 + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy2 with type ModelTy0.modelTy = Model9.modelTy clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = usize - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = usize - clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = usize - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize + type a = Type.alloc_alloc_global, type ModelTy0.modelTy = Model8.modelTy clone CreusotContracts_Logic_Model_Impl1_Model as Model9 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy2.modelTy, function Model0.model = Model2.model - clone CreuSat_Lit_Impl1_Index_Interface as Index0 with function IndexLogic0.index_logic = IndexLogic0.index_logic + function Model1.model = SetAssignment0.model clone CreusotContracts_Logic_Model_Impl0_Model as Model8 with type t = Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global), - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model3.model - clone CreuSat_Assignments_Impl2_SetAssignment_Interface as SetAssignment0 with predicate Invariant0.invariant' = Invariant5.invariant', - predicate Invariant1.invariant' = Invariant2.invariant', predicate Invariant2.invariant' = Invariant1.invariant', - function Model0.model = Model8.model, predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, - function Model1.model = Model9.model, function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate Unset0.unset = Unset1.unset, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - function Model2.model = Model2.model, predicate Sat0.sat = Sat0.sat, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone Alloc_Vec_Impl1_Push_Interface as Push0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, - function Model0.model = Model3.model + function Model0.model = SetAssignment0.model + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = usize + clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize, type Output0.output = IndexMut0.output + clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = usize, + predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize, + predicate HasValue0.has_value = IndexMut0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize, + predicate InBounds0.in_bounds = IndexMut0.in_bounds + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_trail_trail + clone Alloc_Vec_Impl1_Push_Interface as Push0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global + clone CreuSat_Assignments_Impl2_SetAssignment_Interface as SetAssignment0 + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = usize clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = usize, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model4.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - predicate ResolveElswhere0.resolve_elswhere = ResolveElswhere0.resolve_elswhere, type Output0.output = Output0.output - clone CreuSat_Trail_Impl0_DecisionLevel_Interface as DecisionLevel0 with function Model0.model = Model4.model - let rec cfg enq_assignment [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 242 4 242 62] (self : borrowed (Type.creusat_trail_trail)) (step : Type.creusat_trail_step) (_f : Type.creusat_formula_formula) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 211 4 211 43] Invariant0.invariant' ( * self) _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 212 4 212 31] Invariant1.invariant' _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 213 4 213 49] Invariant2.invariant' (Type.creusat_trail_step_Step_lit step) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 214 4 214 36] Invariant3.invariant' step _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 215 4 228 7] match (Type.creusat_trail_step_Step_reason step) with + type a = Type.alloc_alloc_global + clone CreuSat_Lit_Impl1_Index_Interface as Index0 + clone CreuSat_Trail_Impl0_DecisionLevel_Interface as DecisionLevel0 + let rec cfg enq_assignment [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 242 4 242 62] (self : borrowed (Type.creusat_trail_trail)) (step : Type.creusat_trail_step) (_f : Type.creusat_formula_formula) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 211 4 211 43] Invariant0.invariant' ( * self) _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 212 4 212 31] Invariant1.invariant' _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 213 4 213 49] Invariant2.invariant' (Type.creusat_trail_step_Step_lit step) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 214 4 214 36] Invariant3.invariant' step _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 215 4 228 7] match (Type.creusat_trail_step_Step_reason step) with | Type.CreuSat_Trail_Reason_Long cref -> UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) && Unset0.unset (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) 0) (Type.creusat_trail_trail_Trail_assignments ( * self)) && (forall i : (int) . 1 <= i && i < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) -> Unsat0.unsat (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) i) (Type.creusat_trail_trail_Trail_assignments ( * self))) && Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) 0 = Type.creusat_trail_step_Step_lit step | Type.CreuSat_Trail_Reason_Unit cref -> UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) && Type.creusat_trail_step_Step_lit step = Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) 0 | _ -> true end} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 229 4 229 51] not IdxInTrail0.idx_in_trail (Type.creusat_trail_step_Step_lit step) (Type.creusat_trail_trail_Trail_trail ( * self))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 230 4 230 67] Unset1.unset (Seq.get (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self))) (IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit step)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 231 4 231 78] LongArePostUnitInner0.long_are_post_unit_inner (Model3.model (Type.creusat_trail_trail_Trail_trail ( * self))) _f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 211 4 211 43] Invariant0.invariant' ( ^ self) _f } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 232 4 233 94] forall j : (int) . 0 <= j && j < Seq.length (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self))) && j <> IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit step) -> Seq.get (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self))) j = Seq.get (Model2.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) j } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 234 4 234 49] Sat0.sat (Type.creusat_trail_step_Step_lit step) (Type.creusat_trail_trail_Trail_assignments ( ^ self)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 235 4 235 87] LongArePostUnitInner0.long_are_post_unit_inner (Model3.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) _f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 236 4 239 7] match (Type.creusat_trail_step_Step_reason step) with + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 229 4 229 51] not IdxInTrail0.idx_in_trail (Type.creusat_trail_step_Step_lit step) (Type.creusat_trail_trail_Trail_trail ( * self))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 230 4 230 67] Unset1.unset (Seq.get (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self))) (IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit step)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 231 4 231 78] LongArePostUnitInner0.long_are_post_unit_inner (Model3.model (Type.creusat_trail_trail_Trail_trail ( * self))) _f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 211 4 211 43] Invariant0.invariant' ( ^ self) _f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 232 4 233 94] forall j : (int) . 0 <= j && j < Seq.length (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self))) && j <> IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit step) -> Seq.get (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self))) j = Seq.get (Model2.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) j } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 234 4 234 49] Sat0.sat (Type.creusat_trail_step_Step_lit step) (Type.creusat_trail_trail_Trail_assignments ( ^ self)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 235 4 235 87] LongArePostUnitInner0.long_are_post_unit_inner (Model3.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) _f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 236 4 239 7] match (Type.creusat_trail_step_Step_reason step) with | Type.CreuSat_Trail_Reason_Long k -> ClausePostWithRegardsToLit0.clause_post_with_regards_to_lit (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int k)) (Type.creusat_trail_trail_Trail_assignments ( ^ self)) (Type.creusat_trail_step_Step_lit step) | _ -> true end } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 240 4 240 65] Seq.length (Model3.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) = 1 + Seq.length (Model3.model (Type.creusat_trail_trail_Trail_trail ( * self))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 241 4 241 51] Type.creusat_trail_trail_Trail_decisions ( ^ self) = Type.creusat_trail_trail_Trail_decisions ( * self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 240 4 240 65] Seq.length (Model3.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) = 1 + Seq.length (Model3.model (Type.creusat_trail_trail_Trail_trail ( * self))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 241 4 241 51] Type.creusat_trail_trail_Trail_decisions ( ^ self) = Type.creusat_trail_trail_Trail_decisions ( * self) } = var _0 : (); @@ -16961,18 +16714,18 @@ module CreuSat_Trail_Impl0_EnqAssignment } BB0 { _5 <- * self_1; - _4 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 243 46 243 67] DecisionLevel0.decision_level _5); + _4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 243 46 243 67] DecisionLevel0.decision_level _5); goto BB1 } BB1 { _7 <- borrow_mut (Type.creusat_trail_trail_Trail_lit_to_level ( * self_1)); self_1 <- { self_1 with current = (let Type.CreuSat_Trail_Trail a b c d e = * self_1 in Type.CreuSat_Trail_Trail a ( ^ _7) c d e) }; _9 <- Type.creusat_trail_step_Step_lit step_2; - _8 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 243 26 243 42] Index0.index _9); + _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 243 26 243 42] Index0.index _9); goto BB2 } BB2 { - _6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 243 8 243 43] IndexMut0.index_mut _7 _8); + _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 243 8 243 43] IndexMut0.index_mut _7 _8); goto BB3 } BB3 { @@ -16984,32 +16737,32 @@ module CreuSat_Trail_Impl0_EnqAssignment _13 <- Type.creusat_trail_step_Step_lit step_2; _14 <- _f_3; _15 <- trail_10; - _11 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 246 8 246 60] SetAssignment0.set_assignment _12 _13 _14 _15); + _11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 246 8 246 60] SetAssignment0.set_assignment _12 _13 _14 _15); goto BB4 } BB4 { - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 248 8 248 42] Invariant3.invariant' step_2 _f_3 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 248 8 248 42] Invariant3.invariant' step_2 _f_3 }; _16 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 249 8 249 83] let _ = LemmaPushMaintainsLitNotInLess0.lemma_push_maintains_lit_not_in_less ( * self_1) _f_3 step_2 in true }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 249 8 249 83] let _ = LemmaPushMaintainsLitNotInLess0.lemma_push_maintains_lit_not_in_less ( * self_1) _f_3 step_2 in true }; _17 <- (); _19 <- borrow_mut (Type.creusat_trail_trail_Trail_trail ( * self_1)); self_1 <- { self_1 with current = (let Type.CreuSat_Trail_Trail a b c d e = * self_1 in Type.CreuSat_Trail_Trail a b ( ^ _19) d e) }; _20 <- step_2; - _18 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 250 8 250 29] Push0.push _19 _20); + _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 250 8 250 29] Push0.push _19 _20); goto BB5 } BB5 { assume { Resolve1.resolve self_1 }; - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 251 8 256 9] match (Type.creusat_trail_step_Step_reason step_2) with + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 251 8 256 9] match (Type.creusat_trail_step_Step_reason step_2) with | Type.CreuSat_Trail_Reason_Long k -> ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f_3)) (UInt64.to_int k)) (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) (IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit step_2)) | _ -> true end }; _21 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 258 8 258 43] LitIsUnique0.lit_is_unique ( * self_1) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 258 8 258 43] LitIsUnique0.lit_is_unique ( * self_1) }; _22 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 259 8 259 48] LitNotInLess0.lit_not_in_less ( * self_1) _f_3 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 259 8 259 48] LitNotInLess0.lit_not_in_less ( * self_1) _f_3 }; _23 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 261 8 261 84] LongArePostUnitInner0.long_are_post_unit_inner (Model3.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) _f_3 (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 261 8 261 84] LongArePostUnitInner0.long_are_post_unit_inner (Model3.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) _f_3 (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) }; _24 <- (); _0 <- (); return _0 @@ -17023,35 +16776,33 @@ module CreuSat_Solver_Impl0_HandleLongClause_Interface use mach.int.Int32 use seq.Seq use Type - clone CreuSat_Logic_LogicFormula_Impl1_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 clone CreuSat_Logic_LogicClause_EquisatExtensionInner_Interface as EquisatExtensionInner0 - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_formula_formula clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant4 clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant3 clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val handle_long_clause [@cfg:stackify] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (t : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) (d : borrowed (Type.creusat_decision_decisions)) (clause : Type.creusat_clause_clause) (s_idx : usize) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 106 4 106 37] Invariant0.invariant' ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 107 4 107 42] Invariant1.invariant' ( * t) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 108 4 108 42] Invariant2.invariant' ( * w) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 109 4 109 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 110 4 110 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 111 4 111 46] Invariant4.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 112 4 112 52] EquisatExtensionInner0.equisat_extension_inner clause (Model0.model f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 113 4 113 36] Seq.length (Model1.model clause) > 1} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 114 4 114 41] UInt64.to_int s_idx < Seq.length (Model1.model clause)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 106 4 106 37] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 107 4 107 42] Invariant1.invariant' ( ^ t) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 108 4 108 42] Invariant2.invariant' ( ^ w) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 109 4 109 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 115 4 115 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 116 4 116 29] Equisat0.equisat ( * f) ( ^ f) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 106 4 106 37] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 107 4 107 42] Invariant1.invariant' ( * t) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 108 4 108 42] Invariant2.invariant' ( * w) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 109 4 109 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 110 4 110 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 111 4 111 46] Invariant4.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 112 4 112 52] EquisatExtensionInner0.equisat_extension_inner clause (Model0.model f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 113 4 113 36] Seq.length (Model1.model clause) > 1} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 114 4 114 41] UInt64.to_int s_idx < Seq.length (Model1.model clause)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 106 4 106 37] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 107 4 107 42] Invariant1.invariant' ( ^ t) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 108 4 108 42] Invariant2.invariant' ( ^ w) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 109 4 109 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 115 4 115 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 116 4 116 29] Equisat0.equisat ( * f) ( ^ f) } end module CreuSat_Solver_Impl0_HandleLongClause @@ -17062,217 +16813,171 @@ module CreuSat_Solver_Impl0_HandleLongClause use seq.Seq use Type use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model11 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model9 with function Model0.model = Model11.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with function Model0.model = Model9.model - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model9.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant7.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Model8.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model7.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with function Model0.model = Model1.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_SatInner as SatInner0 with function Model0.model = Model8.model, + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = Invariant7.index_logic, function IndexLogic0.index_logic = SatInner1.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, + clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, + type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Invariant4.model, + function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, + function Model2.model = WatchesInvariantInternal0.model, function Model1.model = UnitAreSat0.model, + function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, + function Model1.model = Invariant8.model, function Model0.model = SatInner2.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner, predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_Equisat as Equisat0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss1.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with function Model0.model = Model8.model, - function Model1.model = Model1.model - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant7.invariant', - predicate Invariant1.invariant' = Invariant8.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model1.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner1.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model8.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model1.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model8.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model8.model, - function Model1.model = Model1.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model10.model, - function Model1.model = Model8.model, function Model2.model = Model1.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with function Model0.model = Model1.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant4.invariant', - function Model0.model = Model1.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model8.model, - predicate Invariant0.invariant' = Invariant4.invariant', function Model1.model = Model1.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model2.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model2.model + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range + clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, + function Model0.model = Model2.model, function Model3.model = InvariantNoDecisionMirror0.model, + function Model1.model = WatchesInvariantInternal0.model, function Model0.model = LongArePostUnitInner0.model, + function Model0.model = UnitAreSat0.model, function Model0.model = SatInner0.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant8.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with predicate Invariant1.invariant' = Invariant6.invariant' + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with predicate Invariant0.invariant' = Invariant6.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model11 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model9.model, axiom . + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss1.sat_inner + clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss0.formula_sat_inner + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner, + predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss1.complete_inner + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model9 with function Model2.model = InvariantNoDecision0.model, + function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant5.model, + function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant4.invariant_internal clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant3 with function Model0.model = Model6.model + type a = Type.alloc_alloc_global, function Model0.model = Invariant3.model, axiom . + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant2.watches_invariant_internal clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 with function Model0.model = Model5.model, - predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model4.model, - function Model1.model = Model9.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model4.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model4.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model3.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model9.model, - function Model1.model = Model4.model, predicate Invariant0.invariant' = Invariant6.invariant', - function Model2.model = Model3.model, function Model3.model = Model8.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant5.invariant', function Model0.model = Model4.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model3.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model9.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model3.model, function Model1.model = Model4.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Invariant0.model, + function Model0.model = Model0.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 + clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 + clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_formula_formula + clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant3 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . + clone CreuSat_Logic_LogicClause_Impl2_VarsInRange as VarsInRange0 with predicate VarsInRange0.vars_in_range = UnitInner0.vars_in_range + clone CreuSat_Logic_LogicLit_Impl1_UnsetInner as UnsetInner0 with predicate UnsetInner0.unset_inner = Unset1.unset_inner, + predicate UnsetInner0.unset_inner = UnitInner0.unset_inner + clone CreuSat_Logic_LogicClause_Impl2_UnitInner as UnitInner0 with predicate UnitInner0.unit_inner = Unit0.unit_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToLit as ClausePostWithRegardsToLit0 with predicate ClausePostWithRegardsToLit0.clause_post_with_regards_to_lit = EnqAssignment0.clause_post_with_regards_to_lit + clone CreuSat_Logic_LogicLit_Impl1_IdxInTrail as IdxInTrail0 with predicate IdxInTrail0.idx_in_trail = EnqAssignment0.idx_in_trail + clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat0 with predicate Unsat0.unsat = EnqAssignment0.unsat + clone CreuSat_Logic_LogicLit_Impl1_Unset as Unset1 with predicate Unset0.unset = UnitAndUnset0.unset, + predicate Unset0.unset = EnqAssignment0.unset + clone CreuSat_Logic_LogicClause_Impl2_Unit as Unit0 with predicate Unit0.unit = UnitAndUnset0.unit + clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve7 with type t = usize, + predicate Resolve0.resolve = Resolve0.resolve, predicate Resolve1.resolve = Resolve0.resolve + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model12.modelTy, + type ModelTy0.modelTy = Model14.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model as Model14 with type t = Type.creusat_clause_clause, + function Model1.model = GetAssertingLevel0.model, function Model0.model = Index1.model, + function Model0.model = UnitAndUnset0.model + clone CreusotContracts_Logic_Model_Impl0_Model as Model13 with type t = Type.creusat_formula_formula, + function Model0.model = GetAssertingLevel0.model, function Model0.model = Index0.model + clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with predicate EquisatExtension0.equisat_extension = SwapLitsInClause0.equisat_extension + clone CreusotContracts_Logic_Model_Impl1_Model as Model12 with type t = Type.creusat_clause_clause, + function Model0.model = SwapLitsInClause0.model clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve6 with type t = Type.creusat_solver_solver clone CreuSat_Solver_Impl0_IncreaseNumConflicts_Interface as IncreaseNumConflicts0 clone CreuSat_Solver_Impl0_IncreaseNumLemmas_Interface as IncreaseNumLemmas0 clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve5 with type t = Type.creusat_trail_trail + clone CreuSat_Trail_Impl0_EnqAssignment_Interface as EnqAssignment0 clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve4 with type t = Type.creusat_formula_formula + clone CreuSat_Clause_Impl3_UnitAndUnset_Interface as UnitAndUnset0 + clone CreuSat_Clause_Impl0_Index_Interface as Index1 + clone CreuSat_Formula_Impl0_Index_Interface as Index0 clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve3 with type t = Type.creusat_decision_decisions + clone CreuSat_Trail_Impl0_BacktrackSafe_Interface as BacktrackSafe0 clone CreuSat_Util_UpdateSlow_Interface as UpdateSlow0 clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = usize clone CreuSat_Util_UpdateFast_Interface as UpdateFast0 clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_watches_watches - clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve7 with type t = usize - clone CreusotContracts_Logic_Resolve_Impl0_Resolve as Resolve0 with type t1 = usize, type t2 = usize, - predicate Resolve0.resolve = Resolve7.resolve, predicate Resolve1.resolve = Resolve7.resolve - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 - clone CreuSat_Logic_LogicLit_Impl1_UnsetInner as UnsetInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Unset as Unset1 with function Model0.model = Model9.model, - predicate UnsetInner0.unset_inner = UnsetInner0.unset_inner - clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat0 with function Model0.model = Model9.model, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicClause_Impl2_VarsInRange as VarsInRange0 with function Model0.model = Model1.model, - predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner - clone CreusotContracts_Logic_Model_Impl0_Model as Model14 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model1.model - clone CreuSat_Clause_Impl0_Index_Interface as Index1 with function Model0.model = Model14.model - clone CreusotContracts_Logic_Model_Impl1_Model as Model12 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model1.model - clone CreuSat_Logic_LogicClause_Impl2_UnitInner as UnitInner0 with predicate VarsInRange0.vars_in_range = VarsInRange0.vars_in_range, - predicate SatInner0.sat_inner = SatInner2.sat_inner, function Model0.model = Model1.model, - predicate UnsetInner0.unset_inner = UnsetInner0.unset_inner - clone CreuSat_Logic_LogicClause_Impl2_Unit as Unit0 with function Model0.model = Model9.model, - predicate UnitInner0.unit_inner = UnitInner0.unit_inner - clone CreuSat_Clause_Impl3_UnitAndUnset_Interface as UnitAndUnset0 with function Model0.model = Model14.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal, - predicate Invariant0.invariant' = Invariant5.invariant', predicate Unit0.unit = Unit0.unit, - predicate Unset0.unset = Unset1.unset - clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with function Model0.model = Model2.model, - predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToLit as ClausePostWithRegardsToLit0 with function Model0.model = Model9.model, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Clause_Impl3_SwapLitsInClause_Interface as SwapLitsInClause0 with function Model0.model = Model12.model, - predicate Invariant0.invariant' = Invariant4.invariant', - predicate EquisatExtension0.equisat_extension = EquisatExtension0.equisat_extension, - function Model1.model = Model1.model - clone CreusotContracts_Logic_Model_Impl0_Model as Model13 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model2.model - clone CreuSat_Formula_Impl0_Index_Interface as Index0 with function Model0.model = Model13.model - clone CreuSat_Logic_LogicLit_Impl1_IdxInTrail as IdxInTrail0 with function Model0.model = Model4.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Clause_Impl3_CalcLbd_Interface as CalcLbd0 with function Model0.model = Model3.model, - predicate Invariant0.invariant' = Invariant4.invariant' - clone CreuSat_Trail_Impl0_EnqAssignment_Interface as EnqAssignment0 with predicate Invariant0.invariant' = Invariant1.invariant', - predicate Invariant1.invariant' = Invariant0.invariant', predicate Invariant2.invariant' = Invariant7.invariant', - predicate Invariant3.invariant' = Invariant6.invariant', function Model0.model = Model8.model, - function Model1.model = Model1.model, predicate Unset0.unset = Unset1.unset, predicate Unsat0.unsat = Unsat0.unsat, - predicate IdxInTrail0.idx_in_trail = IdxInTrail0.idx_in_trail, function Model2.model = Model9.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate Unset1.unset = Unset0.unset, - function Model3.model = Model4.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, - predicate ClausePostWithRegardsToLit0.clause_post_with_regards_to_lit = ClausePostWithRegardsToLit0.clause_post_with_regards_to_lit, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_Trail_Impl0_BacktrackSafe_Interface as BacktrackSafe0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant1.invariant', predicate Invariant2.invariant' = Invariant3.invariant', - function Model0.model = Model4.model, function Model1.model = Model9.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_Formula_Impl2_AddClause_Interface as AddClause0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant1.invariant', predicate Invariant2.invariant' = Invariant2.invariant', - function Model0.model = Model1.model, predicate Invariant3.invariant' = Invariant4.invariant', - function Model1.model = Model0.model, - predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner, - predicate Equisat0.equisat = Equisat0.equisat, function Model2.model = Model8.model, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_Solver_GetAssertingLevel_Interface as GetAssertingLevel0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant1.invariant', function Model0.model = Model13.model, - predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner, - predicate Invariant2.invariant' = Invariant4.invariant', function Model1.model = Model14.model, - predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - let rec cfg handle_long_clause [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 117 4 119 5] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (t : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) (d : borrowed (Type.creusat_decision_decisions)) (clause : Type.creusat_clause_clause) (s_idx : usize) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 106 4 106 37] Invariant0.invariant' ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 107 4 107 42] Invariant1.invariant' ( * t) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 108 4 108 42] Invariant2.invariant' ( * w) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 109 4 109 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 110 4 110 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 111 4 111 46] Invariant4.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 112 4 112 52] EquisatExtensionInner0.equisat_extension_inner clause (Model0.model f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 113 4 113 36] Seq.length (Model1.model clause) > 1} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 114 4 114 41] UInt64.to_int s_idx < Seq.length (Model1.model clause)} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 106 4 106 37] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 107 4 107 42] Invariant1.invariant' ( ^ t) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 108 4 108 42] Invariant2.invariant' ( ^ w) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 109 4 109 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 115 4 115 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 116 4 116 29] Equisat0.equisat ( * f) ( ^ f) } + clone CreuSat_Formula_Impl2_AddClause_Interface as AddClause0 + clone CreuSat_Clause_Impl3_CalcLbd_Interface as CalcLbd0 + clone CreusotContracts_Logic_Resolve_Impl0_Resolve as Resolve0 with type t1 = usize, type t2 = usize + clone CreuSat_Solver_GetAssertingLevel_Interface as GetAssertingLevel0 + clone CreuSat_Clause_Impl3_SwapLitsInClause_Interface as SwapLitsInClause0 + let rec cfg handle_long_clause [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 117 4 119 5] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (t : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) (d : borrowed (Type.creusat_decision_decisions)) (clause : Type.creusat_clause_clause) (s_idx : usize) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 106 4 106 37] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 107 4 107 42] Invariant1.invariant' ( * t) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 108 4 108 42] Invariant2.invariant' ( * w) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 109 4 109 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 110 4 110 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 111 4 111 46] Invariant4.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 112 4 112 52] EquisatExtensionInner0.equisat_extension_inner clause (Model0.model f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 113 4 113 36] Seq.length (Model1.model clause) > 1} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 114 4 114 41] UInt64.to_int s_idx < Seq.length (Model1.model clause)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 106 4 106 37] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 107 4 107 42] Invariant1.invariant' ( ^ t) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 108 4 108 42] Invariant2.invariant' ( ^ w) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 109 4 109 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 115 4 115 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 116 4 116 29] Equisat0.equisat ( * f) ( ^ f) } = var _0 : (); @@ -17376,7 +17081,7 @@ module CreuSat_Solver_Impl0_HandleLongClause clause_6 <- ^ _9; _10 <- * f_2; _11 <- s_idx_7; - _8 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 120 8 120 47] SwapLitsInClause0.swap_lits_in_clause _9 _10 _11 (0 : usize)); + _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 120 8 120 47] SwapLitsInClause0.swap_lits_in_clause _9 _10 _11 (0 : usize)); goto BB5 } BB5 { @@ -17384,7 +17089,7 @@ module CreuSat_Solver_Impl0_HandleLongClause _15 <- _16; _17 <- * t_3; _18 <- * f_2; - _14 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 121 27 121 61] GetAssertingLevel0.get_asserting_level _15 _17 _18); + _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 121 27 121 61] GetAssertingLevel0.get_asserting_level _15 _17 _18); goto BB6 } BB6 { @@ -17395,7 +17100,7 @@ module CreuSat_Solver_Impl0_HandleLongClause clause_6 <- ^ _20; _21 <- * f_2; _22 <- idx_12; - _19 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 122 8 122 45] SwapLitsInClause0.swap_lits_in_clause _20 _21 _22 (1 : usize)); + _19 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 122 8 122 45] SwapLitsInClause0.swap_lits_in_clause _20 _21 _22 (1 : usize)); goto BB7 } BB7 { @@ -17404,7 +17109,7 @@ module CreuSat_Solver_Impl0_HandleLongClause _26 <- borrow_mut ( * self_1); self_1 <- { self_1 with current = ( ^ _26) }; _27 <- * t_3; - lbd_23 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 125 18 125 45] CalcLbd0.calc_lbd _24 _25 _26 _27); + lbd_23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 125 18 125 45] CalcLbd0.calc_lbd _24 _25 _26 _27); goto BB8 } BB8 { @@ -17414,7 +17119,7 @@ module CreuSat_Solver_Impl0_HandleLongClause _31 <- borrow_mut ( * w_4); w_4 <- { w_4 with current = ( ^ _31) }; _32 <- * t_3; - cref_28 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 126 19 126 45] AddClause0.add_clause _29 _30 _31 _32); + cref_28 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 126 19 126 45] AddClause0.add_clause _29 _30 _31 _32); goto BB9 } BB9 { @@ -17424,7 +17129,7 @@ module CreuSat_Solver_Impl0_HandleLongClause _34 <- borrow_mut ( * _35); _35 <- { _35 with current = ( ^ _34) }; _36 <- lbd_23; - _33 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 127 8 127 40] UpdateFast0.update_fast _34 _36); + _33 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 127 8 127 40] UpdateFast0.update_fast _34 _36); goto BB10 } BB10 { @@ -17434,7 +17139,7 @@ module CreuSat_Solver_Impl0_HandleLongClause _38 <- borrow_mut ( * _39); _39 <- { _39 with current = ( ^ _38) }; _40 <- lbd_23; - _37 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 128 8 128 40] UpdateSlow0.update_slow _38 _40); + _37 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 128 8 128 40] UpdateSlow0.update_slow _38 _40); goto BB11 } BB11 { @@ -17445,19 +17150,19 @@ module CreuSat_Solver_Impl0_HandleLongClause _44 <- * f_2; _45 <- borrow_mut ( * d_5); d_5 <- { d_5 with current = ( ^ _45) }; - _41 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 131 8 131 37] BacktrackSafe0.backtrack_safe _42 _43 _44 _45); + _41 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 131 8 131 37] BacktrackSafe0.backtrack_safe _42 _43 _44 _45); goto BB12 } BB12 { assume { Resolve3.resolve d_5 }; _50 <- * f_2; _51 <- cref_28; - _49 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 133 18 133 25] Index0.index _50 _51); + _49 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 133 18 133 25] Index0.index _50 _51); goto BB13 } BB13 { _48 <- _49; - _47 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 133 18 133 28] Index1.index _48 (0 : usize)); + _47 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 133 18 133 28] Index1.index _48 (0 : usize)); goto BB14 } BB14 { @@ -17469,7 +17174,7 @@ module CreuSat_Solver_Impl0_HandleLongClause step_52 <- Type.CreuSat_Trail_Step _53 _54 _55; _61 <- * f_2; _62 <- cref_28; - _60 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 140 11 140 18] Index0.index _61 _62); + _60 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 140 11 140 18] Index0.index _61 _62); goto BB15 } BB15 { @@ -17477,7 +17182,7 @@ module CreuSat_Solver_Impl0_HandleLongClause _64 <- Type.creusat_trail_trail_Trail_assignments ( * t_3); _63 <- _64; _65 <- * f_2; - _58 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 140 11 140 52] UnitAndUnset0.unit_and_unset _59 _63 _65); + _58 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 140 11 140 52] UnitAndUnset0.unit_and_unset _59 _63 _65); goto BB16 } BB16 { @@ -17492,7 +17197,7 @@ module CreuSat_Solver_Impl0_HandleLongClause _68 <- step_52; _69 <- * f_2; assume { Resolve4.resolve f_2 }; - _66 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 141 12 141 37] EnqAssignment0.enq_assignment _67 _68 _69); + _66 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 141 12 141 37] EnqAssignment0.enq_assignment _67 _68 _69); goto BB18 } BB18 { @@ -17509,13 +17214,13 @@ module CreuSat_Solver_Impl0_HandleLongClause BB20 { _71 <- borrow_mut ( * self_1); self_1 <- { self_1 with current = ( ^ _71) }; - _70 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 144 8 144 34] IncreaseNumLemmas0.increase_num_lemmas _71); + _70 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 144 8 144 34] IncreaseNumLemmas0.increase_num_lemmas _71); goto BB21 } BB21 { _73 <- borrow_mut ( * self_1); self_1 <- { self_1 with current = ( ^ _73) }; - _72 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 145 8 145 37] IncreaseNumConflicts0.increase_num_conflicts _73); + _72 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 145 8 145 37] IncreaseNumConflicts0.increase_num_conflicts _73); goto BB22 } BB22 { @@ -17535,6 +17240,7 @@ module CreuSat_Trail_Impl0_LearnUnit_Interface use mach.int.Int32 use Type use prelude.Prelude + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant2.invariant_mirror clone CreuSat_Logic_LogicLit_Impl1_Sat_Interface as Sat0 clone CreuSat_Logic_LogicTrail_LongArePostUnitInner_Interface as LongArePostUnitInner0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model3 @@ -17544,26 +17250,24 @@ module CreuSat_Trail_Impl0_LearnUnit_Interface clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant2 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant2 with axiom . clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant1 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant0 val learn_unit [@cfg:stackify] (self : borrowed (Type.creusat_trail_trail)) (cref : usize) (f : Type.creusat_formula_formula) (d : borrowed (Type.creusat_decision_decisions)) : Type.core_result_result () () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 302 4 302 42] Invariant0.invariant' ( * self) f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 303 4 303 48] Invariant1.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 304 4 304 30] Invariant2.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 305 4 305 43] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 306 4 306 50] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) = 1} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 307 4 307 59] Invariant3.invariant' (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 313 4 313 77] LongArePostUnitInner0.long_are_post_unit_inner (Model2.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model3.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 302 4 302 42] Invariant0.invariant' ( ^ self) f } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 303 4 303 48] Invariant1.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 310 4 312 70] match (result) with + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 302 4 302 42] Invariant0.invariant' ( * self) f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 303 4 303 48] Invariant1.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 304 4 304 30] Invariant2.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 305 4 305 43] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 306 4 306 50] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) = 1} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 307 4 307 59] Invariant3.invariant' (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 313 4 313 77] LongArePostUnitInner0.long_are_post_unit_inner (Model2.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model3.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 302 4 302 42] Invariant0.invariant' ( ^ self) f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 303 4 303 48] Invariant1.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 310 4 312 70] match (result) with | Type.Core_Result_Result_Err _ -> true | Type.Core_Result_Result_Ok _ -> Sat0.sat (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) 0) (Type.creusat_trail_trail_Trail_assignments ( ^ self)) end } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 314 4 314 86] LongArePostUnitInner0.long_are_post_unit_inner (Model2.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model3.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 314 4 314 86] LongArePostUnitInner0.long_are_post_unit_inner (Model2.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model3.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } end module CreuSat_Trail_Impl0_LearnUnit @@ -17574,154 +17278,127 @@ module CreuSat_Trail_Impl0_LearnUnit use Type use prelude.Prelude use prelude.UInt8 - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model3 with function Model0.model = Model8.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with function Model0.model = Model3.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model3.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model7.model - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model1.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model1.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner0.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with function Model0.model = Model1.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant3.invariant', - function Model0.model = Model1.model + type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Invariant3.model, + function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, + function Model0.model = ClausePostWithRegardsToInner0.model, function Model1.model = UnitAreSat0.model, + function Model0.model = LitIdxIn0.model, function Model1.model = Invariant7.model clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with function Model0.model = Model0.model, - function Model1.model = Model1.model - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = Invariant6.invariant', - predicate Invariant1.invariant' = Invariant7.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model0.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model0.model, - function Model1.model = Model1.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model6 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model0.model, - predicate Invariant0.invariant' = Invariant3.invariant', function Model1.model = Model1.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant2 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model6.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model0.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant1 with function Model0.model = Model5.model + type a = Type.alloc_alloc_global, function Model0.model = LongArePostUnitInner0.model, + function Model3.model = InvariantNoDecisionMirror0.model, function Model0.model = InvariantMirror0.model, + function Model0.model = Model6.model, function Model0.model = UnitAreSat0.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = SatInner0.index_logic, function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic, function IndexLogic0.index_logic = Invariant6.index_logic + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model3.model, axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model3 with function Model0.model = Sat0.model, + function Model2.model = InvariantNoDecision0.model, function Model0.model = InvariantNoDecisionMirror0.model, + function Model0.model = Invariant4.model, function Model1.model = TrailEntriesAreAssigned0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant0.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model2.model, - function Model1.model = Model3.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model2.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model2.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model4.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model3.model, - function Model1.model = Model2.model, predicate Invariant0.invariant' = Invariant5.invariant', - function Model2.model = Model4.model, function Model3.model = Model0.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant4.invariant', function Model0.model = Model2.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model4.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model3.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant0 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model4.model, function Model1.model = Model2.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror - clone CreuSat_Logic_Logic_Unset as Unset1 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_trail_trail - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy2 - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_decision_decisions - clone CreuSat_Logic_LogicLit_Impl1_UnsetInner as UnsetInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat0 with function Model0.model = Model3.model, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_Unset as Unset0 with function Model0.model = Model3.model, - predicate UnsetInner0.unset_inner = UnsetInner0.unset_inner + type a = Type.alloc_alloc_global, function Model1.model = Invariant0.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant2.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model6 with function Model0.model = Invariant2.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant2.invariant_mirror + clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_decision_node, + type a = Type.alloc_alloc_global, function Model0.model = Invariant1.model, axiom . + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant0.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant0.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant2 with axiom . + clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant1 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant0 + clone CreuSat_Logic_LogicLit_Impl1_UnsetInner as UnsetInner0 with predicate UnsetInner0.unset_inner = Unset0.unset_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToLit as ClausePostWithRegardsToLit0 with predicate ClausePostWithRegardsToLit0.clause_post_with_regards_to_lit = EnqAssignment0.clause_post_with_regards_to_lit + clone CreuSat_Logic_Logic_Unset as Unset1 with predicate Unset1.unset = EnqAssignment0.unset + clone CreuSat_Logic_LogicLit_Impl1_IdxInTrail as IdxInTrail0 with predicate IdxInTrail0.idx_in_trail = EnqAssignment0.idx_in_trail + clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat0 with predicate Unsat0.unsat = EnqAssignment0.unsat + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy2 with type ModelTy0.modelTy = Model11.modelTy + clone CreuSat_Logic_LogicLit_Impl1_Unset as Unset0 with predicate Unset0.unset = LitSet0.unset, + predicate Unset0.unset = EnqAssignment0.unset clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy2.modelTy, function Model0.model = Model3.model - clone CreuSat_Lit_Impl1_LitSet_Interface as LitSet0 with function Model0.model = Model11.model, - predicate Invariant0.invariant' = Invariant6.invariant', predicate Unset0.unset = Unset0.unset + function Model0.model = LitSet0.model + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model10.modelTy clone CreusotContracts_Logic_Model_Impl0_Model as Model10 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model1.model - clone CreuSat_Clause_Impl0_Index_Interface as Index1 with function Model0.model = Model10.model - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToLit as ClausePostWithRegardsToLit0 with function Model0.model = Model3.model, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner + function Model0.model = Index1.model + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model9.modelTy clone CreusotContracts_Logic_Model_Impl0_Model as Model9 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model6.model - clone CreuSat_Formula_Impl0_Index_Interface as Index0 with function Model0.model = Model9.model - clone CreuSat_Logic_LogicLit_Impl1_IdxInTrail as IdxInTrail0 with function Model0.model = Model2.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Trail_Impl0_DecisionLevel_Interface as DecisionLevel0 with function Model0.model = Model4.model - clone CreuSat_Trail_Impl0_EnqAssignment_Interface as EnqAssignment0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant2.invariant', predicate Invariant2.invariant' = Invariant6.invariant', - predicate Invariant3.invariant' = Invariant5.invariant', function Model0.model = Model0.model, - function Model1.model = Model1.model, predicate Unset0.unset = Unset0.unset, predicate Unsat0.unsat = Unsat0.unsat, - predicate IdxInTrail0.idx_in_trail = IdxInTrail0.idx_in_trail, function Model2.model = Model3.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate Unset1.unset = Unset1.unset, - function Model3.model = Model2.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, - predicate ClausePostWithRegardsToLit0.clause_post_with_regards_to_lit = ClausePostWithRegardsToLit0.clause_post_with_regards_to_lit, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_Trail_Impl0_BacktrackTo_Interface as BacktrackTo0 with function Model0.model = Model4.model, - predicate Invariant0.invariant' = Invariant2.invariant', predicate Invariant1.invariant' = Invariant0.invariant', - predicate Invariant2.invariant' = Invariant1.invariant', function Model1.model = Model2.model, - function Model2.model = Model3.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - let rec cfg learn_unit [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 315 4 315 95] (self : borrowed (Type.creusat_trail_trail)) (cref : usize) (f : Type.creusat_formula_formula) (d : borrowed (Type.creusat_decision_decisions)) : Type.core_result_result () () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 302 4 302 42] Invariant0.invariant' ( * self) f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 303 4 303 48] Invariant1.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 304 4 304 30] Invariant2.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 305 4 305 43] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 306 4 306 50] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) = 1} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 307 4 307 59] Invariant3.invariant' (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 313 4 313 77] LongArePostUnitInner0.long_are_post_unit_inner (Model2.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model3.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 302 4 302 42] Invariant0.invariant' ( ^ self) f } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 303 4 303 48] Invariant1.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 310 4 312 70] match (result) with + function Model0.model = Index0.model + clone CreuSat_Trail_Impl0_EnqAssignment_Interface as EnqAssignment0 + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_trail_trail + clone CreuSat_Lit_Impl1_LitSet_Interface as LitSet0 + clone CreuSat_Clause_Impl0_Index_Interface as Index1 + clone CreuSat_Formula_Impl0_Index_Interface as Index0 + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_decision_decisions + clone CreuSat_Trail_Impl0_BacktrackTo_Interface as BacktrackTo0 + clone CreuSat_Trail_Impl0_DecisionLevel_Interface as DecisionLevel0 + let rec cfg learn_unit [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 315 4 315 95] (self : borrowed (Type.creusat_trail_trail)) (cref : usize) (f : Type.creusat_formula_formula) (d : borrowed (Type.creusat_decision_decisions)) : Type.core_result_result () () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 302 4 302 42] Invariant0.invariant' ( * self) f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 303 4 303 48] Invariant1.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 304 4 304 30] Invariant2.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 305 4 305 43] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 306 4 306 50] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) = 1} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 307 4 307 59] Invariant3.invariant' (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 313 4 313 77] LongArePostUnitInner0.long_are_post_unit_inner (Model2.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model3.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 302 4 302 42] Invariant0.invariant' ( ^ self) f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 303 4 303 48] Invariant1.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 310 4 312 70] match (result) with | Type.Core_Result_Result_Err _ -> true | Type.Core_Result_Result_Ok _ -> Sat0.sat (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) 0) (Type.creusat_trail_trail_Trail_assignments ( ^ self)) end } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 314 4 314 86] LongArePostUnitInner0.long_are_post_unit_inner (Model2.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model3.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 314 4 314 86] LongArePostUnitInner0.long_are_post_unit_inner (Model2.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model3.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } = var _0 : Type.core_result_result () (); @@ -17771,11 +17448,11 @@ module CreuSat_Trail_Impl0_LearnUnit } BB0 { _8 <- * self_1; - _7 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 316 11 316 32] DecisionLevel0.decision_level _8); + _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 316 11 316 32] DecisionLevel0.decision_level _8); goto BB1 } BB1 { - _6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 316 11 316 36] _7 > (0 : usize)); + _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 316 11 316 36] _7 > (0 : usize)); switch (_6) | False -> goto BB4 | _ -> goto BB2 @@ -17787,7 +17464,7 @@ module CreuSat_Trail_Impl0_LearnUnit _11 <- f_3; _12 <- borrow_mut ( * d_4); d_4 <- { d_4 with current = ( ^ _12) }; - _9 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 317 12 317 38] BacktrackTo0.backtrack_to _10 (0 : usize) _11 _12); + _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 317 12 317 38] BacktrackTo0.backtrack_to _10 (0 : usize) _11 _12); goto BB3 } BB3 { @@ -17803,19 +17480,19 @@ module CreuSat_Trail_Impl0_LearnUnit BB5 { _19 <- f_3; _20 <- cref_2; - _18 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 321 11 321 18] Index0.index _19 _20); + _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 321 11 321 18] Index0.index _19 _20); goto BB6 } BB6 { _17 <- _18; - _16 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 321 11 321 21] Index1.index _17 (0 : usize)); + _16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 321 11 321 21] Index1.index _17 (0 : usize)); goto BB7 } BB7 { _15 <- _16; _22 <- Type.creusat_trail_trail_Trail_assignments ( * self_1); _21 <- _22; - _14 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 321 11 321 48] LitSet0.lit_set _15 _21); + _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 321 11 321 48] LitSet0.lit_set _15 _21); goto BB8 } BB8 { @@ -17836,12 +17513,12 @@ module CreuSat_Trail_Impl0_LearnUnit self_1 <- { self_1 with current = ( ^ _26) }; _32 <- f_3; _33 <- cref_2; - _31 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 324 40 324 47] Index0.index _32 _33); + _31 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 324 40 324 47] Index0.index _32 _33); goto BB11 } BB11 { _30 <- _31; - _29 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 324 40 324 50] Index1.index _30 (0 : usize)); + _29 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 324 40 324 50] Index1.index _30 (0 : usize)); goto BB12 } BB12 { @@ -17850,7 +17527,7 @@ module CreuSat_Trail_Impl0_LearnUnit _34 <- Type.CreuSat_Trail_Reason_Unit _35; _27 <- Type.CreuSat_Trail_Step _28 (0 : usize) _34; _36 <- f_3; - _25 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 324 8 324 103] EnqAssignment0.enq_assignment _26 _27 _36); + _25 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 324 8 324 103] EnqAssignment0.enq_assignment _26 _27 _36); goto BB13 } BB13 { @@ -17871,32 +17548,31 @@ module CreuSat_Solver_Impl0_HandleConflict_Interface use mach.int.Int32 use seq.Seq use Type - clone CreuSat_Logic_LogicFormula_Impl1_NotSatisfiable_Interface as NotSatisfiable0 - clone CreuSat_Logic_LogicFormula_Impl1_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface as NotSatisfiable0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 clone CreuSat_Logic_LogicClause_Impl2_Unsat_Interface as Unsat0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant3 clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val handle_conflict [@cfg:stackify] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (t : borrowed (Type.creusat_trail_trail)) (cref : usize) (w : borrowed (Type.creusat_watches_watches)) (d : borrowed (Type.creusat_decision_decisions)) : Type.core_option_option bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 149 4 149 37] Invariant0.invariant' ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 150 4 150 42] Invariant1.invariant' ( * t) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 151 4 151 42] Invariant2.invariant' ( * w) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 152 4 152 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 153 4 153 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 154 4 154 43] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 155 4 155 57] Unsat0.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref)) (Type.creusat_trail_trail_Trail_assignments ( * t))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 149 4 149 37] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 150 4 150 42] Invariant1.invariant' ( ^ t) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 151 4 151 42] Invariant2.invariant' ( ^ w) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 152 4 152 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 156 4 156 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 157 4 157 29] Equisat0.equisat ( * f) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 158 4 162 7] match (result) with + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 149 4 149 37] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 150 4 150 42] Invariant1.invariant' ( * t) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 151 4 151 42] Invariant2.invariant' ( * w) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 152 4 152 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 153 4 153 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 154 4 154 43] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 155 4 155 57] Unsat0.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref)) (Type.creusat_trail_trail_Trail_assignments ( * t))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 149 4 149 37] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 150 4 150 42] Invariant1.invariant' ( ^ t) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 151 4 151 42] Invariant2.invariant' ( ^ w) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 152 4 152 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 156 4 156 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 157 4 157 29] Equisat0.equisat ( * f) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 158 4 162 7] match (result) with | Type.Core_Option_Option_Some (False) -> NotSatisfiable0.not_satisfiable ( ^ f) | Type.Core_Option_Option_Some (True) -> true | Type.Core_Option_Option_None -> true @@ -17911,213 +17587,159 @@ module CreuSat_Solver_Impl0_HandleConflict use seq.Seq use Type use prelude.UInt8 - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner1.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = Invariant7.index_logic, function IndexLogic0.index_logic = SatInner1.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = UnsatInner1.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, + predicate SatInner0.sat_inner = SatInner2.sat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model7 with function Model0.model = Model10.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model6 with function Model0.model = Model9.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with function Model0.model = Model6.model - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with function Model0.model = Model7.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss1.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model6.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant7.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with function Model0.model = Model7.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant4.invariant', - function Model0.model = Model7.model - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model7.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner1.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner - clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner0 with function Model0.model = Model7.model, - predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner - clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat0 with function Model0.model = Model6.model, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model7.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 + type a = Type.alloc_alloc_global, function Model0.model = Model7.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model7 with function Model0.model = NotSatisfiable0.model, + function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, + function Model2.model = WatchesInvariantInternal0.model, function Model0.model = UnsatInner0.model, + function Model0.model = Invariant4.model, function Model1.model = UnitAreSat0.model, + function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, + function Model1.model = Invariant8.model, function Model0.model = SatInner2.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = SatInner0.sat_inner, + predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner + clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss1.formula_sat_inner + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with predicate Invariant0.invariant' = Invariant6.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner, + predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss1.complete_inner + clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with function Model0.model = Model0.model, - function Model1.model = Model7.model - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant7.invariant', - predicate Invariant1.invariant' = Invariant8.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model0.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicFormula_Impl1_SatInner as SatInner0 with function Model0.model = Model0.model, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_Equisat as Equisat0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model0.model, - function Model1.model = Model7.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model0.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model8.model, - function Model1.model = Model0.model, function Model2.model = Model7.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with function Model0.model = Model1.model, - predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner - clone CreuSat_Logic_LogicFormula_Impl1_NotSatisfiable as NotSatisfiable0 with function Model0.model = Model7.model, - predicate EquisatExtension0.equisat_extension = EquisatExtension0.equisat_extension - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model0.model, - predicate Invariant0.invariant' = Invariant4.invariant', function Model1.model = Model7.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model1.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . + type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, + function Model0.model = Model1.model, function Model3.model = InvariantNoDecisionMirror0.model, + function Model1.model = WatchesInvariantInternal0.model, function Model0.model = LongArePostUnitInner0.model, + function Model0.model = UnitAreSat0.model, function Model0.model = SatInner0.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant8.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with predicate Invariant1.invariant' = Invariant6.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner1 with predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner, + predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant4.invariant_internal + clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtension0.equisat_extension_inner + clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model6.model, axiom . + clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model6 with function Model0.model = Unsat0.model, + function Model2.model = InvariantNoDecision0.model, function Model0.model = InvariantNoDecisionMirror0.model, + function Model0.model = Invariant5.model, function Model1.model = TrailEntriesAreAssigned0.model, + function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted + clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Invariant0.model, + function Model0.model = EquisatExtension0.model + clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with predicate EquisatExtension0.equisat_extension = NotSatisfiable0.equisat_extension + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant3 with function Model0.model = Model5.model + type a = Type.alloc_alloc_global, function Model0.model = Invariant3.model, axiom . + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant2.watches_invariant_internal clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 with function Model0.model = Model4.model, - predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model3.model, - function Model1.model = Model6.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model3.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model3.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model2.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model6.model, - function Model1.model = Model3.model, predicate Invariant0.invariant' = Invariant6.invariant', - function Model2.model = Model2.model, function Model3.model = Model0.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant5.invariant', function Model0.model = Model3.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model2.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model6.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model2.model, function Model1.model = Model3.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable as NotSatisfiable0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 + clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat0 + clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant3 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . use mach.int.Int64 + clone CreuSat_Logic_LogicClause_Impl2_Equals as Equals0 with predicate Equals0.equals = Compatible0.equals + clone CreuSat_Logic_LogicFormula_Equisat as Equisat1 with predicate Equisat0.equisat = EquisatCompatibleInner0.equisat + clone CreuSat_Logic_LogicFormula_Compatible as Compatible0 with predicate Compatible0.compatible = EquisatCompatibleInner0.compatible + clone CreuSat_Logic_LogicFormula_EquisatCompatibleInner as EquisatCompatibleInner0 with predicate EquisatCompatibleInner0.equisat_compatible_inner = EquisatCompatible0.equisat_compatible_inner + clone CreuSat_Logic_LogicFormula_Impl2_EquisatCompatible as EquisatCompatible0 with predicate EquisatCompatible0.equisat_compatible = AddUnit0.equisat_compatible + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model11.modelTy, + type ModelTy0.modelTy = Model12.modelTy + clone CreusotContracts_Logic_Model_Impl1_Model as Model12 with type t = Type.creusat_formula_formula, + function Model1.model = AddClause0.model, function Model0.model = HandleLongClause0.model, + function Model1.model = AddUnit0.model + clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_formula_formula, + function Model2.model = AnalyzeConflict0.model + clone CreuSat_Formula_Impl2_SimplifyFormula_Interface as SimplifyFormula0 + clone CreuSat_Formula_Impl2_ReduceDb_Interface as ReduceDb0 + clone CreuSat_Trail_Impl0_LearnUnit_Interface as LearnUnit0 + clone CreuSat_Formula_Impl2_AddUnit_Interface as AddUnit0 + clone CreuSat_Solver_Impl0_HandleLongClause_Interface as HandleLongClause0 + clone CreuSat_Trail_Impl0_BacktrackSafe_Interface as BacktrackSafe0 + clone CreuSat_Formula_Impl2_AddClause_Interface as AddClause0 clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve4 with type t = Type.creusat_decision_decisions clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve3 with type t = Type.creusat_watches_watches clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_trail_trail clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_formula_formula clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_solver_solver - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 - clone CreuSat_Logic_LogicClause_Impl2_Equals as Equals0 with function Model0.model = Model7.model - clone CreuSat_Logic_LogicFormula_Compatible as Compatible0 with predicate Equals0.equals = Equals0.equals - clone CreuSat_Logic_LogicFormula_Equisat as Equisat1 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss1.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicFormula_EquisatCompatibleInner as EquisatCompatibleInner0 with predicate Compatible0.compatible = Compatible0.compatible, - predicate Equisat0.equisat = Equisat1.equisat - clone CreuSat_Logic_LogicFormula_Impl1_EquisatCompatible as EquisatCompatible0 with function Model0.model = Model1.model, - predicate EquisatCompatibleInner0.equisat_compatible_inner = EquisatCompatibleInner0.equisat_compatible_inner - clone CreusotContracts_Logic_Model_Impl1_Model as Model12 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model - clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model - clone CreuSat_Formula_Impl2_SimplifyFormula_Interface as SimplifyFormula0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant2.invariant', predicate Invariant2.invariant' = Invariant1.invariant', - predicate Equisat0.equisat = Equisat0.equisat, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_Formula_Impl2_ReduceDb_Interface as ReduceDb0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant2.invariant', predicate Invariant2.invariant' = Invariant1.invariant', - predicate Equisat0.equisat = Equisat0.equisat, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_Trail_Impl0_LearnUnit_Interface as LearnUnit0 with predicate Invariant0.invariant' = Invariant1.invariant', - predicate Invariant1.invariant' = Invariant3.invariant', predicate Invariant2.invariant' = Invariant0.invariant', - function Model0.model = Model0.model, function Model1.model = Model7.model, - predicate Invariant3.invariant' = Invariant4.invariant', function Model2.model = Model3.model, - function Model3.model = Model6.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_Formula_Impl2_AddUnit_Interface as AddUnit0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant1.invariant', function Model0.model = Model7.model, - predicate Invariant2.invariant' = Invariant4.invariant', - predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner, - function Model1.model = Model12.model, - predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner, - predicate EquisatCompatible0.equisat_compatible = EquisatCompatible0.equisat_compatible, - predicate Equisat0.equisat = Equisat0.equisat, function Model2.model = Model0.model, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_Solver_Impl0_HandleLongClause_Interface as HandleLongClause0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant1.invariant', predicate Invariant2.invariant' = Invariant2.invariant', - predicate Invariant3.invariant' = Invariant3.invariant', predicate Invariant4.invariant' = Invariant4.invariant', - function Model0.model = Model12.model, - predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner, - function Model1.model = Model7.model, predicate Equisat0.equisat = Equisat0.equisat, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_Trail_Impl0_BacktrackSafe_Interface as BacktrackSafe0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant1.invariant', predicate Invariant2.invariant' = Invariant3.invariant', - function Model0.model = Model3.model, function Model1.model = Model6.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_Formula_Impl2_AddClause_Interface as AddClause0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant1.invariant', predicate Invariant2.invariant' = Invariant2.invariant', - function Model0.model = Model7.model, predicate Invariant3.invariant' = Invariant4.invariant', - function Model1.model = Model12.model, - predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner, - predicate Equisat0.equisat = Equisat0.equisat, function Model2.model = Model0.model, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_ConflictAnalysis_AnalyzeConflict_Interface as AnalyzeConflict0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant1.invariant', function Model0.model = Model0.model, - predicate Unsat0.unsat = Unsat0.unsat, predicate Invariant2.invariant' = Invariant3.invariant', - predicate NotSatisfiable0.not_satisfiable = NotSatisfiable0.not_satisfiable, - predicate Invariant3.invariant' = Invariant4.invariant', function Model1.model = Model7.model, - predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner, - function Model2.model = Model11.model, - predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - let rec cfg handle_conflict [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 163 4 165 21] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (t : borrowed (Type.creusat_trail_trail)) (cref : usize) (w : borrowed (Type.creusat_watches_watches)) (d : borrowed (Type.creusat_decision_decisions)) : Type.core_option_option bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 149 4 149 37] Invariant0.invariant' ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 150 4 150 42] Invariant1.invariant' ( * t) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 151 4 151 42] Invariant2.invariant' ( * w) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 152 4 152 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 153 4 153 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 154 4 154 43] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 155 4 155 57] Unsat0.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref)) (Type.creusat_trail_trail_Trail_assignments ( * t))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 149 4 149 37] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 150 4 150 42] Invariant1.invariant' ( ^ t) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 151 4 151 42] Invariant2.invariant' ( ^ w) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 152 4 152 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 156 4 156 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 157 4 157 29] Equisat0.equisat ( * f) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 158 4 162 7] match (result) with + clone CreuSat_ConflictAnalysis_AnalyzeConflict_Interface as AnalyzeConflict0 + let rec cfg handle_conflict [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 163 4 165 21] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (t : borrowed (Type.creusat_trail_trail)) (cref : usize) (w : borrowed (Type.creusat_watches_watches)) (d : borrowed (Type.creusat_decision_decisions)) : Type.core_option_option bool + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 149 4 149 37] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 150 4 150 42] Invariant1.invariant' ( * t) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 151 4 151 42] Invariant2.invariant' ( * w) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 152 4 152 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 153 4 153 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 154 4 154 43] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 155 4 155 57] Unsat0.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref)) (Type.creusat_trail_trail_Trail_assignments ( * t))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 149 4 149 37] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 150 4 150 42] Invariant1.invariant' ( ^ t) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 151 4 151 42] Invariant2.invariant' ( ^ w) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 152 4 152 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 156 4 156 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 157 4 157 29] Equisat0.equisat ( * f) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 158 4 162 7] match (result) with | Type.Core_Option_Option_Some (False) -> NotSatisfiable0.not_satisfiable ( ^ f) | Type.Core_Option_Option_Some (True) -> true | Type.Core_Option_Option_None -> true @@ -18196,7 +17818,7 @@ module CreuSat_Solver_Impl0_HandleConflict _10 <- cref_4; _11 <- borrow_mut ( * d_6); d_6 <- { d_6 with current = ( ^ _11) }; - res_7 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 166 18 166 49] AnalyzeConflict0.analyze_conflict _8 _9 _10 _11); + res_7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 166 18 166 49] AnalyzeConflict0.analyze_conflict _8 _9 _10 _11); goto BB1 } BB1 { @@ -18216,7 +17838,7 @@ module CreuSat_Solver_Impl0_HandleConflict _51 <- borrow_mut ( * w_5); w_5 <- { w_5 with current = ( ^ _51) }; _52 <- * t_3; - _48 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 187 16 187 42] AddClause0.add_clause _49 _50 _51 _52); + _48 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 187 16 187 42] AddClause0.add_clause _49 _50 _51 _52); goto BB17 } BB3 { @@ -18242,7 +17864,7 @@ module CreuSat_Solver_Impl0_HandleConflict f_2 <- { f_2 with current = ( ^ _17) }; _18 <- clause_15; _19 <- * t_3; - cref_16 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 175 27 175 48] AddUnit0.add_unit _17 _18 _19); + cref_16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 175 27 175 48] AddUnit0.add_unit _17 _18 _19); goto BB6 } BB6 { @@ -18252,7 +17874,7 @@ module CreuSat_Solver_Impl0_HandleConflict _24 <- * f_2; _25 <- borrow_mut ( * d_6); d_6 <- { d_6 with current = ( ^ _25) }; - _21 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 176 22 176 46] LearnUnit0.learn_unit _22 _23 _24 _25); + _21 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 176 22 176 46] LearnUnit0.learn_unit _22 _23 _24 _25); goto BB7 } BB7 { @@ -18271,7 +17893,7 @@ module CreuSat_Solver_Impl0_HandleConflict _31 <- * t_3; _32 <- borrow_mut ( * self_1); self_1 <- { self_1 with current = ( ^ _32) }; - _28 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 180 16 180 38] ReduceDb0.reduceDB _29 _30 _31 _32); + _28 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 180 16 180 38] ReduceDb0.reduceDB _29 _30 _31 _32); goto BB11 } BB9 { @@ -18297,7 +17919,7 @@ module CreuSat_Solver_Impl0_HandleConflict w_5 <- { w_5 with current = ( ^ _35) }; _36 <- * t_3; assume { Resolve2.resolve t_3 }; - _33 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 181 16 181 40] SimplifyFormula0.simplify_formula _34 _35 _36); + _33 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 181 16 181 40] SimplifyFormula0.simplify_formula _34 _35 _36); goto BB12 } BB12 { @@ -18324,7 +17946,7 @@ module CreuSat_Solver_Impl0_HandleConflict d_6 <- { d_6 with current = ( ^ _44) }; _45 <- clause_38; _46 <- s_idx_37; - _39 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 184 16 184 66] HandleLongClause0.handle_long_clause _40 _41 _42 _43 _44 _45 _46); + _39 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 184 16 184 66] HandleLongClause0.handle_long_clause _40 _41 _42 _43 _44 _45 _46); goto BB15 } BB15 { @@ -18347,7 +17969,7 @@ module CreuSat_Solver_Impl0_HandleConflict assume { Resolve1.resolve f_2 }; _56 <- borrow_mut ( * d_6); d_6 <- { d_6 with current = ( ^ _56) }; - _53 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 188 16 188 41] BacktrackSafe0.backtrack_safe _54 (0 : usize) _55 _56); + _53 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 188 16 188 41] BacktrackSafe0.backtrack_safe _54 (0 : usize) _55 _56); goto BB18 } BB18 { @@ -18386,8 +18008,8 @@ module CreuSat_Util_MinLog_Interface end module CreuSat_Util_MinLog use mach.int.Int - function min_log [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 88 0 88 33] (a : int) (b : int) : int = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 87 0 87 8] if a <= b then a else b + function min_log [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 88 0 88 33] (a : int) (b : int) : int = + [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 87 0 87 8] if a <= b then a else b end module CreuSat_Util_Min_Interface use mach.int.UInt64 @@ -18395,10 +18017,10 @@ module CreuSat_Util_Min_Interface use prelude.Prelude clone CreuSat_Util_MinLog_Interface as MinLog0 val min [@cfg:stackify] (a : usize) (b : usize) : usize - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 96 0 96 38] UInt64.to_int result = MinLog0.min_log (UInt64.to_int a) (UInt64.to_int b) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 97 0 97 38] UInt64.to_int a <= UInt64.to_int b -> UInt64.to_int result = UInt64.to_int a } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 98 0 98 37] UInt64.to_int b < UInt64.to_int a -> UInt64.to_int result = UInt64.to_int b } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 99 0 99 42] UInt64.to_int result <= UInt64.to_int b && UInt64.to_int result <= UInt64.to_int a } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 96 0 96 38] UInt64.to_int result = MinLog0.min_log (UInt64.to_int a) (UInt64.to_int b) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 97 0 97 38] UInt64.to_int a <= UInt64.to_int b -> UInt64.to_int result = UInt64.to_int a } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 98 0 98 37] UInt64.to_int b < UInt64.to_int a -> UInt64.to_int result = UInt64.to_int b } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 99 0 99 42] UInt64.to_int result <= UInt64.to_int b && UInt64.to_int result <= UInt64.to_int a } end module CreuSat_Util_Min @@ -18406,11 +18028,11 @@ module CreuSat_Util_Min use mach.int.Int use prelude.Prelude clone CreuSat_Util_MinLog as MinLog0 - let rec cfg min [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 100 0 100 39] (a : usize) (b : usize) : usize - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 96 0 96 38] UInt64.to_int result = MinLog0.min_log (UInt64.to_int a) (UInt64.to_int b) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 97 0 97 38] UInt64.to_int a <= UInt64.to_int b -> UInt64.to_int result = UInt64.to_int a } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 98 0 98 37] UInt64.to_int b < UInt64.to_int a -> UInt64.to_int result = UInt64.to_int b } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 99 0 99 42] UInt64.to_int result <= UInt64.to_int b && UInt64.to_int result <= UInt64.to_int a } + let rec cfg min [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 100 0 100 39] (a : usize) (b : usize) : usize + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 96 0 96 38] UInt64.to_int result = MinLog0.min_log (UInt64.to_int a) (UInt64.to_int b) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 97 0 97 38] UInt64.to_int a <= UInt64.to_int b -> UInt64.to_int result = UInt64.to_int a } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 98 0 98 37] UInt64.to_int b < UInt64.to_int a -> UInt64.to_int result = UInt64.to_int b } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 99 0 99 42] UInt64.to_int result <= UInt64.to_int b && UInt64.to_int result <= UInt64.to_int a } = var _0 : usize; @@ -18427,7 +18049,7 @@ module CreuSat_Util_Min BB0 { _4 <- a_1; _5 <- b_2; - _3 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 101 7 101 13] _4 <= _5); + _3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 101 7 101 13] _4 <= _5); switch (_3) | False -> goto BB2 | _ -> goto BB1 @@ -18452,8 +18074,8 @@ module CreuSat_Util_MaxLog_Interface end module CreuSat_Util_MaxLog use mach.int.Int - function max_log [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 109 0 109 33] (a : int) (b : int) : int = - [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 108 0 108 8] if a >= b then a else b + function max_log [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 109 0 109 33] (a : int) (b : int) : int = + [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 108 0 108 8] if a >= b then a else b end module CreuSat_Util_Max_Interface use mach.int.UInt64 @@ -18461,7 +18083,7 @@ module CreuSat_Util_Max_Interface use prelude.Prelude clone CreuSat_Util_MaxLog_Interface as MaxLog0 val max [@cfg:stackify] (a : usize) (b : usize) : usize - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 117 0 117 38] UInt64.to_int result = MaxLog0.max_log (UInt64.to_int a) (UInt64.to_int b) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 117 0 117 38] UInt64.to_int result = MaxLog0.max_log (UInt64.to_int a) (UInt64.to_int b) } end module CreuSat_Util_Max @@ -18469,8 +18091,8 @@ module CreuSat_Util_Max use mach.int.Int use prelude.Prelude clone CreuSat_Util_MaxLog as MaxLog0 - let rec cfg max [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 118 0 118 39] (a : usize) (b : usize) : usize - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 117 0 117 38] UInt64.to_int result = MaxLog0.max_log (UInt64.to_int a) (UInt64.to_int b) } + let rec cfg max [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 118 0 118 39] (a : usize) (b : usize) : usize + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 117 0 117 38] UInt64.to_int result = MaxLog0.max_log (UInt64.to_int a) (UInt64.to_int b) } = var _0 : usize; @@ -18487,7 +18109,7 @@ module CreuSat_Util_Max BB0 { _4 <- a_1; _5 <- b_2; - _3 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/util.rs" 119 7 119 13] _4 >= _5); + _3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 119 7 119 13] _4 >= _5); switch (_3) | False -> goto BB2 | _ -> goto BB1 @@ -18514,7 +18136,8 @@ module CreuSat_UnitProp_Swap_Interface use seq.Permut use prelude.Prelude use Type - clone CreuSat_Logic_LogicFormula_Impl1_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 clone CreuSat_Logic_LogicLit_Impl1_SatInner_Interface as SatInner0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model2 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 @@ -18522,25 +18145,23 @@ module CreuSat_UnitProp_Swap_Interface type a = Type.alloc_alloc_global, axiom . clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val swap [@cfg:stackify] (f : borrowed (Type.creusat_formula_formula)) (trail : Type.creusat_trail_trail) (watches : Type.creusat_watches_watches) (cref : usize) (j : usize) (k : usize) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 52 0 52 33] Invariant0.invariant' ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 53 0 53 39] Invariant1.invariant' trail ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 54 0 54 41] Invariant2.invariant' watches ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 55 0 55 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) >= 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 56 0 56 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 57 0 57 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) > UInt64.to_int j} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 58 0 58 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) > UInt64.to_int k} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 59 0 59 69] not SatInner0.sat_inner (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) 0) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 52 0 52 33] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 53 0 53 39] Invariant1.invariant' trail ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 54 0 54 41] Invariant2.invariant' watches ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 61 0 61 78] Permut.exchange (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref))) (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) (UInt64.to_int j) (UInt64.to_int k) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 62 0 62 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 63 0 63 55] Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) = Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 65 0 65 25] Equisat0.equisat ( * f) ( ^ f) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 52 0 52 33] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 53 0 53 39] Invariant1.invariant' trail ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 54 0 54 41] Invariant2.invariant' watches ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 55 0 55 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) >= 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 56 0 56 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 57 0 57 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) > UInt64.to_int j} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 58 0 58 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) > UInt64.to_int k} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 59 0 59 69] not SatInner0.sat_inner (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) 0) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 52 0 52 33] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 53 0 53 39] Invariant1.invariant' trail ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 54 0 54 41] Invariant2.invariant' watches ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 61 0 61 78] Permut.exchange (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref))) (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) (UInt64.to_int j) (UInt64.to_int k) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 62 0 62 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 63 0 63 55] Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) = Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 65 0 65 25] Equisat0.equisat ( * f) ( ^ f) } end module CreuSat_UnitProp_Swap @@ -18552,147 +18173,142 @@ module CreuSat_UnitProp_Swap use prelude.Prelude use Type use prelude.UInt8 - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant3.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model0.model = Model8.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model2.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant6 with function Model0.model = Model2.model + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = SatInner0.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = Invariant3.index_logic, function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, + predicate SatInner0.sat_inner = SatInner2.sat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model7.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with function Model0.model = Model1.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model1.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant5 with function Model0.model = Model1.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant5.invariant', - function Model0.model = Model1.model - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model1.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner0.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner + type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model1.model = InvariantMirror0.model, + function Model0.model = FormulaInvariant0.model, function Model2.model = WatchesInvariantInternal0.model, + function Model0.model = ClausePostWithRegardsToInner0.model, function Model0.model = Invariant5.model, + function Model1.model = UnitAreSat0.model, function Model0.model = LitIdxIn0.model, + function Model1.model = Invariant7.model, function Model0.model = SatInner2.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = SatInner1.sat_inner + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model0.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with function Model0.model = Model0.model, - function Model1.model = Model1.model - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = Invariant3.invariant', - predicate Invariant1.invariant' = Invariant7.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant4.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicFormula_Impl1_SatInner as SatInner1 with function Model0.model = Model0.model, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_Equisat as Equisat0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model0.model, - function Model1.model = Model1.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model9.model, - function Model1.model = Model0.model, function Model2.model = Model1.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model4 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model0.model, - predicate Invariant0.invariant' = Invariant5.invariant', function Model1.model = Model1.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model4.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model0.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 with function Model0.model = Model6.model, - predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal + type a = Type.alloc_alloc_global, function Model0.model = LongArePostUnitInner0.model, + function Model0.model = InvariantMirror0.model, function Model0.model = Model4.model, + function Model3.model = InvariantNoDecisionMirror0.model, function Model1.model = WatchesInvariantInternal0.model, + function Model0.model = UnitAreSat0.model, function Model0.model = SatInner1.model, + function Model0.model = Invariant7.model, function Model0.model = LitNotInLessInner0.model, axiom . + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant', + predicate Invariant0.invariant' = Invariant4.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant5.invariant_internal + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant4.invariant' + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner1 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model2.model, axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model2.model = InvariantNoDecision0.model, + function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant6.model, + function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model3.model, - function Model1.model = Model2.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model3.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model3.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model5.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model2.model, - function Model1.model = Model3.model, predicate Invariant0.invariant' = Invariant4.invariant', - function Model2.model = Model5.model, function Model3.model = Model0.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant6.invariant', function Model0.model = Model3.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model5.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model2.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model5.model, function Model1.model = Model3.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = seq (Type.creusat_lit_lit) - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_lit_lit - clone CreusotContracts_Std1_Slice_Impl0_Model as Model10 with type t = Type.creusat_lit_lit, axiom . + type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = CrefsInRange0.invariant', + predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant2.watches_invariant_internal + clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model4 with function Model0.model = Invariant0.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_lit_lit, + type ModelTy0.modelTy = Model11.modelTy + clone CreusotContracts_Std1_Slice_Impl0_Model as Model10 with type t = Type.creusat_lit_lit, + function Model0.model = DerefMut0.model, function Model1.model = Swap0.model, function Model0.model = Model11.model, + axiom . clone CreusotContracts_Logic_Model_Impl1_Model as Model11 with type t = seq (Type.creusat_lit_lit), - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model10.model - clone Core_Slice_Impl0_Swap_Interface as Swap0 with type t = Type.creusat_lit_lit, - function Model0.model = Model11.model, function Model1.model = Model10.model - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_clause_clause + function Model0.model = Swap0.model clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_clause_clause - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula + clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause, + type Output0.output = IndexMut0.output + clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.creusat_clause_clause, + predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause, + predicate HasValue0.has_value = IndexMut0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause, + predicate InBounds0.in_bounds = IndexMut0.in_bounds + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = seq (Type.creusat_lit_lit) + clone Core_Slice_Impl0_Swap_Interface as Swap0 with type t = Type.creusat_lit_lit clone Alloc_Vec_Impl11_DerefMut_Interface as DerefMut0 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model10.model, function Model1.model = Model7.model + type a = Type.alloc_alloc_global + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_clause_clause clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.creusat_clause_clause, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - predicate ResolveElswhere0.resolve_elswhere = ResolveElswhere0.resolve_elswhere, type Output0.output = Output0.output - let rec cfg swap [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 66 0 66 91] (f : borrowed (Type.creusat_formula_formula)) (trail : Type.creusat_trail_trail) (watches : Type.creusat_watches_watches) (cref : usize) (j : usize) (k : usize) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 52 0 52 33] Invariant0.invariant' ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 53 0 53 39] Invariant1.invariant' trail ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 54 0 54 41] Invariant2.invariant' watches ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 55 0 55 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) >= 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 56 0 56 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 57 0 57 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) > UInt64.to_int j} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 58 0 58 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) > UInt64.to_int k} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 59 0 59 69] not SatInner0.sat_inner (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) 0) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 52 0 52 33] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 53 0 53 39] Invariant1.invariant' trail ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 54 0 54 41] Invariant2.invariant' watches ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 61 0 61 78] Permut.exchange (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref))) (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) (UInt64.to_int j) (UInt64.to_int k) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 62 0 62 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 63 0 63 55] Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) = Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 65 0 65 25] Equisat0.equisat ( * f) ( ^ f) } + type a = Type.alloc_alloc_global + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula + let rec cfg swap [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 66 0 66 91] (f : borrowed (Type.creusat_formula_formula)) (trail : Type.creusat_trail_trail) (watches : Type.creusat_watches_watches) (cref : usize) (j : usize) (k : usize) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 52 0 52 33] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 53 0 53 39] Invariant1.invariant' trail ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 54 0 54 41] Invariant2.invariant' watches ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 55 0 55 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) >= 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 56 0 56 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 57 0 57 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) > UInt64.to_int j} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 58 0 58 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) > UInt64.to_int k} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 59 0 59 69] not SatInner0.sat_inner (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) 0) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 52 0 52 33] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 53 0 53 39] Invariant1.invariant' trail ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 54 0 54 41] Invariant2.invariant' watches ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 61 0 61 78] Permut.exchange (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref))) (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) (UInt64.to_int j) (UInt64.to_int k) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 62 0 62 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 63 0 63 55] Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) = Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 65 0 65 25] Equisat0.equisat ( * f) ( ^ f) } = var _0 : (); @@ -18732,26 +18348,26 @@ module CreuSat_UnitProp_Swap } BB0 { _8 <- (); - old_f_7 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 67 16 67 28] f_1); + old_f_7 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 67 16 67 28] f_1); goto BB1 } BB1 { - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 68 4 68 67] NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 68 4 68 67] NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) }; _9 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 69 4 69 89] LongArePostUnitInner0.long_are_post_unit_inner (Model3.model (Type.creusat_trail_trail_Trail_trail trail_2)) ( * f_1) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail_2)) && true }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 69 4 69 89] LongArePostUnitInner0.long_are_post_unit_inner (Model3.model (Type.creusat_trail_trail_Trail_trail trail_2)) ( * f_1) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail_2)) && true }; _10 <- (); _16 <- borrow_mut (Type.creusat_formula_formula_Formula_clauses ( * f_1)); f_1 <- { f_1 with current = (let Type.CreuSat_Formula_Formula a b = * f_1 in Type.CreuSat_Formula_Formula ( ^ _16) b) }; assume { Resolve0.resolve f_1 }; _17 <- cref_4; - _15 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 71 4 71 19] IndexMut0.index_mut _16 _17); + _15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 71 4 71 19] IndexMut0.index_mut _16 _17); goto BB2 } BB2 { _14 <- borrow_mut (Type.creusat_clause_clause_Clause_lits ( * _15)); _15 <- { _15 with current = (let Type.CreuSat_Clause_Clause a b c d = * _15 in Type.CreuSat_Clause_Clause a b c ( ^ _14)) }; assume { Resolve1.resolve _15 }; - _13 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 71 4 71 35] DerefMut0.deref_mut _14); + _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 71 4 71 35] DerefMut0.deref_mut _14); goto BB3 } BB3 { @@ -18759,25 +18375,25 @@ module CreuSat_UnitProp_Swap _13 <- { _13 with current = ( ^ _12) }; _18 <- j_5; _19 <- k_6; - _11 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 71 4 71 35] Swap0.swap _12 _18 _19); + _11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 71 4 71 35] Swap0.swap _12 _18 _19); goto BB4 } BB4 { assume { Resolve2.resolve _13 }; - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 72 4 72 84] Permut.exchange (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * old_f_7))) (UInt64.to_int cref_4))) (UInt64.to_int j_5) (UInt64.to_int k_6) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 72 4 72 84] Permut.exchange (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * old_f_7))) (UInt64.to_int cref_4))) (UInt64.to_int j_5) (UInt64.to_int k_6) }; _20 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 73 4 77 6] forall i : (int) . 0 <= i && i < Seq.length (Model3.model (Type.creusat_trail_trail_Trail_trail trail_2)) -> match (Type.creusat_trail_step_Step_reason (Seq.get (Model3.model (Type.creusat_trail_trail_Trail_trail trail_2)) i)) with + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 73 4 77 6] forall i : (int) . 0 <= i && i < Seq.length (Model3.model (Type.creusat_trail_trail_Trail_trail trail_2)) -> match (Type.creusat_trail_step_Step_reason (Seq.get (Model3.model (Type.creusat_trail_trail_Trail_trail trail_2)) i)) with | Type.CreuSat_Trail_Reason_Long cref2 -> UInt64.to_int cref_4 <> UInt64.to_int cref2 | _ -> true end }; _21 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 78 4 78 73] VarsInRangeInner0.vars_in_range_inner (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f_1))) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 78 4 78 73] VarsInRangeInner0.vars_in_range_inner (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f_1))) }; _22 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 79 4 79 67] NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 79 4 79 67] NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) }; _23 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 80 4 80 81] LongArePostUnitInner0.long_are_post_unit_inner (Model3.model (Type.creusat_trail_trail_Trail_trail trail_2)) ( * f_1) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail_2)) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 80 4 80 81] LongArePostUnitInner0.long_are_post_unit_inner (Model3.model (Type.creusat_trail_trail_Trail_trail trail_2)) ( * f_1) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail_2)) }; _24 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 81 4 81 51] CrefsInRange0.crefs_in_range (Model3.model (Type.creusat_trail_trail_Trail_trail trail_2)) ( * f_1) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 81 4 81 51] CrefsInRange0.crefs_in_range (Model3.model (Type.creusat_trail_trail_Trail_trail trail_2)) ( * f_1) }; _25 <- (); _0 <- (); return _0 @@ -18791,6 +18407,7 @@ module CreuSat_Watches_UpdateWatch_Interface use mach.int.Int32 use seq.Seq use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant1.invariant_mirror clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model3 with type t = Type.creusat_watches_watcher, type a = Type.alloc_alloc_global, axiom . clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic_Interface as ToWatchidxLogic0 @@ -18800,22 +18417,20 @@ module CreuSat_Watches_UpdateWatch_Interface clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant1 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant1 with axiom . clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant0 val update_watch [@cfg:stackify] (f : Type.creusat_formula_formula) (trail : Type.creusat_trail_trail) (watches : borrowed (Type.creusat_watches_watches)) (cref : usize) (j : usize) (k : usize) (lit : Type.creusat_lit_lit) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 30 0 30 41] Invariant0.invariant' ( * watches) f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 31 0 31 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 32 0 32 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 33 0 33 26] Invariant1.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 34 0 34 32] Invariant2.invariant' trail f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 35 0 35 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 36 0 36 57] 0 <= UInt64.to_int k && UInt64.to_int k < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 37 0 37 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) >= 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 38 0 38 70] Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 30 0 30 41] Invariant0.invariant' ( ^ watches) f } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 30 0 30 41] Invariant0.invariant' ( * watches) f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 31 0 31 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 32 0 32 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 33 0 33 26] Invariant1.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 34 0 34 32] Invariant2.invariant' trail f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 35 0 35 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 36 0 36 57] 0 <= UInt64.to_int k && UInt64.to_int k < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 37 0 37 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) >= 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 38 0 38 70] Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 30 0 30 41] Invariant0.invariant' ( ^ watches) f } end module CreuSat_Watches_UpdateWatch @@ -18826,170 +18441,164 @@ module CreuSat_Watches_UpdateWatch use seq.Seq use Type use prelude.UInt8 - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model8 with function Model0.model = Model9.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with function Model0.model = Model8.model - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreuSat_Logic_LogicUtil_Pop as Pop0 with type t = Type.creusat_watches_watcher, axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = ToWatchidxLogic0.index_logic, + function IndexLogic0.index_logic = ToNegWatchidxLogic0.index_logic, + function IndexLogic0.index_logic = WatchValid0.index_logic, + function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = Invariant6.index_logic, function IndexLogic0.index_logic = SatInner0.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = ToWatchidxLogic0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = ToNegWatchidxLogic0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model7.model + type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model1.model = WatchValid0.model, + function Model2.model = WatchesInvariantInternal0.model, function Model1.model = InvariantMirror0.model, + function Model0.model = FormulaInvariant0.model, function Model0.model = Invariant3.model, + function Model1.model = UnitAreSat0.model, function Model0.model = LitIdxIn0.model, + function Model0.model = ClausePostWithRegardsToInner0.model, function Model1.model = Invariant7.model clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with function Model0.model = Model0.model, - function Model1.model = Model1.model - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model4 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicWatches_WatcherCrefsInRange as WatcherCrefsInRange0 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicWatches_LemmaPushMaintainsWatcherInvariant as LemmaPushMaintainsWatcherInvariant0 with predicate WatcherCrefsInRange0.watcher_crefs_in_range = WatcherCrefsInRange0.watcher_crefs_in_range, - function Model0.model = Model0.model, axiom . - clone CreuSat_Logic_LogicWatches_LemmaPopWatchMaintainsWatcherInvariant as LemmaPopWatchMaintainsWatcherInvariant0 with predicate WatcherCrefsInRange0.watcher_crefs_in_range = WatcherCrefsInRange0.watcher_crefs_in_range, - function Pop0.pop = Pop0.pop, axiom . + type a = Type.alloc_alloc_global, function Model0.model = WatcherCrefsInRange0.model, + function Model0.model = LemmaPushMaintainsWatcherInvariant0.model, function Model0.model = WatchValid0.model, + function Model1.model = WatchesInvariantInternal0.model, function Model0.model = InvariantMirror0.model, + function Model0.model = Model4.model, function Model3.model = InvariantNoDecisionMirror0.model, + function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model8.model, axiom . + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model8 with function Model2.model = InvariantNoDecision0.model, + function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant4.model, + function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant2.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model5.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model6.model, - function Model1.model = Model8.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model1.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner0.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model0.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model8.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model0.model, - function Model1.model = Model1.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with function Model0.model = Model1.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant3.invariant', - function Model0.model = Model1.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model0.model, - predicate Invariant0.invariant' = Invariant3.invariant', function Model1.model = Model1.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant1 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model4.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = Invariant6.invariant', - predicate Invariant1.invariant' = Invariant7.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model6.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model1.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model0.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model6.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model8.model, - function Model1.model = Model6.model, predicate Invariant0.invariant' = Invariant5.invariant', - function Model2.model = Model5.model, function Model3.model = Model0.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant4.invariant', function Model0.model = Model6.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model5.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model8.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model5.model, function Model1.model = Model6.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model3.model, - function Model1.model = Model0.model, function Model2.model = Model1.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicWatches_WatchValid as WatchValid0 with function Model0.model = Model0.model, - function Model1.model = Model1.model, function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic as ToNegWatchidxLogic0 with function IndexLogic0.index_logic = IndexLogic0.index_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic as ToWatchidxLogic0 with function IndexLogic0.index_logic = IndexLogic0.index_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic + type a = Type.alloc_alloc_global, function Model1.model = Invariant2.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant2.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant2.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant1.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model4 with function Model0.model = Invariant1.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant1.invariant_mirror + clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant0.watches_invariant_internal + clone CreuSat_Logic_LogicWatches_WatchValid as WatchValid0 + clone CreuSat_Logic_LogicWatches_WatcherCrefsInRange as WatcherCrefsInRange0 with predicate WatcherCrefsInRange0.watcher_crefs_in_range = LemmaPopWatchMaintainsWatcherInvariant0.watcher_crefs_in_range, + predicate WatcherCrefsInRange0.watcher_crefs_in_range = LemmaPushMaintainsWatcherInvariant0.watcher_crefs_in_range + clone CreuSat_Logic_LogicWatches_LemmaPushMaintainsWatcherInvariant as LemmaPushMaintainsWatcherInvariant0 with axiom . + clone CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic as ToNegWatchidxLogic0 + clone CreuSat_Logic_LogicUtil_Pop as Pop0 with type t = Type.creusat_watches_watcher, + function Pop0.pop = LemmaPopWatchMaintainsWatcherInvariant0.pop, axiom . + clone CreuSat_Logic_LogicWatches_LemmaPopWatchMaintainsWatcherInvariant as LemmaPopWatchMaintainsWatcherInvariant0 with axiom . + clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic as ToWatchidxLogic0 clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant0 with function Model0.model = Model2.model, - predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal + type a = Type.alloc_alloc_global, function Model0.model = Invariant0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant1 with axiom . + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant0 use mach.int.Int64 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_watches_watches - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy3 - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy2 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = seq (Type.creusat_watches_watcher) - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_watches_watcher - clone CreusotContracts_Std1_Slice_Impl0_Model as Model10 with type t = Type.creusat_watches_watcher, axiom . + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy3 with type ModelTy0.modelTy = Model13.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model as Model13 with type t = Type.creusat_clause_clause, + function Model0.model = Index2.model + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy2 with type ModelTy0.modelTy = Model12.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model as Model12 with type t = Type.creusat_formula_formula, + function Model0.model = Index1.model + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_watches_watcher, + type ModelTy0.modelTy = Model11.modelTy + clone CreusotContracts_Std1_Slice_Impl0_Model as Model10 with type t = Type.creusat_watches_watcher, + function Model0.model = DerefMut0.model, function Model1.model = Swap0.model, function Model0.model = Model11.model, + axiom . clone CreusotContracts_Logic_Model_Impl1_Model as Model11 with type t = seq (Type.creusat_watches_watcher), - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model10.model - clone Core_Slice_Impl0_Swap_Interface as Swap0 with type t = Type.creusat_watches_watcher, - function Model0.model = Model11.model, function Model1.model = Model10.model - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) + function Model0.model = Swap0.model + clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) + clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + type Output0.output = Index0.output, type Output0.output = IndexMut0.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + predicate HasValue0.has_value = Index0.has_value, predicate HasValue0.has_value = IndexMut0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + predicate InBounds0.in_bounds = Index0.in_bounds, predicate InBounds0.in_bounds = IndexMut0.in_bounds clone Alloc_Vec_Impl1_Push_Interface as Push0 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = Model3.model + type a = Type.alloc_alloc_global + clone CreuSat_Lit_Impl1_ToNegWatchidx_Interface as ToNegWatchidx0 + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_watches_watches clone Alloc_Vec_Impl1_Pop_Interface as Pop1 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = Model3.model + type a = Type.alloc_alloc_global + clone CreuSat_Clause_Impl0_Index_Interface as Index2 + clone CreuSat_Formula_Impl0_Index_Interface as Index1 + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = seq (Type.creusat_watches_watcher) + clone Core_Slice_Impl0_Swap_Interface as Swap0 with type t = Type.creusat_watches_watcher clone Alloc_Vec_Impl11_DerefMut_Interface as DerefMut0 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = Model10.model, function Model1.model = Model3.model - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = Model3.model - clone CreusotContracts_Logic_Model_Impl0_Model as Model13 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy3.modelTy, function Model0.model = Model1.model - clone CreuSat_Clause_Impl0_Index_Interface as Index2 with function Model0.model = Model13.model - clone CreusotContracts_Logic_Model_Impl0_Model as Model12 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy2.modelTy, function Model0.model = Model4.model - clone CreuSat_Formula_Impl0_Index_Interface as Index1 with function Model0.model = Model12.model - clone CreuSat_Lit_Impl1_ToNegWatchidx_Interface as ToNegWatchidx0 with function IndexLogic0.index_logic = IndexLogic0.index_logic, - function ToNegWatchidxLogic0.to_neg_watchidx_logic = ToNegWatchidxLogic0.to_neg_watchidx_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic - clone CreuSat_Lit_Impl1_ToWatchidx_Interface as ToWatchidx0 with function IndexLogic0.index_logic = IndexLogic0.index_logic, - function ToWatchidxLogic0.to_watchidx_logic = ToWatchidxLogic0.to_watchidx_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic + type a = Type.alloc_alloc_global + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type i = usize, type a = Type.alloc_alloc_global, function Model0.model = Model2.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - predicate ResolveElswhere0.resolve_elswhere = ResolveElswhere0.resolve_elswhere, type Output0.output = Output0.output + type i = usize, type a = Type.alloc_alloc_global + clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type i = usize, type a = Type.alloc_alloc_global, function Model0.model = Model2.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - type Output0.output = Output0.output - let rec cfg update_watch [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 39 0 39 113] (f : Type.creusat_formula_formula) (trail : Type.creusat_trail_trail) (watches : borrowed (Type.creusat_watches_watches)) (cref : usize) (j : usize) (k : usize) (lit : Type.creusat_lit_lit) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 30 0 30 41] Invariant0.invariant' ( * watches) f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 31 0 31 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 32 0 32 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 33 0 33 26] Invariant1.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 34 0 34 32] Invariant2.invariant' trail f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 35 0 35 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 36 0 36 57] 0 <= UInt64.to_int k && UInt64.to_int k < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 37 0 37 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) >= 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 38 0 38 70] Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 30 0 30 41] Invariant0.invariant' ( ^ watches) f } + type i = usize, type a = Type.alloc_alloc_global + clone CreuSat_Lit_Impl1_ToWatchidx_Interface as ToWatchidx0 + let rec cfg update_watch [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 39 0 39 113] (f : Type.creusat_formula_formula) (trail : Type.creusat_trail_trail) (watches : borrowed (Type.creusat_watches_watches)) (cref : usize) (j : usize) (k : usize) (lit : Type.creusat_lit_lit) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 30 0 30 41] Invariant0.invariant' ( * watches) f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 31 0 31 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 32 0 32 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 33 0 33 26] Invariant1.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 34 0 34 32] Invariant2.invariant' trail f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 35 0 35 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 36 0 36 57] 0 <= UInt64.to_int k && UInt64.to_int k < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 37 0 37 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) >= 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 38 0 38 70] Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 30 0 30 41] Invariant0.invariant' ( ^ watches) f } = var _0 : (); @@ -19068,33 +18677,33 @@ module CreuSat_Watches_UpdateWatch } BB0 { _9 <- lit_7; - watchidx_8 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 40 19 40 36] ToWatchidx0.to_watchidx _9); + watchidx_8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 40 19 40 36] ToWatchidx0.to_watchidx _9); goto BB1 } BB1 { _14 <- Type.creusat_watches_watches_Watches_watches ( * watches_3); _15 <- watchidx_8; - _13 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 41 14 41 39] Index0.index _14 _15); + _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 41 14 41 39] Index0.index _14 _15); goto BB2 } BB2 { _12 <- _13; - _11 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 41 14 41 45] Len0.len _12); + _11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 41 14 41 45] Len0.len _12); goto BB3 } BB3 { - end'_10 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 41 14 41 49] _11 - (1 : usize)); + end'_10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 41 14 41 49] _11 - (1 : usize)); _21 <- borrow_mut (Type.creusat_watches_watches_Watches_watches ( * watches_3)); watches_3 <- { watches_3 with current = (let Type.CreuSat_Watches_Watches a = * watches_3 in Type.CreuSat_Watches_Watches ( ^ _21)) }; _22 <- watchidx_8; - _20 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 42 4 42 29] IndexMut0.index_mut _21 _22); + _20 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 42 4 42 29] IndexMut0.index_mut _21 _22); goto BB4 } BB4 { _19 <- borrow_mut ( * _20); _20 <- { _20 with current = ( ^ _19) }; assume { Resolve0.resolve _20 }; - _18 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 42 4 42 42] DerefMut0.deref_mut _19); + _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 42 4 42 42] DerefMut0.deref_mut _19); goto BB5 } BB5 { @@ -19102,43 +18711,43 @@ module CreuSat_Watches_UpdateWatch _18 <- { _18 with current = ( ^ _17) }; _23 <- j_5; _24 <- end'_10; - _16 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 42 4 42 42] Swap0.swap _17 _23 _24); + _16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 42 4 42 42] Swap0.swap _17 _23 _24); goto BB6 } BB6 { assume { Resolve1.resolve _18 }; _29 <- f_1; _30 <- cref_4; - _28 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 43 19 43 26] Index1.index _29 _30); + _28 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 43 19 43 26] Index1.index _29 _30); goto BB7 } BB7 { _27 <- _28; _31 <- k_6; - _26 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 43 19 43 29] Index2.index _27 _31); + _26 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 43 19 43 29] Index2.index _27 _31); goto BB8 } BB8 { curr_lit_25 <- _26; - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 44 4 44 55] UInt64.to_int watchidx_8 < Seq.length (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 44 4 44 55] UInt64.to_int watchidx_8 < Seq.length (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) }; _32 <- (); _34 <- (); - old_w_33 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 45 16 45 31] watches_3); + old_w_33 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 45 16 45 31] watches_3); goto BB9 } BB9 { - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 46 4 46 77] WatcherCrefsInRange0.watcher_crefs_in_range (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) (UInt64.to_int watchidx_8))) f_1 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 46 4 46 77] WatcherCrefsInRange0.watcher_crefs_in_range (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) (UInt64.to_int watchidx_8))) f_1 }; _35 <- (); _39 <- borrow_mut (Type.creusat_watches_watches_Watches_watches ( * watches_3)); watches_3 <- { watches_3 with current = (let Type.CreuSat_Watches_Watches a = * watches_3 in Type.CreuSat_Watches_Watches ( ^ _39)) }; _40 <- watchidx_8; - _38 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 47 10 47 35] IndexMut0.index_mut _39 _40); + _38 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 47 10 47 35] IndexMut0.index_mut _39 _40); goto BB10 } BB10 { _37 <- borrow_mut ( * _38); _38 <- { _38 with current = ( ^ _37) }; - _36 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 47 10 47 41] Pop1.pop _37); + _36 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 47 10 47 41] Pop1.pop _37); goto BB11 } BB11 { @@ -19158,24 +18767,24 @@ module CreuSat_Watches_UpdateWatch } BB14 { w_42 <- Type.core_option_option_Some_0 _36; - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 49 12 49 110] let _ = LemmaPopWatchMaintainsWatcherInvariant0.lemma_pop_watch_maintains_watcher_invariant (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * old_w_33))) (UInt64.to_int watchidx_8))) f_1 in true }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 49 12 49 110] let _ = LemmaPopWatchMaintainsWatcherInvariant0.lemma_pop_watch_maintains_watcher_invariant (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * old_w_33))) (UInt64.to_int watchidx_8))) f_1 in true }; _43 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 50 12 50 94] Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) (UInt64.to_int watchidx_8)) = Pop0.pop (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * old_w_33))) (UInt64.to_int watchidx_8))) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 50 12 50 94] Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) (UInt64.to_int watchidx_8)) = Pop0.pop (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * old_w_33))) (UInt64.to_int watchidx_8))) }; _44 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 51 12 51 85] WatcherCrefsInRange0.watcher_crefs_in_range (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) (UInt64.to_int watchidx_8))) f_1 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 51 12 51 85] WatcherCrefsInRange0.watcher_crefs_in_range (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) (UInt64.to_int watchidx_8))) f_1 }; _45 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 52 12 52 48] Invariant0.invariant' ( * watches_3) f_1 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 52 12 52 48] Invariant0.invariant' ( * watches_3) f_1 }; _46 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 53 12 53 86] ToNegWatchidxLogic0.to_neg_watchidx_logic curr_lit_25 < Seq.length (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 53 12 53 86] ToNegWatchidxLogic0.to_neg_watchidx_logic curr_lit_25 < Seq.length (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) }; _47 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 54 12 54 108] WatcherCrefsInRange0.watcher_crefs_in_range (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) (ToNegWatchidxLogic0.to_neg_watchidx_logic curr_lit_25))) f_1 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 54 12 54 108] WatcherCrefsInRange0.watcher_crefs_in_range (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) (ToNegWatchidxLogic0.to_neg_watchidx_logic curr_lit_25))) f_1 }; _48 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 55 12 55 55] UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref w_42) < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f_1)) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 55 12 55 55] UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref w_42) < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f_1)) }; _49 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 56 12 56 133] let _ = LemmaPushMaintainsWatcherInvariant0.lemma_push_maintains_watcher_invariant (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) (ToNegWatchidxLogic0.to_neg_watchidx_logic curr_lit_25))) f_1 w_42 in true }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 56 12 56 133] let _ = LemmaPushMaintainsWatcherInvariant0.lemma_push_maintains_watcher_invariant (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) (ToNegWatchidxLogic0.to_neg_watchidx_logic curr_lit_25))) f_1 w_42 in true }; _50 <- (); _52 <- curr_lit_25; - watch_lit_51 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 58 28 58 54] ToNegWatchidx0.to_neg_watchidx _52); + watch_lit_51 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 58 28 58 54] ToNegWatchidx0.to_neg_watchidx _52); goto BB15 } BB15 { @@ -19183,23 +18792,23 @@ module CreuSat_Watches_UpdateWatch watches_3 <- { watches_3 with current = (let Type.CreuSat_Watches_Watches a = * watches_3 in Type.CreuSat_Watches_Watches ( ^ _56)) }; assume { Resolve2.resolve watches_3 }; _57 <- watch_lit_51; - _55 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 59 12 59 38] IndexMut0.index_mut _56 _57); + _55 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 59 12 59 38] IndexMut0.index_mut _56 _57); goto BB16 } BB16 { _54 <- borrow_mut ( * _55); _55 <- { _55 with current = ( ^ _54) }; _58 <- w_42; - _53 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 59 12 59 46] Push0.push _54 _58); + _53 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 59 12 59 46] Push0.push _54 _58); goto BB17 } BB17 { assume { Resolve0.resolve _55 }; - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 61 12 61 77] WatchValid0.watch_valid (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) (UInt64.to_int watch_lit_51))) f_1 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 61 12 61 77] WatchValid0.watch_valid (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) (UInt64.to_int watch_lit_51))) f_1 }; _59 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 62 12 62 108] WatcherCrefsInRange0.watcher_crefs_in_range (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) (ToNegWatchidxLogic0.to_neg_watchidx_logic curr_lit_25))) f_1 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 62 12 62 108] WatcherCrefsInRange0.watcher_crefs_in_range (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) (ToNegWatchidxLogic0.to_neg_watchidx_logic curr_lit_25))) f_1 }; _60 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 63 12 63 48] Invariant0.invariant' ( * watches_3) f_1 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 63 12 63 48] Invariant0.invariant' ( * watches_3) f_1 }; _61 <- (); _0 <- (); return _0 @@ -19213,8 +18822,9 @@ module CreuSat_UnitProp_CheckAndMoveWatch_Interface use mach.int.Int32 use seq.Seq use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror clone CreuSat_Logic_LogicLit_Impl1_Unsat_Interface as Unsat0 - clone CreuSat_Logic_LogicFormula_Impl1_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model4 with type t = Type.creusat_watches_watcher, type a = Type.alloc_alloc_global, axiom . clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic_Interface as ToWatchidxLogic0 @@ -19228,27 +18838,25 @@ module CreuSat_UnitProp_CheckAndMoveWatch_Interface clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val check_and_move_watch [@cfg:stackify] (f : borrowed (Type.creusat_formula_formula)) (trail : Type.creusat_trail_trail) (watches : borrowed (Type.creusat_watches_watches)) (cref : usize) (j : usize) (k : usize) (lit : Type.creusat_lit_lit) : bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 16 0 16 33] Invariant0.invariant' ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 17 0 17 36] Invariant1.invariant' trail ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 18 0 18 44] Invariant2.invariant' ( * watches) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 19 0 19 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 20 0 20 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 21 0 21 69] not SatInner0.sat_inner (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) 0) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 22 0 22 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 23 0 23 57] 2 <= UInt64.to_int k && UInt64.to_int k < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 24 0 24 70] Seq.length (Model4.model (Seq.get (Model3.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 16 0 16 33] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 17 0 17 36] Invariant1.invariant' trail ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 18 0 18 44] Invariant2.invariant' ( ^ watches) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 25 0 25 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 26 0 26 25] Equisat0.equisat ( * f) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 27 0 27 55] Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) = Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 28 0 28 114] not result -> Unsat0.unsat (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref))) (UInt64.to_int k)) (Type.creusat_trail_trail_Trail_assignments trail) && ^ f = * f && * watches = ^ watches } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 29 0 29 75] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref))) = Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 16 0 16 33] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 17 0 17 36] Invariant1.invariant' trail ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 18 0 18 44] Invariant2.invariant' ( * watches) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 19 0 19 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 20 0 20 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 21 0 21 69] not SatInner0.sat_inner (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) 0) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 22 0 22 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 23 0 23 57] 2 <= UInt64.to_int k && UInt64.to_int k < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 24 0 24 70] Seq.length (Model4.model (Seq.get (Model3.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 16 0 16 33] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 17 0 17 36] Invariant1.invariant' trail ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 18 0 18 44] Invariant2.invariant' ( ^ watches) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 25 0 25 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 26 0 26 25] Equisat0.equisat ( * f) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 27 0 27 55] Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) = Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 28 0 28 114] not result -> Unsat0.unsat (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref))) (UInt64.to_int k)) (Type.creusat_trail_trail_Trail_assignments trail) && ^ f = * f && * watches = ^ watches } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 29 0 29 75] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref))) = Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) } end module CreuSat_UnitProp_CheckAndMoveWatch @@ -19259,160 +18867,144 @@ module CreuSat_UnitProp_CheckAndMoveWatch use seq.Seq use Type use prelude.UInt8 - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model0.model = Model9.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with function Model0.model = Model2.model + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = SatInner0.index_logic, + function IndexLogic0.index_logic = ToWatchidxLogic0.index_logic, + function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = Invariant6.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = ToWatchidxLogic0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, + predicate SatInner0.sat_inner = SatInner2.sat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model8.model + type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model1.model = InvariantMirror0.model, + function Model0.model = FormulaInvariant0.model, function Model2.model = WatchesInvariantInternal0.model, + function Model0.model = Invariant3.model, function Model1.model = UnitAreSat0.model, + function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, + function Model1.model = Invariant7.model, function Model0.model = SatInner2.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = SatInner1.sat_inner + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with function Model0.model = Model0.model, - function Model1.model = Model1.model - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model5 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with function Model0.model = Model1.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant3.invariant', - function Model0.model = Model1.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model0.model, - predicate Invariant0.invariant' = Invariant3.invariant', function Model1.model = Model1.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model5.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = Invariant6.invariant', - predicate Invariant1.invariant' = Invariant7.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model1.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model0.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat0 with function Model0.model = Model2.model, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model4.model, - function Model1.model = Model0.model, function Model2.model = Model1.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic as ToWatchidxLogic0 with function IndexLogic0.index_logic = IndexLogic0.index_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with function Model0.model = Model1.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_SatInner as SatInner1 with function Model0.model = Model0.model, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_Equisat as Equisat0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model1.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner0.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model0.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model2.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model0.model, - function Model1.model = Model1.model, predicate Sat0.sat = Sat0.sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 with function Model0.model = Model3.model, - predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal + type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, + function Model0.model = Model5.model, function Model3.model = InvariantNoDecisionMirror0.model, + function Model1.model = WatchesInvariantInternal0.model, function Model0.model = LongArePostUnitInner0.model, + function Model0.model = UnitAreSat0.model, function Model0.model = SatInner1.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner, + predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal + clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner1 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model2.model, axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model0.model = Unsat0.model, + function Model2.model = InvariantNoDecision0.model, function Model0.model = InvariantNoDecisionMirror0.model, + function Model0.model = Invariant4.model, function Model1.model = TrailEntriesAreAssigned0.model, + function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model7.model, - function Model1.model = Model2.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model7.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model7.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model6.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model2.model, - function Model1.model = Model7.model, predicate Invariant0.invariant' = Invariant5.invariant', - function Model2.model = Model6.model, function Model3.model = Model0.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant4.invariant', function Model0.model = Model7.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model6.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model2.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model6.model, function Model1.model = Model7.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_watches_watches - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy2 - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 + type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant2.watches_invariant_internal + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model5 with function Model0.model = Invariant0.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 + clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic as ToWatchidxLogic0 + clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy2 with type ModelTy0.modelTy = Model12.modelTy clone CreusotContracts_Logic_Model_Impl0_Model as Model12 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy2.modelTy, function Model0.model = Model2.model + function Model0.model = LitUnsat0.model + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model11.modelTy clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model1.model - clone CreuSat_Clause_Impl0_Index_Interface as Index1 with function Model0.model = Model11.model + function Model0.model = Index1.model + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model10.modelTy clone CreusotContracts_Logic_Model_Impl0_Model as Model10 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model5.model - clone CreuSat_Formula_Impl0_Index_Interface as Index0 with function Model0.model = Model10.model - clone CreuSat_Lit_Impl1_Index_Interface as Index2 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Lit_Impl1_LitUnsat_Interface as LitUnsat0 with function Model0.model = Model12.model, - predicate Invariant0.invariant' = Invariant6.invariant', predicate Unsat0.unsat = Unsat0.unsat - clone CreuSat_Watches_UpdateWatch_Interface as UpdateWatch0 with predicate Invariant0.invariant' = Invariant2.invariant', - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate Invariant1.invariant' = Invariant0.invariant', - predicate Invariant2.invariant' = Invariant1.invariant', function Model0.model = Model0.model, - function Model1.model = Model1.model, function Model2.model = Model3.model, - function ToWatchidxLogic0.to_watchidx_logic = ToWatchidxLogic0.to_watchidx_logic, - function Model3.model = Model4.model, predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_UnitProp_Swap_Interface as Swap0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant1.invariant', predicate Invariant2.invariant' = Invariant2.invariant', - function Model0.model = Model0.model, function Model1.model = Model1.model, function Model2.model = Model2.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner, predicate Equisat0.equisat = Equisat0.equisat, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - let rec cfg check_and_move_watch [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 30 0 32 9] (f : borrowed (Type.creusat_formula_formula)) (trail : Type.creusat_trail_trail) (watches : borrowed (Type.creusat_watches_watches)) (cref : usize) (j : usize) (k : usize) (lit : Type.creusat_lit_lit) : bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 16 0 16 33] Invariant0.invariant' ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 17 0 17 36] Invariant1.invariant' trail ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 18 0 18 44] Invariant2.invariant' ( * watches) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 19 0 19 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 20 0 20 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 21 0 21 69] not SatInner0.sat_inner (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) 0) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 22 0 22 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 23 0 23 57] 2 <= UInt64.to_int k && UInt64.to_int k < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 24 0 24 70] Seq.length (Model4.model (Seq.get (Model3.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 16 0 16 33] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 17 0 17 36] Invariant1.invariant' trail ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 18 0 18 44] Invariant2.invariant' ( ^ watches) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 25 0 25 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 26 0 26 25] Equisat0.equisat ( * f) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 27 0 27 55] Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) = Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 28 0 28 114] not result -> Unsat0.unsat (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref))) (UInt64.to_int k)) (Type.creusat_trail_trail_Trail_assignments trail) && ^ f = * f && * watches = ^ watches } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 29 0 29 75] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref))) = Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) } + function Model0.model = Index0.model + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_watches_watches + clone CreuSat_Watches_UpdateWatch_Interface as UpdateWatch0 + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula + clone CreuSat_UnitProp_Swap_Interface as Swap0 + clone CreuSat_Lit_Impl1_Index_Interface as Index2 + clone CreuSat_Lit_Impl1_LitUnsat_Interface as LitUnsat0 + clone CreuSat_Clause_Impl0_Index_Interface as Index1 + clone CreuSat_Formula_Impl0_Index_Interface as Index0 + let rec cfg check_and_move_watch [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 30 0 32 9] (f : borrowed (Type.creusat_formula_formula)) (trail : Type.creusat_trail_trail) (watches : borrowed (Type.creusat_watches_watches)) (cref : usize) (j : usize) (k : usize) (lit : Type.creusat_lit_lit) : bool + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 16 0 16 33] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 17 0 17 36] Invariant1.invariant' trail ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 18 0 18 44] Invariant2.invariant' ( * watches) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 19 0 19 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 20 0 20 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 21 0 21 69] not SatInner0.sat_inner (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) 0) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 22 0 22 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 23 0 23 57] 2 <= UInt64.to_int k && UInt64.to_int k < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 24 0 24 70] Seq.length (Model4.model (Seq.get (Model3.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 16 0 16 33] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 17 0 17 36] Invariant1.invariant' trail ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 18 0 18 44] Invariant2.invariant' ( ^ watches) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 25 0 25 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 26 0 26 25] Equisat0.equisat ( * f) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 27 0 27 55] Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) = Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 28 0 28 114] not result -> Unsat0.unsat (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref))) (UInt64.to_int k)) (Type.creusat_trail_trail_Trail_assignments trail) && ^ f = * f && * watches = ^ watches } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 29 0 29 75] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref))) = Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) } = var _0 : bool; @@ -19493,13 +19085,13 @@ module CreuSat_UnitProp_CheckAndMoveWatch BB0 { _13 <- * f_1; _14 <- cref_4; - _12 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 33 19 33 26] Index0.index _13 _14); + _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 33 19 33 26] Index0.index _13 _14); goto BB1 } BB1 { _11 <- _12; _15 <- k_6; - _10 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 33 19 33 29] Index1.index _11 _15); + _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 33 19 33 29] Index1.index _11 _15); goto BB2 } BB2 { @@ -19507,7 +19099,7 @@ module CreuSat_UnitProp_CheckAndMoveWatch _19 <- curr_lit_9; _21 <- Type.creusat_trail_trail_Trail_assignments trail_2; _20 <- _21; - _18 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 34 8 34 46] LitUnsat0.lit_unsat _19 _20); + _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 34 8 34 46] LitUnsat0.lit_unsat _19 _20); goto BB3 } BB3 { @@ -19520,26 +19112,26 @@ module CreuSat_UnitProp_CheckAndMoveWatch BB4 { _30 <- * f_1; _31 <- cref_4; - _29 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 36 11 36 18] Index0.index _30 _31); + _29 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 36 11 36 18] Index0.index _30 _31); goto BB5 } BB5 { _28 <- _29; - _27 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 36 11 36 21] Index1.index _28 (0 : usize)); + _27 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 36 11 36 21] Index1.index _28 (0 : usize)); goto BB6 } BB6 { _26 <- _27; - _25 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 36 11 36 29] Index2.index _26); + _25 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 36 11 36 29] Index2.index _26); goto BB7 } BB7 { _33 <- lit_7; - _32 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 36 33 36 44] Index2.index _33); + _32 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 36 33 36 44] Index2.index _33); goto BB8 } BB8 { - _24 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 36 11 36 44] _25 = _32); + _24 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 36 11 36 44] _25 = _32); switch (_24) | False -> goto BB12 | _ -> goto BB9 @@ -19552,7 +19144,7 @@ module CreuSat_UnitProp_CheckAndMoveWatch _37 <- * watches_3; _38 <- cref_4; _39 <- k_6; - _34 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 38 12 38 47] Swap0.swap _35 _36 _37 _38 _39 (0 : usize)); + _34 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 38 12 38 47] Swap0.swap _35 _36 _37 _38 _39 (0 : usize)); goto BB10 } BB10 { @@ -19564,7 +19156,7 @@ module CreuSat_UnitProp_CheckAndMoveWatch _44 <- cref_4; _45 <- j_5; _46 <- lit_7; - _40 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 39 12 39 60] UpdateWatch0.update_watch _41 _42 _43 _44 _45 (0 : usize) _46); + _40 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 39 12 39 60] UpdateWatch0.update_watch _41 _42 _43 _44 _45 (0 : usize) _46); goto BB11 } BB11 { @@ -19579,7 +19171,7 @@ module CreuSat_UnitProp_CheckAndMoveWatch _50 <- * watches_3; _51 <- cref_4; _52 <- k_6; - _47 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 41 12 41 47] Swap0.swap _48 _49 _50 _51 _52 (1 : usize)); + _47 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 41 12 41 47] Swap0.swap _48 _49 _50 _51 _52 (1 : usize)); goto BB13 } BB13 { @@ -19588,7 +19180,7 @@ module CreuSat_UnitProp_CheckAndMoveWatch _55 <- trail_2; _56 <- * watches_3; _57 <- cref_4; - _53 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 42 12 42 47] Swap0.swap _54 _55 _56 _57 (1 : usize) (0 : usize)); + _53 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 42 12 42 47] Swap0.swap _54 _55 _56 _57 (1 : usize) (0 : usize)); goto BB14 } BB14 { @@ -19600,7 +19192,7 @@ module CreuSat_UnitProp_CheckAndMoveWatch _62 <- cref_4; _63 <- j_5; _64 <- lit_7; - _58 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 44 12 44 60] UpdateWatch0.update_watch _59 _60 _61 _62 _63 (0 : usize) _64); + _58 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 44 12 44 60] UpdateWatch0.update_watch _59 _60 _61 _62 _63 (0 : usize) _64); goto BB15 } BB15 { @@ -19631,7 +19223,8 @@ module CreuSat_UnitProp_ExistsNewWatchableLit_Interface use mach.int.Int32 use seq.Seq use Type - clone CreuSat_Logic_LogicFormula_Impl1_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 clone CreuSat_Logic_LogicLit_Impl1_Unsat_Interface as Unsat0 clone CreuSat_Logic_LogicLit_Impl1_SatInner_Interface as SatInner0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model4 @@ -19646,28 +19239,26 @@ module CreuSat_UnitProp_ExistsNewWatchableLit_Interface clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic_Interface as ToWatchidxLogic0 clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val exists_new_watchable_lit [@cfg:stackify] (f : borrowed (Type.creusat_formula_formula)) (trail : Type.creusat_trail_trail) (watches : borrowed (Type.creusat_watches_watches)) (cref : usize) (j : usize) (lit : Type.creusat_lit_lit) : bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 86 0 86 33] Invariant0.invariant' ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 87 0 87 38] Invariant1.invariant' trail ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 88 0 88 44] Invariant2.invariant' ( * watches) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 89 0 89 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 90 0 90 63] ToWatchidxLogic0.to_watchidx_logic lit < Seq.length (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 91 0 91 70] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 92 0 92 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 93 0 93 39] UInt64.to_int cref < Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 94 0 94 46] Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) >= 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 95 0 95 69] not SatInner0.sat_inner (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) 0) (Model4.model (Type.creusat_trail_trail_Trail_assignments trail))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 86 0 86 33] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 87 0 87 38] Invariant1.invariant' trail ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 88 0 88 44] Invariant2.invariant' ( ^ watches) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 96 0 96 136] not result -> (forall m : (int) . 2 <= m && m < Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) -> Unsat0.unsat (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) m) (Type.creusat_trail_trail_Trail_assignments trail)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 97 0 97 75] not result -> Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref)) = Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 98 0 98 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 99 0 99 55] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 100 0 100 25] Equisat0.equisat ( * f) ( ^ f) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 86 0 86 33] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 87 0 87 38] Invariant1.invariant' trail ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 88 0 88 44] Invariant2.invariant' ( * watches) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 89 0 89 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 90 0 90 63] ToWatchidxLogic0.to_watchidx_logic lit < Seq.length (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 91 0 91 70] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 92 0 92 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 93 0 93 39] UInt64.to_int cref < Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 94 0 94 46] Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) >= 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 95 0 95 69] not SatInner0.sat_inner (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) 0) (Model4.model (Type.creusat_trail_trail_Trail_assignments trail))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 86 0 86 33] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 87 0 87 38] Invariant1.invariant' trail ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 88 0 88 44] Invariant2.invariant' ( ^ watches) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 96 0 96 136] not result -> (forall m : (int) . 2 <= m && m < Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) -> Unsat0.unsat (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) m) (Type.creusat_trail_trail_Trail_assignments trail)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 97 0 97 75] not result -> Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref)) = Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 98 0 98 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 99 0 99 55] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 100 0 100 25] Equisat0.equisat ( * f) ( ^ f) } end module CreuSat_UnitProp_ExistsNewWatchableLit @@ -19678,170 +19269,157 @@ module CreuSat_UnitProp_ExistsNewWatchableLit use seq.Seq use Type use prelude.UInt8 - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model4 with function Model0.model = Model9.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with function Model0.model = Model4.model + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = ToWatchidxLogic0.index_logic, + function IndexLogic0.index_logic = SatInner0.index_logic, + function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = Invariant6.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant3.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = ToWatchidxLogic0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, + predicate SatInner0.sat_inner = SatInner2.sat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model3 with function Model0.model = Model8.model + type a = Type.alloc_alloc_global, function Model0.model = Model3.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model3 with function Model1.model = InvariantMirror0.model, + function Model0.model = FormulaInvariant0.model, function Model2.model = WatchesInvariantInternal0.model, + function Model0.model = Invariant4.model, function Model1.model = UnitAreSat0.model, + function Model0.model = LitIdxIn0.model, function Model1.model = Invariant7.model, + function Model0.model = ClausePostWithRegardsToInner0.model, function Model0.model = SatInner2.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = SatInner1.sat_inner + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner, + predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with function Model0.model = Model2.model, - function Model1.model = Model3.model - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model6 with function Model0.model = Model2.model + type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, + function Model0.model = Model6.model, function Model3.model = InvariantNoDecisionMirror0.model, + function Model1.model = WatchesInvariantInternal0.model, function Model0.model = LongArePostUnitInner0.model, + function Model0.model = UnitAreSat0.model, function Model0.model = SatInner1.model, + function Model0.model = Invariant7.model, function Model0.model = LitNotInLessInner0.model, axiom . + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant4.invariant_internal + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant3.invariant' + clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner1 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model4.model, axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model4 with function Model0.model = Unsat0.model, + function Model2.model = InvariantNoDecision0.model, function Model0.model = InvariantNoDecisionMirror0.model, + function Model0.model = Invariant5.model, function Model1.model = TrailEntriesAreAssigned0.model, + function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted + clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = CrefsInRange0.invariant', + predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with function Model0.model = Model3.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant4.invariant', - function Model0.model = Model3.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model2.model, - predicate Invariant0.invariant' = Invariant4.invariant', function Model1.model = Model3.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model6.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = Invariant6.invariant', - predicate Invariant1.invariant' = Invariant7.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant3.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model3.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model2.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat0 with function Model0.model = Model4.model, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model1.model, - function Model1.model = Model2.model, function Model2.model = Model3.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with function Model0.model = Model3.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_SatInner as SatInner1 with function Model0.model = Model2.model, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_Equisat as Equisat0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model3.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner0.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model2.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model4.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model2.model, - function Model1.model = Model3.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic as ToWatchidxLogic0 with function IndexLogic0.index_logic = IndexLogic0.index_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic + type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant2.watches_invariant_internal + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model6 with function Model0.model = Invariant0.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 + clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat0 clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 with function Model0.model = Model0.model, - predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model5.model, - function Model1.model = Model4.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model5.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model5.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model7.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model4.model, - function Model1.model = Model5.model, predicate Invariant0.invariant' = Invariant3.invariant', - function Model2.model = Model7.model, function Model3.model = Model2.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant5.invariant', function Model0.model = Model5.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model7.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model4.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model7.model, function Model1.model = Model5.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . + clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic as ToWatchidxLogic0 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . + clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.creusat_clause_clause, + predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere + clone CreuSat_Util_MaxLog as MaxLog0 with function MaxLog0.max_log = Max0.max_log + clone CreuSat_Util_MinLog as MinLog0 with function MinLog0.min_log = Min0.min_log + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy2 with type ModelTy0.modelTy = Model11.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_formula_formula, + function Model0.model = Index1.model + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model10.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model as Model10 with type t = Type.creusat_clause_clause, + function Model0.model = Len0.model + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_clause_clause + clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause, + type Output0.output = Index0.output, type Output0.output = IndexMut0.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause, + predicate HasValue0.has_value = Index0.has_value, predicate HasValue0.has_value = IndexMut0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause, + predicate InBounds0.in_bounds = Index0.in_bounds, predicate InBounds0.in_bounds = IndexMut0.in_bounds clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.creusat_clause_clause + clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.creusat_clause_clause, type i = usize, + type a = Type.alloc_alloc_global clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_formula_formula clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_watches_watches - clone CreuSat_Util_MaxLog as MaxLog0 - clone CreuSat_Util_Max_Interface as Max0 with function MaxLog0.max_log = MaxLog0.max_log - clone CreuSat_Util_MinLog as MinLog0 - clone CreuSat_Util_Min_Interface as Min0 with function MinLog0.min_log = MinLog0.min_log - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy2 - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_clause_clause - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Logic_Model_Impl0_Model as Model10 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model3.model - clone CreuSat_Clause_Impl3_Len_Interface as Len0 with function Model0.model = Model10.model - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.creusat_clause_clause, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model2.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - predicate ResolveElswhere0.resolve_elswhere = ResolveElswhere0.resolve_elswhere, type Output0.output = Output0.output + clone CreuSat_UnitProp_CheckAndMoveWatch_Interface as CheckAndMoveWatch0 + clone CreuSat_Util_Max_Interface as Max0 + clone CreuSat_Util_Min_Interface as Min0 + clone CreuSat_Formula_Impl0_Index_Interface as Index1 + clone CreuSat_Clause_Impl3_Len_Interface as Len0 clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.creusat_clause_clause, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model2.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - type Output0.output = Output0.output - clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy2.modelTy, function Model0.model = Model6.model - clone CreuSat_Formula_Impl0_Index_Interface as Index1 with function Model0.model = Model11.model - clone CreuSat_UnitProp_CheckAndMoveWatch_Interface as CheckAndMoveWatch0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant1.invariant', predicate Invariant2.invariant' = Invariant2.invariant', - function IndexLogic0.index_logic = IndexLogic0.index_logic, function Model0.model = Model2.model, - function Model1.model = Model3.model, function Model2.model = Model4.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner, function Model3.model = Model0.model, - function ToWatchidxLogic0.to_watchidx_logic = ToWatchidxLogic0.to_watchidx_logic, - function Model4.model = Model1.model, predicate Equisat0.equisat = Equisat0.equisat, - predicate Unsat0.unsat = Unsat0.unsat, predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - let rec cfg exists_new_watchable_lit [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 101 0 103 9] (f : borrowed (Type.creusat_formula_formula)) (trail : Type.creusat_trail_trail) (watches : borrowed (Type.creusat_watches_watches)) (cref : usize) (j : usize) (lit : Type.creusat_lit_lit) : bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 86 0 86 33] Invariant0.invariant' ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 87 0 87 38] Invariant1.invariant' trail ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 88 0 88 44] Invariant2.invariant' ( * watches) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 89 0 89 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 90 0 90 63] ToWatchidxLogic0.to_watchidx_logic lit < Seq.length (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 91 0 91 70] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 92 0 92 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 93 0 93 39] UInt64.to_int cref < Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 94 0 94 46] Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) >= 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 95 0 95 69] not SatInner0.sat_inner (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) 0) (Model4.model (Type.creusat_trail_trail_Trail_assignments trail))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 86 0 86 33] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 87 0 87 38] Invariant1.invariant' trail ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 88 0 88 44] Invariant2.invariant' ( ^ watches) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 96 0 96 136] not result -> (forall m : (int) . 2 <= m && m < Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) -> Unsat0.unsat (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) m) (Type.creusat_trail_trail_Trail_assignments trail)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 97 0 97 75] not result -> Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref)) = Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 98 0 98 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 99 0 99 55] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 100 0 100 25] Equisat0.equisat ( * f) ( ^ f) } + type a = Type.alloc_alloc_global + let rec cfg exists_new_watchable_lit [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 101 0 103 9] (f : borrowed (Type.creusat_formula_formula)) (trail : Type.creusat_trail_trail) (watches : borrowed (Type.creusat_watches_watches)) (cref : usize) (j : usize) (lit : Type.creusat_lit_lit) : bool + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 86 0 86 33] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 87 0 87 38] Invariant1.invariant' trail ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 88 0 88 44] Invariant2.invariant' ( * watches) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 89 0 89 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 90 0 90 63] ToWatchidxLogic0.to_watchidx_logic lit < Seq.length (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 91 0 91 70] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 92 0 92 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 93 0 93 39] UInt64.to_int cref < Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 94 0 94 46] Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) >= 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 95 0 95 69] not SatInner0.sat_inner (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) 0) (Model4.model (Type.creusat_trail_trail_Trail_assignments trail))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 86 0 86 33] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 87 0 87 38] Invariant1.invariant' trail ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 88 0 88 44] Invariant2.invariant' ( ^ watches) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 96 0 96 136] not result -> (forall m : (int) . 2 <= m && m < Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) -> Unsat0.unsat (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) m) (Type.creusat_trail_trail_Trail_assignments trail)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 97 0 97 75] not result -> Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref)) = Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 98 0 98 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 99 0 99 55] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 100 0 100 25] Equisat0.equisat ( * f) ( ^ f) } = var _0 : bool; @@ -19932,39 +19510,39 @@ module CreuSat_UnitProp_ExistsNewWatchableLit } BB0 { _8 <- (); - old_w_7 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 104 16 104 34] watches_3); + old_w_7 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 104 16 104 34] watches_3); goto BB1 } BB1 { _10 <- (); - old_f_9 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 105 16 105 28] f_1); + old_f_9 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 105 16 105 28] f_1); goto BB2 } BB2 { _14 <- Type.creusat_formula_formula_Formula_clauses ( * f_1); _15 <- cref_4; - _13 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 106 28 106 43] Index0.index _14 _15); + _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 106 28 106 43] Index0.index _14 _15); goto BB3 } BB3 { _12 <- _13; - clause_len_11 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 106 28 106 49] Len0.len _12); + clause_len_11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 106 28 106 49] Len0.len _12); goto BB4 } BB4 { _20 <- * f_1; _21 <- cref_4; - _19 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 107 42 107 49] Index1.index _20 _21); + _19 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 107 42 107 49] Index1.index _20 _21); goto BB5 } BB5 { _18 <- Type.creusat_clause_clause_Clause_search _19; _22 <- clause_len_11; - _17 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 107 32 107 69] Min0.min _18 _22); + _17 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 107 32 107 69] Min0.min _18 _22); goto BB6 } BB6 { - init_search_16 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 107 22 107 73] Max0.max _17 (2 : usize)); + init_search_16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 107 22 107 73] Max0.max _17 (2 : usize)); goto BB7 } BB7 { @@ -19972,14 +19550,14 @@ module CreuSat_UnitProp_ExistsNewWatchableLit goto BB8 } BB8 { - invariant search { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 109 4 109 38] UInt64.to_int search_23 >= 2 }; - invariant f_unchanged { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 110 4 110 42] f_1 = old_f_9 }; - invariant w_unchanged { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 111 4 111 48] watches_3 = old_w_7 }; - invariant uns { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 112 4 112 125] forall m : (int) . UInt64.to_int init_search_16 <= m && m < UInt64.to_int search_23 -> Unsat0.unsat (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) m) (Type.creusat_trail_trail_Trail_assignments trail_2) }; - invariant first_not_sat { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 114 4 114 89] not SatInner0.sat_inner (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) 0) (Model4.model (Type.creusat_trail_trail_Trail_assignments trail_2)) }; + invariant search { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 109 4 109 38] UInt64.to_int search_23 >= 2 }; + invariant f_unchanged { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 110 4 110 42] f_1 = old_f_9 }; + invariant w_unchanged { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 111 4 111 48] watches_3 = old_w_7 }; + invariant uns { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 112 4 112 125] forall m : (int) . UInt64.to_int init_search_16 <= m && m < UInt64.to_int search_23 -> Unsat0.unsat (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) m) (Type.creusat_trail_trail_Trail_assignments trail_2) }; + invariant first_not_sat { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 114 4 114 89] not SatInner0.sat_inner (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) 0) (Model4.model (Type.creusat_trail_trail_Trail_assignments trail_2)) }; _27 <- search_23; _28 <- clause_len_11; - _26 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 115 10 115 29] _27 < _28); + _26 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 115 10 115 29] _27 < _28); switch (_26) | False -> goto BB15 | _ -> goto BB9 @@ -19995,7 +19573,7 @@ module CreuSat_UnitProp_ExistsNewWatchableLit _35 <- j_5; _36 <- search_23; _37 <- lit_6; - _30 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 116 11 116 72] CheckAndMoveWatch0.check_and_move_watch _31 _32 _33 _34 _35 _36 _37); + _30 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 116 11 116 72] CheckAndMoveWatch0.check_and_move_watch _31 _32 _33 _34 _35 _36 _37); goto BB10 } BB10 { @@ -20007,7 +19585,7 @@ module CreuSat_UnitProp_ExistsNewWatchableLit BB11 { assume { Resolve0.resolve watches_3 }; _40 <- (); - old_f2_39 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 117 25 117 37] f_1); + old_f2_39 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 117 25 117 37] f_1); goto BB12 } BB12 { @@ -20016,24 +19594,24 @@ module CreuSat_UnitProp_ExistsNewWatchableLit f_1 <- { f_1 with current = (let Type.CreuSat_Formula_Formula a b = * f_1 in Type.CreuSat_Formula_Formula ( ^ _43) b) }; assume { Resolve1.resolve f_1 }; _44 <- cref_4; - _42 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 118 12 118 27] IndexMut0.index_mut _43 _44); + _42 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 118 12 118 27] IndexMut0.index_mut _43 _44); goto BB13 } BB13 { _42 <- { _42 with current = (let Type.CreuSat_Clause_Clause a b c d = * _42 in Type.CreuSat_Clause_Clause a b _41 d) }; assume { Resolve2.resolve _42 }; - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 119 12 119 130] forall j : (int) . 0 <= j && j < Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) -> Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) j) = Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * old_f2_39))) j) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 119 12 119 130] forall j : (int) . 0 <= j && j < Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) -> Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) j) = Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * old_f2_39))) j) }; _45 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 120 12 120 53] Equisat0.equisat ( * old_f2_39) ( * f_1) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 120 12 120 53] Equisat0.equisat ( * old_f2_39) ( * f_1) }; _46 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 121 12 121 59] CrefsInRange0.crefs_in_range (Model5.model (Type.creusat_trail_trail_Trail_trail trail_2)) ( * f_1) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 121 12 121 59] CrefsInRange0.crefs_in_range (Model5.model (Type.creusat_trail_trail_Trail_trail trail_2)) ( * f_1) }; _47 <- (); _0 <- true; goto BB24 } BB14 { _29 <- (); - search_23 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 124 8 124 19] search_23 + (1 : usize)); + search_23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 124 8 124 19] search_23 + (1 : usize)); _25 <- (); goto BB8 } @@ -20043,15 +19621,15 @@ module CreuSat_UnitProp_ExistsNewWatchableLit goto BB16 } BB16 { - invariant search_bound { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 127 4 127 70] 2 <= UInt64.to_int search_23 && UInt64.to_int search_23 <= UInt64.to_int clause_len_11 }; - invariant f_unchanged { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 128 4 128 42] f_1 = old_f_9 }; - invariant w_unchanged { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 129 4 129 48] watches_3 = old_w_7 }; - invariant uns { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 130 4 130 131] forall m : (int) . UInt64.to_int init_search_16 <= m && m < UInt64.to_int clause_len_11 -> Unsat0.unsat (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) m) (Type.creusat_trail_trail_Trail_assignments trail_2) }; - invariant uns2 { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 131 4 131 117] forall m : (int) . 2 <= m && m < UInt64.to_int search_23 -> Unsat0.unsat (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) m) (Type.creusat_trail_trail_Trail_assignments trail_2) }; - invariant first_not_sat { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 133 4 133 89] not SatInner0.sat_inner (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) 0) (Model4.model (Type.creusat_trail_trail_Trail_assignments trail_2)) }; + invariant search_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 127 4 127 70] 2 <= UInt64.to_int search_23 && UInt64.to_int search_23 <= UInt64.to_int clause_len_11 }; + invariant f_unchanged { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 128 4 128 42] f_1 = old_f_9 }; + invariant w_unchanged { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 129 4 129 48] watches_3 = old_w_7 }; + invariant uns { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 130 4 130 131] forall m : (int) . UInt64.to_int init_search_16 <= m && m < UInt64.to_int clause_len_11 -> Unsat0.unsat (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) m) (Type.creusat_trail_trail_Trail_assignments trail_2) }; + invariant uns2 { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 131 4 131 117] forall m : (int) . 2 <= m && m < UInt64.to_int search_23 -> Unsat0.unsat (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) m) (Type.creusat_trail_trail_Trail_assignments trail_2) }; + invariant first_not_sat { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 133 4 133 89] not SatInner0.sat_inner (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) 0) (Model4.model (Type.creusat_trail_trail_Trail_assignments trail_2)) }; _53 <- search_23; _54 <- init_search_16; - _52 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 134 10 134 30] _53 < _54); + _52 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 134 10 134 30] _53 < _54); switch (_52) | False -> goto BB23 | _ -> goto BB17 @@ -20067,7 +19645,7 @@ module CreuSat_UnitProp_ExistsNewWatchableLit _61 <- j_5; _62 <- search_23; _63 <- lit_6; - _56 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 135 11 135 72] CheckAndMoveWatch0.check_and_move_watch _57 _58 _59 _60 _61 _62 _63); + _56 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 135 11 135 72] CheckAndMoveWatch0.check_and_move_watch _57 _58 _59 _60 _61 _62 _63); goto BB18 } BB18 { @@ -20079,7 +19657,7 @@ module CreuSat_UnitProp_ExistsNewWatchableLit BB19 { assume { Resolve0.resolve watches_3 }; _66 <- (); - old_f2_65 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 136 25 136 37] f_1); + old_f2_65 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 136 25 136 37] f_1); goto BB20 } BB20 { @@ -20088,24 +19666,24 @@ module CreuSat_UnitProp_ExistsNewWatchableLit f_1 <- { f_1 with current = (let Type.CreuSat_Formula_Formula a b = * f_1 in Type.CreuSat_Formula_Formula ( ^ _69) b) }; assume { Resolve1.resolve f_1 }; _70 <- cref_4; - _68 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 137 12 137 27] IndexMut0.index_mut _69 _70); + _68 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 137 12 137 27] IndexMut0.index_mut _69 _70); goto BB21 } BB21 { _68 <- { _68 with current = (let Type.CreuSat_Clause_Clause a b c d = * _68 in Type.CreuSat_Clause_Clause a b _67 d) }; assume { Resolve2.resolve _68 }; - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 138 12 138 130] forall j : (int) . 0 <= j && j < Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) -> Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) j) = Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * old_f2_65))) j) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 138 12 138 130] forall j : (int) . 0 <= j && j < Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) -> Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) j) = Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * old_f2_65))) j) }; _71 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 139 12 139 53] Equisat0.equisat ( * old_f2_65) ( * f_1) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 139 12 139 53] Equisat0.equisat ( * old_f2_65) ( * f_1) }; _72 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 140 12 140 59] CrefsInRange0.crefs_in_range (Model5.model (Type.creusat_trail_trail_Trail_trail trail_2)) ( * f_1) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 140 12 140 59] CrefsInRange0.crefs_in_range (Model5.model (Type.creusat_trail_trail_Trail_trail trail_2)) ( * f_1) }; _73 <- (); _0 <- true; goto BB24 } BB22 { _55 <- (); - search_23 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 143 8 143 19] search_23 + (1 : usize)); + search_23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 143 8 143 19] search_23 + (1 : usize)); _25 <- (); goto BB16 } @@ -20131,9 +19709,10 @@ module CreuSat_UnitProp_PropagateLitWithRegardToClause_Interface use prelude.Prelude use mach.int.Int32 use Type - clone CreuSat_Logic_LogicFormula_Impl1_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 clone CreuSat_Logic_LogicClause_Impl2_Unsat_Interface as Unsat1 - clone CreuSat_Logic_LogicFormula_Impl1_Unsat_Interface as Unsat0 + clone CreuSat_Logic_LogicFormula_Impl2_Unsat_Interface as Unsat0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model4 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, axiom . clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model3 @@ -20147,30 +19726,28 @@ module CreuSat_UnitProp_PropagateLitWithRegardToClause_Interface clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic_Interface as ToWatchidxLogic0 clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val propagate_lit_with_regard_to_clause [@cfg:stackify] (f : borrowed (Type.creusat_formula_formula)) (trail : borrowed (Type.creusat_trail_trail)) (watches : borrowed (Type.creusat_watches_watches)) (cref : usize) (lit : Type.creusat_lit_lit) (j : usize) : Type.core_result_result bool usize - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 149 0 149 33] Invariant0.invariant' ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 150 0 150 42] Invariant1.invariant' ( * trail) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 151 0 151 44] Invariant2.invariant' ( * watches) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 152 0 152 63] ToWatchidxLogic0.to_watchidx_logic lit < Seq.length (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 153 0 153 70] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 154 0 154 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 155 0 155 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 156 0 156 39] UInt64.to_int cref < Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 157 0 157 46] Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) >= 2} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 149 0 149 33] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 150 0 150 42] Invariant1.invariant' ( ^ trail) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 151 0 151 44] Invariant2.invariant' ( ^ watches) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 158 0 158 49] Type.creusat_trail_trail_Trail_decisions ( ^ trail) = Type.creusat_trail_trail_Trail_decisions ( * trail) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 159 0 163 3] match (result) with + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 149 0 149 33] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 150 0 150 42] Invariant1.invariant' ( * trail) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 151 0 151 44] Invariant2.invariant' ( * watches) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 152 0 152 63] ToWatchidxLogic0.to_watchidx_logic lit < Seq.length (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 153 0 153 70] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 154 0 154 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 155 0 155 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 156 0 156 39] UInt64.to_int cref < Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 157 0 157 46] Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) >= 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 149 0 149 33] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 150 0 150 42] Invariant1.invariant' ( ^ trail) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 151 0 151 44] Invariant2.invariant' ( ^ watches) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 158 0 158 49] Type.creusat_trail_trail_Trail_decisions ( ^ trail) = Type.creusat_trail_trail_Trail_decisions ( * trail) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 159 0 163 3] match (result) with | Type.Core_Result_Result_Ok (True) -> true | Type.Core_Result_Result_Ok (False) -> Seq.length (Model4.model (Type.creusat_trail_trail_Trail_trail ( ^ trail))) = Seq.length (Model4.model (Type.creusat_trail_trail_Trail_trail ( * trail))) | Type.Core_Result_Result_Err n -> UInt64.to_int n < Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) && Unsat0.unsat ( ^ f) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) && Unsat1.unsat (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int n)) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) end } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 164 0 164 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 165 0 165 25] Equisat0.equisat ( * f) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 164 0 164 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 165 0 165 25] Equisat0.equisat ( * f) ( ^ f) } end module CreuSat_UnitProp_PropagateLitWithRegardToClause @@ -20182,237 +19759,209 @@ module CreuSat_UnitProp_PropagateLitWithRegardToClause use Type use seq.Permut use prelude.UInt8 - clone CreuSat_Logic_Logic_Unset as Unset1 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset1.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model8 with function Model0.model = Model9.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with function Model0.model = Model8.model - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_clause_clause - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = ToWatchidxLogic0.index_logic, + function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, + function IndexLogic0.index_logic = UnsetInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner2.index_logic, function IndexLogic0.index_logic = SatInner2.index_logic, + function IndexLogic0.index_logic = Invariant6.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRange0.vars_in_range_inner, + predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_Logic_Unset as Unset1 with predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model3 with function Model0.model = Model7.model + type a = Type.alloc_alloc_global, function Model0.model = Model3.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model3 with function Model1.model = InvariantMirror0.model, + function Model0.model = FormulaInvariant0.model, function Model2.model = WatchesInvariantInternal0.model, + function Model0.model = UnsatInner1.model, function Model0.model = UnitInner0.model, + function Model0.model = PostUnitInner0.model, function Model0.model = ClausePostWithRegardsToInner0.model, + function Model0.model = Invariant3.model, function Model1.model = UnitAreSat0.model, + function Model0.model = LitIdxIn0.model, function Model0.model = VarsInRange0.model, + function Model0.model = SatInner1.model, function Model1.model = Invariant7.model clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with function Model0.model = Model2.model, - function Model1.model = Model3.model - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model5 with function Model0.model = Model2.model - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.creusat_clause_clause, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model2.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - type Output0.output = Output0.output - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with function Model0.model = Model3.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant3.invariant', - function Model0.model = Model3.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model2.model, - predicate Invariant0.invariant' = Invariant3.invariant', function Model1.model = Model3.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model5.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreuSat_Logic_LogicClause_Impl2_VarsInRange as VarsInRange0 with function Model0.model = Model3.model, - predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = Invariant6.invariant', - predicate Invariant1.invariant' = Invariant7.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner2 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner1 with function Model0.model = Model3.model, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_SatInner as SatInner0 with function Model0.model = Model2.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, + type a = Type.alloc_alloc_global, function Model0.model = Index0.model, + function Model0.model = InvariantMirror0.model, function Model0.model = Model5.model, + function Model3.model = InvariantNoDecisionMirror0.model, function Model1.model = WatchesInvariantInternal0.model, + function Model0.model = UnsatInner0.model, function Model0.model = LongArePostUnitInner0.model, + function Model0.model = UnitAreSat0.model, function Model0.model = SatInner0.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = ToWatchidxLogic0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner2.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = SatInner2.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner2 with predicate SatInner0.sat_inner = PostUnitInner0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = Sat0.sat_inner, predicate SatInner0.sat_inner = SatInner1.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner1 with predicate SatInner0.sat_inner = UnitInner0.sat_inner, predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_Equisat as Equisat0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model8.model, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model2.model, - function Model1.model = Model3.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner2 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model3.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner2.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner2.unsat_inner - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model2.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToLit as ClausePostWithRegardsToLit0 with function Model0.model = Model8.model, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicClause_Impl1_PostUnitInner as PostUnitInner0 with function Model0.model = Model3.model, - predicate SatInner0.sat_inner = SatInner2.sat_inner, predicate UnsatInner0.unsat_inner = UnsatInner2.unsat_inner - clone CreuSat_Logic_LogicClause_Impl1_PostUnit as PostUnit0 with function Model0.model = Model8.model, - predicate PostUnitInner0.post_unit_inner = PostUnitInner0.post_unit_inner - clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner1 with function Model0.model = Model3.model, - predicate UnsatInner0.unsat_inner = UnsatInner2.unsat_inner - clone CreuSat_Logic_LogicFormula_Impl1_UnsatInner as UnsatInner0 with function Model0.model = Model2.model, - predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner - clone CreuSat_Logic_LogicFormula_Impl1_Unsat as Unsat0 with function Model0.model = Model8.model, + clone CreuSat_Logic_LogicClause_Impl2_VarsInRange as VarsInRange0 with predicate VarsInRange0.vars_in_range = UnitInner0.vars_in_range + clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner2 with predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner, + predicate UnsatInner0.unsat_inner = PostUnitInner0.unsat_inner, + predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model8.model, axiom . + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model8 with function Model0.model = Unsat0.model, + function Model0.model = Unsat1.model, function Model0.model = Unset0.model, function Model0.model = Unit0.model, + function Model0.model = PostUnit0.model, function Model0.model = ClausePostWithRegardsToLit0.model, + function Model2.model = InvariantNoDecision0.model, function Model0.model = InvariantNoDecisionMirror0.model, + function Model0.model = Invariant4.model, function Model1.model = TrailEntriesAreAssigned0.model, + function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToLit0.clause_post_with_regards_to_inner, + predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_clause_clause + clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause, + type Output0.output = Index0.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause, + predicate HasValue0.has_value = Index0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause, + predicate InBounds0.in_bounds = Index0.in_bounds + clone CreuSat_Logic_LogicClause_Impl1_PostUnitInner as PostUnitInner0 with predicate PostUnitInner0.post_unit_inner = PostUnit0.post_unit_inner + clone CreuSat_Logic_LogicLit_Impl1_UnsetInner as UnsetInner0 with predicate UnsetInner0.unset_inner = Unset0.unset_inner, + predicate UnsetInner0.unset_inner = UnitInner0.unset_inner + clone CreuSat_Logic_LogicClause_Impl2_UnitInner as UnitInner0 with predicate UnitInner0.unit_inner = Unit0.unit_inner + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner1 with predicate UnsatInner0.unsat_inner = Unsat1.unsat_inner, predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat1 with function Model0.model = Model8.model, - predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model3.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model2.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicLit_Impl1_UnsetInner as UnsetInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_Impl2_UnitInner as UnitInner0 with predicate VarsInRange0.vars_in_range = VarsInRange0.vars_in_range, - predicate SatInner0.sat_inner = SatInner1.sat_inner, function Model0.model = Model3.model, - predicate UnsetInner0.unset_inner = UnsetInner0.unset_inner - clone CreuSat_Logic_LogicClause_Impl2_Unit as Unit0 with function Model0.model = Model8.model, - predicate UnitInner0.unit_inner = UnitInner0.unit_inner - clone CreuSat_Logic_LogicLit_Impl1_Unset as Unset0 with function Model0.model = Model8.model, - predicate UnsetInner0.unset_inner = UnsetInner0.unset_inner - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model1.model, - function Model1.model = Model2.model, function Model2.model = Model3.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic as ToWatchidxLogic0 with function IndexLogic0.index_logic = IndexLogic0.index_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic + clone CreuSat_Logic_LogicFormula_Impl2_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant2.watches_invariant_internal + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model5 with function Model0.model = Invariant0.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.creusat_clause_clause, type i = usize, + type a = Type.alloc_alloc_global + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToLit as ClausePostWithRegardsToLit0 + clone CreuSat_Logic_LogicClause_Impl1_PostUnit as PostUnit0 + clone CreuSat_Logic_LogicClause_Impl2_Unit as Unit0 + clone CreuSat_Logic_LogicLit_Impl1_Unset as Unset0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 + clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat1 + clone CreuSat_Logic_LogicFormula_Impl2_Unsat as Unsat0 clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 with function Model0.model = Model0.model, - predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model4.model, - function Model1.model = Model8.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model4.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model4.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model6.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model8.model, - function Model1.model = Model4.model, predicate Invariant0.invariant' = Invariant5.invariant', - function Model2.model = Model6.model, function Model3.model = Model2.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant4.invariant', function Model0.model = Model4.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model6.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model8.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model6.model, function Model1.model = Model4.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve4 with type t = Type.creusat_watches_watcher + type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . + clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic as ToWatchidxLogic0 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . + clone CreuSat_Logic_LogicLit_Impl1_IdxInTrail as IdxInTrail0 with predicate IdxInTrail0.idx_in_trail = EnqAssignment0.idx_in_trail + clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat2 with predicate Unsat0.unsat = ExistsNewWatchableLit0.unsat, + predicate Unsat0.unsat = EnqAssignment0.unsat clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy5 with type t = Type.creusat_watches_watcher - clone Core_Slice_Index_Impl2_Output as Output2 with type t = Type.creusat_watches_watcher - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere1 with type t = Type.creusat_watches_watcher - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue2 with type t = Type.creusat_watches_watcher - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds2 with type t = Type.creusat_watches_watcher - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve3 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) + clone Core_Slice_Index_Impl2_Output as Output2 with type t = Type.creusat_watches_watcher, + type Output0.output = IndexMut1.output + clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere1 with type t = Type.creusat_watches_watcher, + predicate ResolveElswhere0.resolve_elswhere = IndexMut1.resolve_elswhere + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue2 with type t = Type.creusat_watches_watcher, + predicate HasValue0.has_value = IndexMut1.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds2 with type t = Type.creusat_watches_watcher, + predicate InBounds0.in_bounds = IndexMut1.in_bounds clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy4 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone Core_Slice_Index_Impl2_Output as Output1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_watches_watches - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_trail_trail - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy3 - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy2 - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy1 + clone Core_Slice_Index_Impl2_Output as Output1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + type Output0.output = IndexMut0.output + clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + predicate HasValue0.has_value = IndexMut0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + predicate InBounds0.in_bounds = IndexMut0.in_bounds + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy3 with type ModelTy0.modelTy = Model12.modelTy clone CreusotContracts_Logic_Model_Impl0_Model as Model12 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy3.modelTy, function Model0.model = Model8.model + function Model0.model = LitSat0.model, function Model0.model = LitUnset0.model + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy2 with type ModelTy0.modelTy = Model11.modelTy clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy2.modelTy, function Model0.model = Model3.model - clone CreuSat_Clause_Impl0_Index_Interface as Index2 with function Model0.model = Model11.model + function Model0.model = Index2.model + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model10.modelTy clone CreusotContracts_Logic_Model_Impl0_Model as Model10 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model5.model - clone CreuSat_Formula_Impl0_Index_Interface as Index1 with function Model0.model = Model10.model + function Model0.model = Index1.model + clone CreuSat_UnitProp_Swap_Interface as Swap0 + clone CreuSat_Trail_Impl0_EnqAssignment_Interface as EnqAssignment0 + clone CreuSat_Trail_Impl0_DecisionLevel_Interface as DecisionLevel0 + clone CreuSat_Lit_Impl1_LitUnset_Interface as LitUnset0 + clone CreuSat_UnitProp_ExistsNewWatchableLit_Interface as ExistsNewWatchableLit0 + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve4 with type t = Type.creusat_watches_watcher clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut1 with type t = Type.creusat_watches_watcher, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, - predicate InBounds0.in_bounds = InBounds2.in_bounds, predicate HasValue0.has_value = HasValue2.has_value, - predicate ResolveElswhere0.resolve_elswhere = ResolveElswhere1.resolve_elswhere, type Output0.output = Output2.output - clone CreuSat_Lit_Impl1_LitSat_Interface as LitSat0 with function Model0.model = Model12.model, - predicate Invariant0.invariant' = Invariant6.invariant', predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat2 with function Model0.model = Model8.model, - predicate UnsatInner0.unsat_inner = UnsatInner2.unsat_inner - clone CreuSat_Lit_Impl1_LitUnset_Interface as LitUnset0 with function Model0.model = Model12.model, - predicate Invariant0.invariant' = Invariant6.invariant', predicate Unset0.unset = Unset0.unset - clone CreuSat_Lit_Impl1_ToWatchidx_Interface as ToWatchidx0 with function IndexLogic0.index_logic = IndexLogic0.index_logic, - function ToWatchidxLogic0.to_watchidx_logic = ToWatchidxLogic0.to_watchidx_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic + type a = Type.alloc_alloc_global + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve3 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type i = usize, type a = Type.alloc_alloc_global, function Model0.model = Model0.model, - predicate InBounds0.in_bounds = InBounds1.in_bounds, predicate HasValue0.has_value = HasValue1.has_value, - predicate ResolveElswhere0.resolve_elswhere = ResolveElswhere0.resolve_elswhere, type Output0.output = Output1.output - clone CreuSat_Logic_LogicLit_Impl1_IdxInTrail as IdxInTrail0 with function Model0.model = Model4.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Trail_Impl0_DecisionLevel_Interface as DecisionLevel0 with function Model0.model = Model6.model - clone CreuSat_UnitProp_Swap_Interface as Swap0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant1.invariant', predicate Invariant2.invariant' = Invariant2.invariant', - function Model0.model = Model2.model, function Model1.model = Model3.model, function Model2.model = Model8.model, - predicate SatInner0.sat_inner = SatInner2.sat_inner, predicate Equisat0.equisat = Equisat0.equisat, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_Trail_Impl0_EnqAssignment_Interface as EnqAssignment0 with predicate Invariant0.invariant' = Invariant1.invariant', - predicate Invariant1.invariant' = Invariant0.invariant', predicate Invariant2.invariant' = Invariant6.invariant', - predicate Invariant3.invariant' = Invariant5.invariant', function Model0.model = Model2.model, - function Model1.model = Model3.model, predicate Unset0.unset = Unset0.unset, predicate Unsat0.unsat = Unsat2.unsat, - predicate IdxInTrail0.idx_in_trail = IdxInTrail0.idx_in_trail, function Model2.model = Model8.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate Unset1.unset = Unset1.unset, - function Model3.model = Model4.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, - predicate ClausePostWithRegardsToLit0.clause_post_with_regards_to_lit = ClausePostWithRegardsToLit0.clause_post_with_regards_to_lit, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_UnitProp_ExistsNewWatchableLit_Interface as ExistsNewWatchableLit0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant1.invariant', predicate Invariant2.invariant' = Invariant2.invariant', - function ToWatchidxLogic0.to_watchidx_logic = ToWatchidxLogic0.to_watchidx_logic, - function Model0.model = Model0.model, function Model1.model = Model1.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, function Model2.model = Model2.model, - function Model3.model = Model3.model, function Model4.model = Model8.model, - predicate SatInner0.sat_inner = SatInner2.sat_inner, predicate Unsat0.unsat = Unsat2.unsat, - predicate Equisat0.equisat = Equisat0.equisat, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - let rec cfg propagate_lit_with_regard_to_clause [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 166 0 168 24] (f : borrowed (Type.creusat_formula_formula)) (trail : borrowed (Type.creusat_trail_trail)) (watches : borrowed (Type.creusat_watches_watches)) (cref : usize) (lit : Type.creusat_lit_lit) (j : usize) : Type.core_result_result bool usize - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 149 0 149 33] Invariant0.invariant' ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 150 0 150 42] Invariant1.invariant' ( * trail) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 151 0 151 44] Invariant2.invariant' ( * watches) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 152 0 152 63] ToWatchidxLogic0.to_watchidx_logic lit < Seq.length (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 153 0 153 70] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 154 0 154 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 155 0 155 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 156 0 156 39] UInt64.to_int cref < Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 157 0 157 46] Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) >= 2} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 149 0 149 33] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 150 0 150 42] Invariant1.invariant' ( ^ trail) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 151 0 151 44] Invariant2.invariant' ( ^ watches) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 158 0 158 49] Type.creusat_trail_trail_Trail_decisions ( ^ trail) = Type.creusat_trail_trail_Trail_decisions ( * trail) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 159 0 163 3] match (result) with + type i = usize, type a = Type.alloc_alloc_global + clone CreuSat_Lit_Impl1_ToWatchidx_Interface as ToWatchidx0 + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_watches_watches + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_trail_trail + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula + clone CreuSat_Lit_Impl1_LitSat_Interface as LitSat0 + clone CreuSat_Clause_Impl0_Index_Interface as Index2 + clone CreuSat_Formula_Impl0_Index_Interface as Index1 + let rec cfg propagate_lit_with_regard_to_clause [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 166 0 168 24] (f : borrowed (Type.creusat_formula_formula)) (trail : borrowed (Type.creusat_trail_trail)) (watches : borrowed (Type.creusat_watches_watches)) (cref : usize) (lit : Type.creusat_lit_lit) (j : usize) : Type.core_result_result bool usize + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 149 0 149 33] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 150 0 150 42] Invariant1.invariant' ( * trail) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 151 0 151 44] Invariant2.invariant' ( * watches) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 152 0 152 63] ToWatchidxLogic0.to_watchidx_logic lit < Seq.length (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 153 0 153 70] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 154 0 154 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 155 0 155 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 156 0 156 39] UInt64.to_int cref < Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 157 0 157 46] Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) >= 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 149 0 149 33] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 150 0 150 42] Invariant1.invariant' ( ^ trail) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 151 0 151 44] Invariant2.invariant' ( ^ watches) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 158 0 158 49] Type.creusat_trail_trail_Trail_decisions ( ^ trail) = Type.creusat_trail_trail_Trail_decisions ( * trail) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 159 0 163 3] match (result) with | Type.Core_Result_Result_Ok (True) -> true | Type.Core_Result_Result_Ok (False) -> Seq.length (Model4.model (Type.creusat_trail_trail_Trail_trail ( ^ trail))) = Seq.length (Model4.model (Type.creusat_trail_trail_Trail_trail ( * trail))) | Type.Core_Result_Result_Err n -> UInt64.to_int n < Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) && Unsat0.unsat ( ^ f) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) && Unsat1.unsat (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int n)) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) end } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 164 0 164 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 165 0 165 25] Equisat0.equisat ( * f) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 164 0 164 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 165 0 165 25] Equisat0.equisat ( * f) ( ^ f) } = var _0 : Type.core_result_result bool usize; @@ -20542,19 +20091,19 @@ module CreuSat_UnitProp_PropagateLitWithRegardToClause } BB0 { _8 <- (); - old_w_7 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 169 16 169 34] watches_3); + old_w_7 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 169 16 169 34] watches_3); goto BB1 } BB1 { _11 <- * f_1; _12 <- cref_4; - _10 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 170 18 170 25] Index1.index _11 _12); + _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 170 18 170 25] Index1.index _11 _12); goto BB2 } BB2 { clause_9 <- _10; _15 <- clause_9; - _14 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 171 20 171 29] Index2.index _15 (0 : usize)); + _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 171 20 171 29] Index2.index _15 (0 : usize)); goto BB3 } BB3 { @@ -20562,7 +20111,7 @@ module CreuSat_UnitProp_PropagateLitWithRegardToClause _18 <- first_lit_13; _20 <- Type.creusat_trail_trail_Trail_assignments ( * trail_2); _19 <- _20; - _17 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 172 7 172 44] LitSat0.lit_sat _18 _19); + _17 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 172 7 172 44] LitSat0.lit_sat _18 _19); goto BB4 } BB4 { @@ -20574,20 +20123,20 @@ module CreuSat_UnitProp_PropagateLitWithRegardToClause BB5 { assume { Resolve0.resolve f_1 }; assume { Resolve1.resolve trail_2 }; - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 174 8 174 49] ^ watches_3 = ^ old_w_7 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 174 8 174 49] ^ watches_3 = ^ old_w_7 }; _22 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 175 8 175 60] IndexLogic0.index_logic first_lit_13 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f_1)) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 175 8 175 60] IndexLogic0.index_logic first_lit_13 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f_1)) }; _23 <- (); _24 <- first_lit_13; _28 <- borrow_mut (Type.creusat_watches_watches_Watches_watches ( * watches_3)); watches_3 <- { watches_3 with current = (let Type.CreuSat_Watches_Watches a = * watches_3 in Type.CreuSat_Watches_Watches ( ^ _28)) }; assume { Resolve2.resolve watches_3 }; _30 <- lit_5; - _29 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 176 24 176 41] ToWatchidx0.to_watchidx _30); + _29 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 176 24 176 41] ToWatchidx0.to_watchidx _30); goto BB6 } BB6 { - _27 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 176 8 176 42] IndexMut0.index_mut _28 _29); + _27 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 176 8 176 42] IndexMut0.index_mut _28 _29); goto BB7 } BB7 { @@ -20595,7 +20144,7 @@ module CreuSat_UnitProp_PropagateLitWithRegardToClause _27 <- { _27 with current = ( ^ _26) }; assume { Resolve3.resolve _27 }; _31 <- j_6; - _25 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 176 8 176 45] IndexMut1.index_mut _26 _31); + _25 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 176 8 176 45] IndexMut1.index_mut _26 _31); goto BB8 } BB8 { @@ -20607,7 +20156,7 @@ module CreuSat_UnitProp_PropagateLitWithRegardToClause BB9 { _16 <- (); _34 <- clause_9; - _33 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 179 21 179 30] Index2.index _34 (1 : usize)); + _33 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 179 21 179 30] Index2.index _34 (1 : usize)); goto BB10 } BB10 { @@ -20615,7 +20164,7 @@ module CreuSat_UnitProp_PropagateLitWithRegardToClause _37 <- second_lit_32; _39 <- Type.creusat_trail_trail_Trail_assignments ( * trail_2); _38 <- _39; - _36 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 180 7 180 45] LitSat0.lit_sat _37 _38); + _36 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 180 7 180 45] LitSat0.lit_sat _37 _38); goto BB11 } BB11 { @@ -20627,20 +20176,20 @@ module CreuSat_UnitProp_PropagateLitWithRegardToClause BB12 { assume { Resolve0.resolve f_1 }; assume { Resolve1.resolve trail_2 }; - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 182 8 182 49] ^ watches_3 = ^ old_w_7 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 182 8 182 49] ^ watches_3 = ^ old_w_7 }; _41 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 183 8 183 61] IndexLogic0.index_logic second_lit_32 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f_1)) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 183 8 183 61] IndexLogic0.index_logic second_lit_32 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f_1)) }; _42 <- (); _43 <- second_lit_32; _47 <- borrow_mut (Type.creusat_watches_watches_Watches_watches ( * watches_3)); watches_3 <- { watches_3 with current = (let Type.CreuSat_Watches_Watches a = * watches_3 in Type.CreuSat_Watches_Watches ( ^ _47)) }; assume { Resolve2.resolve watches_3 }; _49 <- lit_5; - _48 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 184 24 184 41] ToWatchidx0.to_watchidx _49); + _48 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 184 24 184 41] ToWatchidx0.to_watchidx _49); goto BB13 } BB13 { - _46 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 184 8 184 42] IndexMut0.index_mut _47 _48); + _46 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 184 8 184 42] IndexMut0.index_mut _47 _48); goto BB14 } BB14 { @@ -20648,7 +20197,7 @@ module CreuSat_UnitProp_PropagateLitWithRegardToClause _46 <- { _46 with current = ( ^ _45) }; assume { Resolve3.resolve _46 }; _50 <- j_6; - _44 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 184 8 184 45] IndexMut1.index_mut _45 _50); + _44 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 184 8 184 45] IndexMut1.index_mut _45 _50); goto BB15 } BB15 { @@ -20667,7 +20216,7 @@ module CreuSat_UnitProp_PropagateLitWithRegardToClause _56 <- cref_4; _57 <- j_6; _58 <- lit_5; - _52 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 188 7 188 64] ExistsNewWatchableLit0.exists_new_watchable_lit _53 _54 _55 _56 _57 _58); + _52 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 188 7 188 64] ExistsNewWatchableLit0.exists_new_watchable_lit _53 _54 _55 _56 _57 _58); goto BB17 } BB17 { @@ -20685,12 +20234,12 @@ module CreuSat_UnitProp_PropagateLitWithRegardToClause } BB19 { _51 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 192 4 192 175] Unsat1.unsat (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4)) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) || Unset0.unset (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) 0) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) || Unset0.unset (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) 1) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 192 4 192 175] Unsat1.unsat (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4)) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) || Unset0.unset (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) 0) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) || Unset0.unset (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) 1) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) }; _60 <- (); _62 <- first_lit_13; _64 <- Type.creusat_trail_trail_Trail_assignments ( * trail_2); _63 <- _64; - _61 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 193 7 193 46] LitUnset0.lit_unset _62 _63); + _61 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 193 7 193 46] LitUnset0.lit_unset _62 _63); goto BB20 } BB20 { @@ -20704,7 +20253,7 @@ module CreuSat_UnitProp_PropagateLitWithRegardToClause _68 <- second_lit_32; _70 <- Type.creusat_trail_trail_Trail_assignments ( * trail_2); _69 <- _70; - _67 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 196 11 196 51] LitUnset0.lit_unset _68 _69); + _67 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 196 11 196 51] LitUnset0.lit_unset _68 _69); goto BB22 } BB22 { @@ -20721,15 +20270,15 @@ module CreuSat_UnitProp_PropagateLitWithRegardToClause } BB24 { _66 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 199 8 199 42] Invariant1.invariant' ( * trail_2) ( * f_1) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 199 8 199 42] Invariant1.invariant' ( * trail_2) ( * f_1) }; _72 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 200 8 200 68] not Unsat1.unsat (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4)) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 200 8 200 68] not Unsat1.unsat (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4)) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) }; _73 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 201 8 201 66] Unit0.unit (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4)) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 201 8 201 66] Unit0.unit (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4)) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) }; _74 <- (); _76 <- first_lit_13; _78 <- * trail_2; - _77 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 205 28 205 50] DecisionLevel0.decision_level _78); + _77 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 205 28 205 50] DecisionLevel0.decision_level _78); goto BB25 } BB25 { @@ -20741,14 +20290,14 @@ module CreuSat_UnitProp_PropagateLitWithRegardToClause _83 <- step_75; _84 <- * f_1; assume { Resolve0.resolve f_1 }; - _81 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 209 8 209 37] EnqAssignment0.enq_assignment _82 _83 _84); + _81 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 209 8 209 37] EnqAssignment0.enq_assignment _82 _83 _84); goto BB26 } BB26 { assume { Resolve1.resolve trail_2 }; - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 210 8 210 81] PostUnit0.post_unit (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4)) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) && true }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 210 8 210 81] PostUnit0.post_unit (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4)) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) && true }; _85 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 211 8 211 107] ClausePostWithRegardsToLit0.clause_post_with_regards_to_lit (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4)) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) first_lit_13 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 211 8 211 107] ClausePostWithRegardsToLit0.clause_post_with_regards_to_lit (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4)) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) first_lit_13 }; _86 <- (); _0 <- Type.Core_Result_Result_Ok true; goto BB36 @@ -20757,7 +20306,7 @@ module CreuSat_UnitProp_PropagateLitWithRegardToClause _88 <- second_lit_32; _90 <- Type.creusat_trail_trail_Trail_assignments ( * trail_2); _89 <- _90; - _87 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 213 14 213 54] LitUnset0.lit_unset _88 _89); + _87 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 213 14 213 54] LitUnset0.lit_unset _88 _89); goto BB28 } BB28 { @@ -20769,7 +20318,7 @@ module CreuSat_UnitProp_PropagateLitWithRegardToClause BB29 { _93 <- second_lit_32; _95 <- * trail_2; - _94 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 214 59 214 81] DecisionLevel0.decision_level _95); + _94 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 214 59 214 81] DecisionLevel0.decision_level _95); goto BB30 } BB30 { @@ -20777,11 +20326,11 @@ module CreuSat_UnitProp_PropagateLitWithRegardToClause _96 <- Type.CreuSat_Trail_Reason_Long _97; step_92 <- Type.CreuSat_Trail_Step _93 _94 _96; _99 <- (); - old_c_98 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 215 20 215 46] Index0.index (Type.creusat_formula_formula_Formula_clauses ( * f_1)) cref_4); + old_c_98 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 215 20 215 46] Index0.index (Type.creusat_formula_formula_Formula_clauses ( * f_1)) cref_4); goto BB31 } BB31 { - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 216 8 216 73] Unset0.unset (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) 1) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 216 8 216 73] Unset0.unset (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) 1) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) }; _100 <- (); _102 <- borrow_mut ( * f_1); f_1 <- { f_1 with current = ( ^ _102) }; @@ -20789,27 +20338,27 @@ module CreuSat_UnitProp_PropagateLitWithRegardToClause _104 <- * watches_3; assume { Resolve2.resolve watches_3 }; _105 <- cref_4; - _101 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 217 8 217 43] Swap0.swap _102 _103 _104 _105 (0 : usize) (1 : usize)); + _101 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 217 8 217 43] Swap0.swap _102 _103 _104 _105 (0 : usize) (1 : usize)); goto BB32 } BB32 { - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 218 8 218 68] Permut.exchange (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) (Model3.model old_c_98) 0 1 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 218 8 218 68] Permut.exchange (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) (Model3.model old_c_98) 0 1 }; _106 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 219 8 219 73] Unset0.unset (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) 0) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 219 8 219 73] Unset0.unset (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) 0) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) }; _107 <- (); _109 <- borrow_mut ( * trail_2); trail_2 <- { trail_2 with current = ( ^ _109) }; _110 <- step_92; _111 <- * f_1; assume { Resolve0.resolve f_1 }; - _108 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 220 8 220 37] EnqAssignment0.enq_assignment _109 _110 _111); + _108 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 220 8 220 37] EnqAssignment0.enq_assignment _109 _110 _111); goto BB33 } BB33 { assume { Resolve1.resolve trail_2 }; - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 221 8 221 73] PostUnit0.post_unit (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4)) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 221 8 221 73] PostUnit0.post_unit (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4)) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) }; _112 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 222 8 222 108] ClausePostWithRegardsToLit0.clause_post_with_regards_to_lit (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4)) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) second_lit_32 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 222 8 222 108] ClausePostWithRegardsToLit0.clause_post_with_regards_to_lit (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4)) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) second_lit_32 }; _113 <- (); _0 <- Type.Core_Result_Result_Ok true; goto BB35 @@ -20843,32 +20392,31 @@ module CreuSat_UnitProp_PropagateLiteral_Interface use mach.int.Int32 use Type use seq.Seq - clone CreuSat_Logic_LogicFormula_Impl1_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 clone CreuSat_Logic_LogicClause_Impl2_Unsat_Interface as Unsat1 - clone CreuSat_Logic_LogicFormula_Impl1_Unsat_Interface as Unsat0 + clone CreuSat_Logic_LogicFormula_Impl2_Unsat_Interface as Unsat0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val propagate_literal [@cfg:stackify] (f : borrowed (Type.creusat_formula_formula)) (trail : borrowed (Type.creusat_trail_trail)) (watches : borrowed (Type.creusat_watches_watches)) (lit : Type.creusat_lit_lit) : Type.core_result_result () usize - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 230 0 230 33] Invariant0.invariant' ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 231 0 231 42] Invariant1.invariant' ( * trail) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 232 0 232 44] Invariant2.invariant' ( * watches) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 233 0 233 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 234 0 234 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 230 0 230 33] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 231 0 231 42] Invariant1.invariant' ( ^ trail) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 232 0 232 44] Invariant2.invariant' ( ^ watches) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 235 0 238 3] match (result) with + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 230 0 230 33] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 231 0 231 42] Invariant1.invariant' ( * trail) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 232 0 232 44] Invariant2.invariant' ( * watches) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 233 0 233 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 234 0 234 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 230 0 230 33] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 231 0 231 42] Invariant1.invariant' ( ^ trail) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 232 0 232 44] Invariant2.invariant' ( ^ watches) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 235 0 238 3] match (result) with | Type.Core_Result_Result_Ok () -> true | Type.Core_Result_Result_Err n -> UInt64.to_int n < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) && Unsat0.unsat ( ^ f) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) && Unsat1.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int n)) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) end } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 239 0 239 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 240 0 240 25] Equisat0.equisat ( * f) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 239 0 239 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 240 0 240 25] Equisat0.equisat ( * f) ( ^ f) } end module CreuSat_UnitProp_PropagateLiteral @@ -20879,174 +20427,158 @@ module CreuSat_UnitProp_PropagateLiteral use Type use seq.Seq use prelude.UInt8 - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner2.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = Invariant6.index_logic, function IndexLogic0.index_logic = SatInner1.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = UnsatInner2.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, + predicate SatInner0.sat_inner = SatInner2.sat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model6 with function Model0.model = Model9.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model5 with function Model0.model = Model8.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with function Model0.model = Model5.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 + type a = Type.alloc_alloc_global, function Model0.model = Model6.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model6 with function Model1.model = InvariantMirror0.model, + function Model0.model = FormulaInvariant0.model, function Model2.model = WatchesInvariantInternal0.model, + function Model0.model = UnsatInner1.model, function Model0.model = Invariant3.model, + function Model1.model = UnitAreSat0.model, function Model0.model = LitIdxIn0.model, + function Model0.model = ClausePostWithRegardsToInner0.model, function Model1.model = Invariant7.model, + function Model0.model = SatInner2.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = SatInner0.sat_inner + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with function Model0.model = Model0.model, - function Model1.model = Model6.model - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model3 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with function Model0.model = Model6.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_SatInner as SatInner0 with function Model0.model = Model0.model, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_Equisat as Equisat0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model5.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model0.model, - function Model1.model = Model6.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with function Model0.model = Model6.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant3.invariant', - function Model0.model = Model6.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model0.model, - predicate Invariant0.invariant' = Invariant3.invariant', function Model1.model = Model6.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model3.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = Invariant6.invariant', - predicate Invariant1.invariant' = Invariant7.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner2 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model6.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner1.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner2.unsat_inner - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model0.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner1 with function Model0.model = Model6.model, - predicate UnsatInner0.unsat_inner = UnsatInner2.unsat_inner - clone CreuSat_Logic_LogicFormula_Impl1_UnsatInner as UnsatInner0 with function Model0.model = Model0.model, - predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner - clone CreuSat_Logic_LogicFormula_Impl1_Unsat as Unsat0 with function Model0.model = Model5.model, + type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, + function Model0.model = Model3.model, function Model3.model = InvariantNoDecisionMirror0.model, + function Model1.model = WatchesInvariantInternal0.model, function Model0.model = UnsatInner0.model, + function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, + function Model0.model = SatInner0.model, function Model0.model = LitNotInLessInner0.model, + function Model0.model = Invariant7.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner2 with predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner, + predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal + clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model5.model, axiom . + clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model5 with function Model0.model = Unsat0.model, + function Model0.model = Unsat1.model, function Model2.model = InvariantNoDecision0.model, + function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant4.model, + function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner1 with predicate UnsatInner0.unsat_inner = Unsat1.unsat_inner, predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat1 with function Model0.model = Model5.model, - predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model6.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model0.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model7.model, - function Model1.model = Model0.model, function Model2.model = Model6.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicFormula_Impl2_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant2.watches_invariant_internal + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model3 with function Model0.model = Invariant0.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 with function Model0.model = Model1.model, - predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model4.model, - function Model1.model = Model5.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model4.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model4.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model2.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model5.model, - function Model1.model = Model4.model, predicate Invariant0.invariant' = Invariant5.invariant', - function Model2.model = Model2.model, function Model3.model = Model0.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant4.invariant', function Model0.model = Model4.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model2.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model5.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model2.model, function Model1.model = Model4.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 + clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat1 + clone CreuSat_Logic_LogicFormula_Impl2_Unsat as Unsat0 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . use mach.int.Int64 + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy2 with type ModelTy0.modelTy = Model10.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model as Model10 with type t = Type.creusat_assignments_assignments, + function Model0.model = LitSat0.model + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_watches_watcher + clone Core_Slice_Index_Impl2_Output as Output1 with type t = Type.creusat_watches_watcher, + type Output0.output = Index1.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = Type.creusat_watches_watcher, + predicate HasValue0.has_value = Index1.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = Type.creusat_watches_watcher, + predicate InBounds0.in_bounds = Index1.in_bounds + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) + clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + type Output0.output = Index0.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + predicate HasValue0.has_value = Index0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + predicate InBounds0.in_bounds = Index0.in_bounds + clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic as ToWatchidxLogic0 with function ToWatchidxLogic0.to_watchidx_logic = ToWatchidx0.to_watchidx_logic, + function ToWatchidxLogic0.to_watchidx_logic = PropagateLitWithRegardToClause0.to_watchidx_logic clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_watches_watches clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_trail_trail clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy2 - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_watches_watcher - clone Core_Slice_Index_Impl2_Output as Output1 with type t = Type.creusat_watches_watcher - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = Type.creusat_watches_watcher - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = Type.creusat_watches_watcher - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone CreusotContracts_Logic_Model_Impl0_Model as Model10 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy2.modelTy, function Model0.model = Model5.model + clone CreuSat_UnitProp_PropagateLitWithRegardToClause_Interface as PropagateLitWithRegardToClause0 + clone CreuSat_Lit_Impl1_LitSat_Interface as LitSat0 clone Alloc_Vec_Impl16_Index_Interface as Index1 with type t = Type.creusat_watches_watcher, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model7.model, - predicate InBounds0.in_bounds = InBounds1.in_bounds, predicate HasValue0.has_value = HasValue1.has_value, - type Output0.output = Output1.output + type a = Type.alloc_alloc_global clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = Model7.model - clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic as ToWatchidxLogic0 with function IndexLogic0.index_logic = IndexLogic0.index_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic - clone CreuSat_Lit_Impl1_ToWatchidx_Interface as ToWatchidx0 with function IndexLogic0.index_logic = IndexLogic0.index_logic, - function ToWatchidxLogic0.to_watchidx_logic = ToWatchidxLogic0.to_watchidx_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic - clone CreuSat_Lit_Impl1_LitSat_Interface as LitSat0 with function Model0.model = Model10.model, - predicate Invariant0.invariant' = Invariant6.invariant', predicate Sat0.sat = Sat0.sat + type a = Type.alloc_alloc_global clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type i = usize, type a = Type.alloc_alloc_global, function Model0.model = Model1.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - type Output0.output = Output0.output - clone CreuSat_UnitProp_PropagateLitWithRegardToClause_Interface as PropagateLitWithRegardToClause0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant1.invariant', predicate Invariant2.invariant' = Invariant2.invariant', - function ToWatchidxLogic0.to_watchidx_logic = ToWatchidxLogic0.to_watchidx_logic, - function Model0.model = Model1.model, function Model1.model = Model7.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, function Model2.model = Model0.model, - function Model3.model = Model6.model, function Model4.model = Model4.model, predicate Unsat0.unsat = Unsat0.unsat, - predicate Unsat1.unsat = Unsat1.unsat, predicate Equisat0.equisat = Equisat0.equisat, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - let rec cfg propagate_literal [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 241 0 241 110] (f : borrowed (Type.creusat_formula_formula)) (trail : borrowed (Type.creusat_trail_trail)) (watches : borrowed (Type.creusat_watches_watches)) (lit : Type.creusat_lit_lit) : Type.core_result_result () usize - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 230 0 230 33] Invariant0.invariant' ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 231 0 231 42] Invariant1.invariant' ( * trail) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 232 0 232 44] Invariant2.invariant' ( * watches) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 233 0 233 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 234 0 234 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 230 0 230 33] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 231 0 231 42] Invariant1.invariant' ( ^ trail) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 232 0 232 44] Invariant2.invariant' ( ^ watches) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 235 0 238 3] match (result) with + type i = usize, type a = Type.alloc_alloc_global + clone CreuSat_Lit_Impl1_ToWatchidx_Interface as ToWatchidx0 + let rec cfg propagate_literal [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 241 0 241 110] (f : borrowed (Type.creusat_formula_formula)) (trail : borrowed (Type.creusat_trail_trail)) (watches : borrowed (Type.creusat_watches_watches)) (lit : Type.creusat_lit_lit) : Type.core_result_result () usize + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 230 0 230 33] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 231 0 231 42] Invariant1.invariant' ( * trail) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 232 0 232 44] Invariant2.invariant' ( * watches) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 233 0 233 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 234 0 234 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 230 0 230 33] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 231 0 231 42] Invariant1.invariant' ( ^ trail) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 232 0 232 44] Invariant2.invariant' ( ^ watches) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 235 0 238 3] match (result) with | Type.Core_Result_Result_Ok () -> true | Type.Core_Result_Result_Err n -> UInt64.to_int n < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) && Unsat0.unsat ( ^ f) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) && Unsat1.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int n)) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) end } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 239 0 239 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 240 0 240 25] Equisat0.equisat ( * f) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 239 0 239 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 240 0 240 25] Equisat0.equisat ( * f) ( ^ f) } = var _0 : Type.core_result_result () usize; @@ -21111,55 +20643,55 @@ module CreuSat_UnitProp_PropagateLiteral BB0 { j_5 <- (0 : usize); _7 <- lit_4; - watchidx_6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 243 19 243 36] ToWatchidx0.to_watchidx _7); + watchidx_6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 243 19 243 36] ToWatchidx0.to_watchidx _7); goto BB1 } BB1 { - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 244 4 244 62] Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) = 2 * UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f_1)) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 244 4 244 62] Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) = 2 * UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f_1)) }; _8 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 245 4 245 55] Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) > UInt64.to_int watchidx_6 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 245 4 245 55] Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) > UInt64.to_int watchidx_6 }; _9 <- (); _11 <- (); - old_trail_10 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 246 20 246 36] trail_2); + old_trail_10 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 246 20 246 36] trail_2); goto BB2 } BB2 { _13 <- (); - old_f_12 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 247 16 247 28] f_1); + old_f_12 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 247 16 247 28] f_1); goto BB3 } BB3 { _15 <- (); - old_w_14 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 248 16 248 34] watches_3); + old_w_14 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 248 16 248 34] watches_3); goto BB4 } BB4 { goto BB5 } BB5 { - invariant trail_inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 249 4 249 48] Invariant1.invariant' ( * trail_2) ( * f_1) }; - invariant watch_len { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 250 4 250 79] Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) = Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * old_w_14))) }; - invariant watch_inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 251 4 251 50] Invariant2.invariant' ( * watches_3) ( * f_1) }; - invariant f_equi { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 252 4 252 43] Equisat0.equisat ( * old_f_12) ( * f_1) }; - invariant f_inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 253 4 253 38] Invariant0.invariant' ( * f_1) }; - invariant dec_unch { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 254 4 254 72] Model2.model (Type.creusat_trail_trail_Trail_decisions ( * trail_2)) = Model2.model (Type.creusat_trail_trail_Trail_decisions ( * old_trail_10)) }; - invariant nvars_unch { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 255 4 255 60] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f_1)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * old_f_12)) }; - invariant proph_t { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 256 4 256 55] ^ trail_2 = ^ old_trail_10 }; - invariant proph_f { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 257 4 257 47] ^ f_1 = ^ old_f_12 }; - invariant proph_w { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 258 4 258 53] ^ watches_3 = ^ old_w_14 }; + invariant trail_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 249 4 249 48] Invariant1.invariant' ( * trail_2) ( * f_1) }; + invariant watch_len { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 250 4 250 79] Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) = Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * old_w_14))) }; + invariant watch_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 251 4 251 50] Invariant2.invariant' ( * watches_3) ( * f_1) }; + invariant f_equi { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 252 4 252 43] Equisat0.equisat ( * old_f_12) ( * f_1) }; + invariant f_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 253 4 253 38] Invariant0.invariant' ( * f_1) }; + invariant dec_unch { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 254 4 254 72] Model2.model (Type.creusat_trail_trail_Trail_decisions ( * trail_2)) = Model2.model (Type.creusat_trail_trail_Trail_decisions ( * old_trail_10)) }; + invariant nvars_unch { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 255 4 255 60] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f_1)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * old_f_12)) }; + invariant proph_t { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 256 4 256 55] ^ trail_2 = ^ old_trail_10 }; + invariant proph_f { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 257 4 257 47] ^ f_1 = ^ old_f_12 }; + invariant proph_w { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 258 4 258 53] ^ watches_3 = ^ old_w_14 }; _19 <- j_5; _23 <- Type.creusat_watches_watches_Watches_watches ( * watches_3); _24 <- watchidx_6; - _22 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 259 14 259 39] Index0.index _23 _24); + _22 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 259 14 259 39] Index0.index _23 _24); goto BB6 } BB6 { _21 <- _22; - _20 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 259 14 259 45] Len0.len _21); + _20 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 259 14 259 45] Len0.len _21); goto BB7 } BB7 { - _18 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 259 10 259 45] _19 < _20); + _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 259 10 259 45] _19 < _20); switch (_18) | False -> goto BB22 | _ -> goto BB8 @@ -21168,13 +20700,13 @@ module CreuSat_UnitProp_PropagateLiteral BB8 { _29 <- Type.creusat_watches_watches_Watches_watches ( * watches_3); _30 <- watchidx_6; - _28 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 260 26 260 51] Index0.index _29 _30); + _28 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 260 26 260 51] Index0.index _29 _30); goto BB9 } BB9 { _27 <- _28; _31 <- j_5; - _26 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 260 26 260 54] Index1.index _27 _31); + _26 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 260 26 260 54] Index1.index _27 _31); goto BB10 } BB10 { @@ -21182,7 +20714,7 @@ module CreuSat_UnitProp_PropagateLiteral _33 <- Type.creusat_watches_watcher_Watcher_blocker curr_watch_25; _35 <- Type.creusat_trail_trail_Trail_assignments ( * trail_2); _34 <- _35; - _32 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 261 11 261 57] LitSat0.lit_sat _33 _34); + _32 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 261 11 261 57] LitSat0.lit_sat _33 _34); goto BB11 } BB11 { @@ -21192,7 +20724,7 @@ module CreuSat_UnitProp_PropagateLiteral end } BB12 { - j_5 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 262 12 262 18] j_5 + (1 : usize)); + j_5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 262 12 262 18] j_5 + (1 : usize)); _17 <- (); goto BB21 } @@ -21207,7 +20739,7 @@ module CreuSat_UnitProp_PropagateLiteral _41 <- cref_36; _42 <- lit_4; _43 <- j_5; - _37 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 265 18 265 86] PropagateLitWithRegardToClause0.propagate_lit_with_regard_to_clause _38 _39 _40 _41 _42 _43); + _37 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 265 18 265 86] PropagateLitWithRegardToClause0.propagate_lit_with_regard_to_clause _38 _39 _40 _41 _42 _43); goto BB14 } BB14 { @@ -21238,7 +20770,7 @@ module CreuSat_UnitProp_PropagateLiteral absurd } BB18 { - j_5 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 267 20 267 26] j_5 + (1 : usize)); + j_5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 267 20 267 26] j_5 + (1 : usize)); _17 <- (); goto BB20 } @@ -21273,30 +20805,29 @@ module CreuSat_UnitProp_UnitPropagate_Interface use mach.int.Int32 use Type use seq.Seq - clone CreuSat_Logic_LogicFormula_Impl1_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 clone CreuSat_Logic_LogicClause_Impl2_Unsat_Interface as Unsat1 - clone CreuSat_Logic_LogicFormula_Impl1_Unsat_Interface as Unsat0 + clone CreuSat_Logic_LogicFormula_Impl2_Unsat_Interface as Unsat0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val unit_propagate [@cfg:stackify] (f : borrowed (Type.creusat_formula_formula)) (trail : borrowed (Type.creusat_trail_trail)) (watches : borrowed (Type.creusat_watches_watches)) : Type.core_result_result () usize - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 280 0 280 33] Invariant0.invariant' ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 281 0 281 42] Invariant1.invariant' ( * trail) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 282 0 282 44] Invariant2.invariant' ( * watches) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 283 0 283 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 280 0 280 33] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 281 0 281 42] Invariant1.invariant' ( ^ trail) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 282 0 282 44] Invariant2.invariant' ( ^ watches) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 284 0 287 3] match (result) with + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 280 0 280 33] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 281 0 281 42] Invariant1.invariant' ( * trail) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 282 0 282 44] Invariant2.invariant' ( * watches) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 283 0 283 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 280 0 280 33] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 281 0 281 42] Invariant1.invariant' ( ^ trail) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 282 0 282 44] Invariant2.invariant' ( ^ watches) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 284 0 287 3] match (result) with | Type.Core_Result_Result_Ok () -> true | Type.Core_Result_Result_Err n -> UInt64.to_int n < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) && Unsat0.unsat ( ^ f) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) && Unsat1.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int n)) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) end } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 288 0 288 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 289 0 289 25] Equisat0.equisat ( * f) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 288 0 288 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 289 0 289 25] Equisat0.equisat ( * f) ( ^ f) } end module CreuSat_UnitProp_UnitPropagate @@ -21307,153 +20838,140 @@ module CreuSat_UnitProp_UnitPropagate use Type use seq.Seq use prelude.UInt8 - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner2.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = Invariant6.index_logic, function IndexLogic0.index_logic = SatInner1.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = UnsatInner2.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, + predicate SatInner0.sat_inner = SatInner2.sat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model6 with function Model0.model = Model9.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model5 with function Model0.model = Model8.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with function Model0.model = Model5.model - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with function Model0.model = Model6.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model5.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with function Model0.model = Model6.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant3.invariant', - function Model0.model = Model6.model - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner2 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model6.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner1.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner2.unsat_inner - clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner1 with function Model0.model = Model6.model, - predicate UnsatInner0.unsat_inner = UnsatInner2.unsat_inner - clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat1 with function Model0.model = Model5.model, - predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model6.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 + type a = Type.alloc_alloc_global, function Model0.model = Model6.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model6 with function Model1.model = InvariantMirror0.model, + function Model0.model = FormulaInvariant0.model, function Model2.model = WatchesInvariantInternal0.model, + function Model0.model = UnsatInner1.model, function Model0.model = Invariant3.model, + function Model1.model = UnitAreSat0.model, function Model0.model = LitIdxIn0.model, + function Model0.model = ClausePostWithRegardsToInner0.model, function Model1.model = Invariant7.model, + function Model0.model = SatInner2.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = SatInner0.sat_inner + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with function Model0.model = Model0.model, - function Model1.model = Model6.model - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = Invariant6.invariant', - predicate Invariant1.invariant' = Invariant7.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model0.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicFormula_Impl1_SatInner as SatInner0 with function Model0.model = Model0.model, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_Equisat as Equisat0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model0.model, - function Model1.model = Model6.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model0.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicFormula_Impl1_UnsatInner as UnsatInner0 with function Model0.model = Model0.model, - predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner - clone CreuSat_Logic_LogicFormula_Impl1_Unsat as Unsat0 with function Model0.model = Model5.model, + type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, + function Model0.model = Model2.model, function Model3.model = InvariantNoDecisionMirror0.model, + function Model1.model = WatchesInvariantInternal0.model, function Model0.model = UnsatInner0.model, + function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, + function Model0.model = SatInner0.model, function Model0.model = LitNotInLessInner0.model, + function Model0.model = Invariant7.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner2 with predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner, + predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal + clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model5.model, axiom . + clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model5 with function Model0.model = Unsat0.model, + function Model0.model = Unsat1.model, function Model2.model = InvariantNoDecision0.model, + function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant4.model, + function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner1 with predicate UnsatInner0.unsat_inner = Unsat1.unsat_inner, predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model7.model, - function Model1.model = Model0.model, function Model2.model = Model6.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model0.model, - predicate Invariant0.invariant' = Invariant3.invariant', function Model1.model = Model6.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model2.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . + clone CreuSat_Logic_LogicFormula_Impl2_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant2.watches_invariant_internal + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Invariant0.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 with function Model0.model = Model1.model, - predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model4.model, - function Model1.model = Model5.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model4.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model4.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model3.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model5.model, - function Model1.model = Model4.model, predicate Invariant0.invariant' = Invariant5.invariant', - function Model2.model = Model3.model, function Model3.model = Model0.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant4.invariant', function Model0.model = Model4.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model3.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model5.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model3.model, function Model1.model = Model4.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 + clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat1 + clone CreuSat_Logic_LogicFormula_Impl2_Unsat as Unsat0 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . use mach.int.Int64 + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_trail_step + clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_trail_step, + type Output0.output = Index0.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_trail_step, + predicate HasValue0.has_value = Index0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_trail_step, + predicate InBounds0.in_bounds = Index0.in_bounds clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_watches_watches clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_trail_trail clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_trail_step - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_trail_step - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_trail_step - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_trail_step + clone CreuSat_UnitProp_PropagateLiteral_Interface as PropagateLiteral0 clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.creusat_trail_step, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model4.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - type Output0.output = Output0.output - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, - function Model0.model = Model4.model - clone CreuSat_UnitProp_PropagateLiteral_Interface as PropagateLiteral0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant1.invariant', predicate Invariant2.invariant' = Invariant2.invariant', - function IndexLogic0.index_logic = IndexLogic0.index_logic, function Model0.model = Model0.model, - predicate Unsat0.unsat = Unsat0.unsat, predicate Unsat1.unsat = Unsat1.unsat, - predicate Equisat0.equisat = Equisat0.equisat, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - let rec cfg unit_propagate [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 290 0 290 101] (f : borrowed (Type.creusat_formula_formula)) (trail : borrowed (Type.creusat_trail_trail)) (watches : borrowed (Type.creusat_watches_watches)) : Type.core_result_result () usize - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 280 0 280 33] Invariant0.invariant' ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 281 0 281 42] Invariant1.invariant' ( * trail) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 282 0 282 44] Invariant2.invariant' ( * watches) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 283 0 283 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 280 0 280 33] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 281 0 281 42] Invariant1.invariant' ( ^ trail) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 282 0 282 44] Invariant2.invariant' ( ^ watches) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 284 0 287 3] match (result) with + type a = Type.alloc_alloc_global + clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global + let rec cfg unit_propagate [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 290 0 290 101] (f : borrowed (Type.creusat_formula_formula)) (trail : borrowed (Type.creusat_trail_trail)) (watches : borrowed (Type.creusat_watches_watches)) : Type.core_result_result () usize + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 280 0 280 33] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 281 0 281 42] Invariant1.invariant' ( * trail) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 282 0 282 44] Invariant2.invariant' ( * watches) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 283 0 283 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 280 0 280 33] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 281 0 281 42] Invariant1.invariant' ( ^ trail) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 282 0 282 44] Invariant2.invariant' ( ^ watches) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 284 0 287 3] match (result) with | Type.Core_Result_Result_Ok () -> true | Type.Core_Result_Result_Err n -> UInt64.to_int n < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) && Unsat0.unsat ( ^ f) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) && Unsat1.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int n)) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) end } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 288 0 288 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 289 0 289 25] Equisat0.equisat ( * f) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 288 0 288 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 289 0 289 25] Equisat0.equisat ( * f) ( ^ f) } = var _0 : Type.core_result_result () usize; @@ -21501,39 +21019,39 @@ module CreuSat_UnitProp_UnitPropagate BB0 { i_4 <- Type.creusat_trail_trail_Trail_curr_i ( * trail_2); _6 <- (); - old_trail_5 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 292 20 292 36] trail_2); + old_trail_5 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 292 20 292 36] trail_2); goto BB1 } BB1 { _8 <- (); - old_f_7 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 293 16 293 28] f_1); + old_f_7 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 293 16 293 28] f_1); goto BB2 } BB2 { _10 <- (); - old_w_9 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 294 16 294 34] watches_3); + old_w_9 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 294 16 294 34] watches_3); goto BB3 } BB3 { goto BB4 } BB4 { - invariant f_inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 295 4 295 38] Invariant0.invariant' ( * f_1) }; - invariant trail_inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 296 4 296 48] Invariant1.invariant' ( * trail_2) ( * f_1) }; - invariant watch_len { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 297 4 297 79] Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) = Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * old_w_9))) }; - invariant watch_inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 298 4 298 50] Invariant2.invariant' ( * watches_3) ( * f_1) }; - invariant f_equi { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 299 4 299 43] Equisat0.equisat ( * old_f_7) ( * f_1) }; - invariant nvars_unch { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 300 4 300 60] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f_1)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * old_f_7)) }; - invariant proph_t { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 301 4 301 55] ^ trail_2 = ^ old_trail_5 }; - invariant proph_f { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 302 4 302 47] ^ f_1 = ^ old_f_7 }; - invariant proph_w { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 303 4 303 53] ^ watches_3 = ^ old_w_9 }; + invariant f_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 295 4 295 38] Invariant0.invariant' ( * f_1) }; + invariant trail_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 296 4 296 48] Invariant1.invariant' ( * trail_2) ( * f_1) }; + invariant watch_len { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 297 4 297 79] Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) = Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * old_w_9))) }; + invariant watch_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 298 4 298 50] Invariant2.invariant' ( * watches_3) ( * f_1) }; + invariant f_equi { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 299 4 299 43] Equisat0.equisat ( * old_f_7) ( * f_1) }; + invariant nvars_unch { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 300 4 300 60] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f_1)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * old_f_7)) }; + invariant proph_t { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 301 4 301 55] ^ trail_2 = ^ old_trail_5 }; + invariant proph_f { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 302 4 302 47] ^ f_1 = ^ old_f_7 }; + invariant proph_w { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 303 4 303 53] ^ watches_3 = ^ old_w_9 }; _14 <- i_4; _16 <- Type.creusat_trail_trail_Trail_trail ( * trail_2); - _15 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 304 14 304 31] Len0.len _16); + _15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 304 14 304 31] Len0.len _16); goto BB5 } BB5 { - _13 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 304 10 304 31] _14 < _15); + _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 304 10 304 31] _14 < _15); switch (_13) | False -> goto BB12 | _ -> goto BB6 @@ -21542,7 +21060,7 @@ module CreuSat_UnitProp_UnitPropagate BB6 { _19 <- Type.creusat_trail_trail_Trail_trail ( * trail_2); _20 <- i_4; - _18 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 305 18 305 32] Index0.index _19 _20); + _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 305 18 305 32] Index0.index _19 _20); goto BB7 } BB7 { @@ -21554,7 +21072,7 @@ module CreuSat_UnitProp_UnitPropagate _25 <- borrow_mut ( * watches_3); watches_3 <- { watches_3 with current = ( ^ _25) }; _26 <- lit_17; - _22 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 306 14 306 55] PropagateLiteral0.propagate_literal _23 _24 _25 _26); + _22 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 306 14 306 55] PropagateLiteral0.propagate_literal _23 _24 _25 _26); goto BB8 } BB8 { @@ -21580,7 +21098,7 @@ module CreuSat_UnitProp_UnitPropagate } BB11 { _21 <- (); - i_4 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/unit_prop.rs" 312 8 312 14] i_4 + (1 : usize)); + i_4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 312 8 312 14] i_4 + (1 : usize)); _12 <- (); goto BB4 } @@ -21606,27 +21124,26 @@ module CreuSat_Solver_Impl0_UnitPropStep_Interface use prelude.Prelude use mach.int.Int32 use Type - clone CreuSat_Logic_LogicFormula_Impl1_NotSatisfiable_Interface as NotSatisfiable0 - clone CreuSat_Logic_LogicFormula_Impl1_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface as NotSatisfiable0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant3 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val unit_prop_step [@cfg:stackify] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (d : borrowed (Type.creusat_decision_decisions)) (t : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) : Type.creusat_solver_conflictresult - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 195 4 195 37] Invariant0.invariant' ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 196 4 196 42] Invariant1.invariant' ( * w) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 197 4 197 42] Invariant2.invariant' ( * t) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 198 4 198 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 199 4 199 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 195 4 195 37] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 196 4 196 42] Invariant1.invariant' ( ^ w) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 197 4 197 42] Invariant2.invariant' ( ^ t) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 198 4 198 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 200 4 200 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 201 4 201 29] Equisat0.equisat ( * f) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 202 4 205 7] match (result) with + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 195 4 195 37] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 196 4 196 42] Invariant1.invariant' ( * w) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 197 4 197 42] Invariant2.invariant' ( * t) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 198 4 198 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 199 4 199 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 195 4 195 37] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 196 4 196 42] Invariant1.invariant' ( ^ w) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 197 4 197 42] Invariant2.invariant' ( ^ t) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 198 4 198 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 200 4 200 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 201 4 201 29] Equisat0.equisat ( * f) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 202 4 205 7] match (result) with | Type.CreuSat_Solver_ConflictResult_Ground -> NotSatisfiable0.not_satisfiable ( ^ f) | _ -> true end } @@ -21639,160 +21156,141 @@ module CreuSat_Solver_Impl0_UnitPropStep use mach.int.Int32 use Type use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model8 with function Model0.model = Model10.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with function Model0.model = Model8.model + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = Invariant7.index_logic, function IndexLogic0.index_logic = SatInner1.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, + predicate SatInner0.sat_inner = SatInner2.sat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model5 with function Model0.model = Model9.model - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with function Model0.model = Model5.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss1.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model5.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner1.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model8.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant7.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with function Model0.model = Model5.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant4.invariant', - function Model0.model = Model5.model - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model5.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . + type a = Type.alloc_alloc_global, function Model0.model = Model5.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model5 with function Model0.model = NotSatisfiable0.model, + function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, + function Model2.model = WatchesInvariantInternal0.model, function Model0.model = Invariant4.model, + function Model1.model = UnitAreSat0.model, function Model0.model = LitIdxIn0.model, + function Model0.model = ClausePostWithRegardsToInner0.model, function Model1.model = Invariant8.model, + function Model0.model = SatInner2.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = SatInner0.sat_inner, + predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner + clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss1.formula_sat_inner + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with predicate Invariant0.invariant' = Invariant6.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner, + predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss1.complete_inner + clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with function Model0.model = Model6.model, - function Model1.model = Model5.model - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant7.invariant', - predicate Invariant1.invariant' = Invariant8.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model6.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicFormula_Impl1_SatInner as SatInner0 with function Model0.model = Model6.model, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_Equisat as Equisat0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model6.model, - function Model1.model = Model5.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model6.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model7.model, - function Model1.model = Model6.model, function Model2.model = Model5.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Model6.model - clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with function Model0.model = Model0.model, - predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner - clone CreuSat_Logic_LogicFormula_Impl1_NotSatisfiable as NotSatisfiable0 with function Model0.model = Model5.model, - predicate EquisatExtension0.equisat_extension = EquisatExtension0.equisat_extension - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model6.model, - predicate Invariant0.invariant' = Invariant4.invariant', function Model1.model = Model5.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model0.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant3 with function Model0.model = Model4.model + type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, + function Model0.model = Model0.model, function Model1.model = WatchesInvariantInternal0.model, + function Model3.model = InvariantNoDecisionMirror0.model, function Model0.model = LongArePostUnitInner0.model, + function Model0.model = UnitAreSat0.model, function Model0.model = SatInner0.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant8.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with predicate Invariant1.invariant' = Invariant6.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model8.model, axiom . + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant4.invariant_internal + clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtension0.equisat_extension_inner + clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model8 with function Model2.model = InvariantNoDecision0.model, + function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant5.model, + function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant2.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model3.model, - function Model1.model = Model8.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model3.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model3.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model2.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model8.model, - function Model1.model = Model3.model, predicate Invariant0.invariant' = Invariant6.invariant', - function Model2.model = Model2.model, function Model3.model = Model6.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant5.invariant', function Model0.model = Model3.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model2.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model8.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model2.model, function Model1.model = Model3.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + type a = Type.alloc_alloc_global, function Model1.model = Invariant2.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Invariant0.model, + function Model0.model = EquisatExtension0.model + clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with predicate EquisatExtension0.equisat_extension = NotSatisfiable0.equisat_extension + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_decision_node, + type a = Type.alloc_alloc_global, function Model0.model = Invariant3.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant2.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant2.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant1.watches_invariant_internal clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant1 with function Model0.model = Model1.model, - predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal + type a = Type.alloc_alloc_global, function Model0.model = Invariant1.model, axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable as NotSatisfiable0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 + clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant3 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . use mach.int.Int64 + clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner2 with predicate UnsatInner0.unsat_inner = Unsat1.unsat_inner, + predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner + clone CreuSat_Logic_LogicFormula_Impl2_UnsatInner as UnsatInner1 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner + clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat1 with predicate Unsat1.unsat = UnitPropagate0.unsat, + predicate Unsat0.unsat = HandleConflict0.unsat + clone CreuSat_Logic_LogicFormula_Impl2_Unsat as Unsat0 with predicate Unsat0.unsat = UnitPropagate0.unsat + clone CreuSat_Solver_Impl0_HandleConflict_Interface as HandleConflict0 clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve4 with type t = Type.creusat_watches_watches clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve3 with type t = Type.creusat_trail_trail clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_decision_decisions clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_formula_formula clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_solver_solver - clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner2 with function Model0.model = Model5.model, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat1 with function Model0.model = Model8.model, - predicate UnsatInner0.unsat_inner = UnsatInner2.unsat_inner - clone CreuSat_Logic_LogicFormula_Impl1_UnsatInner as UnsatInner1 with function Model0.model = Model6.model, - predicate UnsatInner0.unsat_inner = UnsatInner2.unsat_inner - clone CreuSat_Logic_LogicFormula_Impl1_Unsat as Unsat0 with function Model0.model = Model8.model, - predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner - clone CreuSat_Solver_Impl0_HandleConflict_Interface as HandleConflict0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant2.invariant', predicate Invariant2.invariant' = Invariant1.invariant', - predicate Invariant3.invariant' = Invariant3.invariant', function Model0.model = Model6.model, - predicate Unsat0.unsat = Unsat1.unsat, predicate Equisat0.equisat = Equisat0.equisat, - predicate NotSatisfiable0.not_satisfiable = NotSatisfiable0.not_satisfiable, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_UnitProp_UnitPropagate_Interface as UnitPropagate0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant2.invariant', predicate Invariant2.invariant' = Invariant1.invariant', - function Model0.model = Model6.model, predicate Unsat0.unsat = Unsat0.unsat, predicate Unsat1.unsat = Unsat1.unsat, - predicate Equisat0.equisat = Equisat0.equisat, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - let rec cfg unit_prop_step [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 206 4 206 118] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (d : borrowed (Type.creusat_decision_decisions)) (t : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) : Type.creusat_solver_conflictresult - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 195 4 195 37] Invariant0.invariant' ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 196 4 196 42] Invariant1.invariant' ( * w) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 197 4 197 42] Invariant2.invariant' ( * t) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 198 4 198 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 199 4 199 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 195 4 195 37] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 196 4 196 42] Invariant1.invariant' ( ^ w) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 197 4 197 42] Invariant2.invariant' ( ^ t) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 198 4 198 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 200 4 200 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 201 4 201 29] Equisat0.equisat ( * f) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 202 4 205 7] match (result) with + clone CreuSat_UnitProp_UnitPropagate_Interface as UnitPropagate0 + let rec cfg unit_prop_step [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 206 4 206 118] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (d : borrowed (Type.creusat_decision_decisions)) (t : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) : Type.creusat_solver_conflictresult + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 195 4 195 37] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 196 4 196 42] Invariant1.invariant' ( * w) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 197 4 197 42] Invariant2.invariant' ( * t) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 198 4 198 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 199 4 199 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 195 4 195 37] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 196 4 196 42] Invariant1.invariant' ( ^ w) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 197 4 197 42] Invariant2.invariant' ( ^ t) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 198 4 198 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 200 4 200 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 201 4 201 29] Equisat0.equisat ( * f) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 202 4 205 7] match (result) with | Type.CreuSat_Solver_ConflictResult_Ground -> NotSatisfiable0.not_satisfiable ( ^ f) | _ -> true end } @@ -21833,7 +21331,7 @@ module CreuSat_Solver_Impl0_UnitPropStep t_4 <- { t_4 with current = ( ^ _8) }; _9 <- borrow_mut ( * w_5); w_5 <- { w_5 with current = ( ^ _9) }; - _6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 207 14 207 37] UnitPropagate0.unit_propagate _7 _8 _9); + _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 207 14 207 37] UnitPropagate0.unit_propagate _7 _8 _9); goto BB1 } BB1 { @@ -21855,7 +21353,7 @@ module CreuSat_Solver_Impl0_UnitPropStep w_5 <- { w_5 with current = ( ^ _17) }; _18 <- borrow_mut ( * d_3); d_3 <- { d_3 with current = ( ^ _18) }; - _12 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 209 31 209 69] HandleConflict0.handle_conflict _13 _14 _15 _16 _17 _18); + _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 209 31 209 69] HandleConflict0.handle_conflict _13 _14 _15 _16 _17 _18); goto BB5 } BB3 { @@ -21921,31 +21419,30 @@ module CreuSat_Solver_Impl0_UnitPropLoop_Interface use prelude.Prelude use mach.int.Int32 use Type - clone CreuSat_Logic_LogicFormula_Impl1_Equisat_Interface as Equisat0 - clone CreuSat_Logic_LogicFormula_Impl1_NotSatisfiable_Interface as NotSatisfiable0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface as NotSatisfiable0 clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant3 clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val unit_prop_loop [@cfg:stackify] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (d : borrowed (Type.creusat_decision_decisions)) (t : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) : Type.core_option_option bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 218 4 218 37] Invariant0.invariant' ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 219 4 219 42] Invariant1.invariant' ( * t) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 220 4 220 42] Invariant2.invariant' ( * w) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 221 4 221 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 222 4 222 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 218 4 218 37] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 219 4 219 42] Invariant1.invariant' ( ^ t) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 220 4 220 42] Invariant2.invariant' ( ^ w) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 221 4 221 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 223 4 227 7] match (result) with + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 218 4 218 37] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 219 4 219 42] Invariant1.invariant' ( * t) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 220 4 220 42] Invariant2.invariant' ( * w) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 221 4 221 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 222 4 222 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 218 4 218 37] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 219 4 219 42] Invariant1.invariant' ( ^ t) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 220 4 220 42] Invariant2.invariant' ( ^ w) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 221 4 221 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 223 4 227 7] match (result) with | Type.Core_Option_Option_Some (False) -> NotSatisfiable0.not_satisfiable ( ^ f) | Type.Core_Option_Option_Some (True) -> true | Type.Core_Option_Option_None -> true end } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 228 4 228 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 229 4 229 29] Equisat0.equisat ( * f) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 228 4 228 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 229 4 229 29] Equisat0.equisat ( * f) ( ^ f) } end module CreuSat_Solver_Impl0_UnitPropLoop @@ -21955,150 +21452,138 @@ module CreuSat_Solver_Impl0_UnitPropLoop use mach.int.Int32 use Type use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model7 with function Model0.model = Model10.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with function Model0.model = Model7.model + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = Invariant7.index_logic, function IndexLogic0.index_logic = SatInner1.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, + predicate SatInner0.sat_inner = SatInner2.sat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model5 with function Model0.model = Model9.model - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with function Model0.model = Model5.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss1.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model5.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner1.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model7.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant7.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with function Model0.model = Model5.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant4.invariant', - function Model0.model = Model5.model - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model5.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 + type a = Type.alloc_alloc_global, function Model0.model = Model5.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model5 with function Model0.model = NotSatisfiable0.model, + function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, + function Model2.model = WatchesInvariantInternal0.model, function Model0.model = Invariant4.model, + function Model1.model = UnitAreSat0.model, function Model0.model = LitIdxIn0.model, + function Model0.model = ClausePostWithRegardsToInner0.model, function Model1.model = Invariant8.model, + function Model0.model = SatInner2.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = SatInner0.sat_inner, + predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner + clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss1.formula_sat_inner + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with predicate Invariant0.invariant' = Invariant6.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner, + predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss1.complete_inner + clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with function Model0.model = Model6.model, - function Model1.model = Model5.model - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant7.invariant', - predicate Invariant1.invariant' = Invariant8.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model6.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicFormula_Impl1_SatInner as SatInner0 with function Model0.model = Model6.model, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_Equisat as Equisat0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model6.model, - function Model1.model = Model5.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model6.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model8.model, - function Model1.model = Model6.model, function Model2.model = Model5.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Model6.model - clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with function Model0.model = Model0.model, - predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner - clone CreuSat_Logic_LogicFormula_Impl1_NotSatisfiable as NotSatisfiable0 with function Model0.model = Model5.model, - predicate EquisatExtension0.equisat_extension = EquisatExtension0.equisat_extension - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model6.model, - predicate Invariant0.invariant' = Invariant4.invariant', function Model1.model = Model5.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model0.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . + type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, + function Model0.model = Model0.model, function Model3.model = InvariantNoDecisionMirror0.model, + function Model1.model = WatchesInvariantInternal0.model, function Model0.model = LongArePostUnitInner0.model, + function Model0.model = UnitAreSat0.model, function Model0.model = SatInner0.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant8.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with predicate Invariant1.invariant' = Invariant6.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model7.model, axiom . + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant4.invariant_internal + clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner + clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtension0.equisat_extension_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model7 with function Model2.model = InvariantNoDecision0.model, + function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant5.model, + function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Invariant0.model, + function Model0.model = EquisatExtension0.model + clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with predicate EquisatExtension0.equisat_extension = NotSatisfiable0.equisat_extension clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant3 with function Model0.model = Model4.model + type a = Type.alloc_alloc_global, function Model0.model = Invariant3.model, axiom . + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant2.watches_invariant_internal clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 with function Model0.model = Model3.model, - predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model2.model, - function Model1.model = Model7.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model2.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model2.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model1.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model7.model, - function Model1.model = Model2.model, predicate Invariant0.invariant' = Invariant6.invariant', - function Model2.model = Model1.model, function Model3.model = Model6.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant5.invariant', function Model0.model = Model2.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model1.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model7.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model1.model, function Model1.model = Model2.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable as NotSatisfiable0 + clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant3 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . use mach.int.Int64 clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve4 with type t = Type.creusat_watches_watches clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve3 with type t = Type.creusat_trail_trail clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_decision_decisions clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_formula_formula clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_solver_solver - clone CreuSat_Solver_Impl0_UnitPropStep_Interface as UnitPropStep0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant2.invariant', predicate Invariant2.invariant' = Invariant1.invariant', - predicate Invariant3.invariant' = Invariant3.invariant', predicate Equisat0.equisat = Equisat0.equisat, - predicate NotSatisfiable0.not_satisfiable = NotSatisfiable0.not_satisfiable, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - let rec cfg unit_prop_loop [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 230 4 230 116] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (d : borrowed (Type.creusat_decision_decisions)) (t : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) : Type.core_option_option bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 218 4 218 37] Invariant0.invariant' ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 219 4 219 42] Invariant1.invariant' ( * t) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 220 4 220 42] Invariant2.invariant' ( * w) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 221 4 221 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 222 4 222 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 218 4 218 37] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 219 4 219 42] Invariant1.invariant' ( ^ t) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 220 4 220 42] Invariant2.invariant' ( ^ w) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 221 4 221 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 223 4 227 7] match (result) with + clone CreuSat_Solver_Impl0_UnitPropStep_Interface as UnitPropStep0 + let rec cfg unit_prop_loop [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 230 4 230 116] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (d : borrowed (Type.creusat_decision_decisions)) (t : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) : Type.core_option_option bool + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 218 4 218 37] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 219 4 219 42] Invariant1.invariant' ( * t) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 220 4 220 42] Invariant2.invariant' ( * w) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 221 4 221 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 222 4 222 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 218 4 218 37] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 219 4 219 42] Invariant1.invariant' ( ^ t) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 220 4 220 42] Invariant2.invariant' ( ^ w) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 221 4 221 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 223 4 227 7] match (result) with | Type.Core_Option_Option_Some (False) -> NotSatisfiable0.not_satisfiable ( ^ f) | Type.Core_Option_Option_Some (True) -> true | Type.Core_Option_Option_None -> true end } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 228 4 228 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 229 4 229 29] Equisat0.equisat ( * f) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 228 4 228 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 229 4 229 29] Equisat0.equisat ( * f) ( ^ f) } = var _0 : Type.core_option_option bool; @@ -22137,38 +21622,38 @@ module CreuSat_Solver_Impl0_UnitPropLoop } BB0 { _7 <- (); - old_f_6 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 231 20 231 32] f_2); + old_f_6 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 231 20 231 32] f_2); goto BB1 } BB1 { _9 <- (); - old_t_8 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 232 20 232 32] t_4); + old_t_8 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 232 20 232 32] t_4); goto BB2 } BB2 { _11 <- (); - old_w_10 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 233 20 233 32] w_5); + old_w_10 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 233 20 233 32] w_5); goto BB3 } BB3 { _13 <- (); - old_d_12 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 234 20 234 32] d_3); + old_d_12 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 234 20 234 32] d_3); goto BB4 } BB4 { goto BB5 } BB5 { - invariant maintains_f { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 235 8 235 48] Invariant0.invariant' ( * f_2) }; - invariant maintains_t { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 236 8 236 50] Invariant1.invariant' ( * t_4) ( * f_2) }; - invariant maintains_w { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 237 8 237 50] Invariant2.invariant' ( * w_5) ( * f_2) }; - invariant maintains_d { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 238 8 238 59] Invariant3.invariant' ( * d_3) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f_2))) }; - invariant equi { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 239 8 239 53] Equisat0.equisat ( * old_f_6) ( * f_2) }; - invariant num_vars { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 240 8 240 62] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f_2)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * old_f_6)) }; - invariant prophf { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 241 8 241 50] ^ f_2 = ^ old_f_6 }; - invariant propht { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 242 8 242 50] ^ t_4 = ^ old_t_8 }; - invariant prophw { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 243 8 243 50] ^ w_5 = ^ old_w_10 }; - invariant prophd { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 244 8 244 50] ^ d_3 = ^ old_d_12 }; + invariant maintains_f { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 235 8 235 48] Invariant0.invariant' ( * f_2) }; + invariant maintains_t { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 236 8 236 50] Invariant1.invariant' ( * t_4) ( * f_2) }; + invariant maintains_w { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 237 8 237 50] Invariant2.invariant' ( * w_5) ( * f_2) }; + invariant maintains_d { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 238 8 238 59] Invariant3.invariant' ( * d_3) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f_2))) }; + invariant equi { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 239 8 239 53] Equisat0.equisat ( * old_f_6) ( * f_2) }; + invariant num_vars { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 240 8 240 62] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f_2)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * old_f_6)) }; + invariant prophf { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 241 8 241 50] ^ f_2 = ^ old_f_6 }; + invariant propht { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 242 8 242 50] ^ t_4 = ^ old_t_8 }; + invariant prophw { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 243 8 243 50] ^ w_5 = ^ old_w_10 }; + invariant prophd { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 244 8 244 50] ^ d_3 = ^ old_d_12 }; _17 <- borrow_mut ( * self_1); self_1 <- { self_1 with current = ( ^ _17) }; _18 <- borrow_mut ( * f_2); @@ -22179,7 +21664,7 @@ module CreuSat_Solver_Impl0_UnitPropLoop t_4 <- { t_4 with current = ( ^ _20) }; _21 <- borrow_mut ( * w_5); w_5 <- { w_5 with current = ( ^ _21) }; - _16 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 246 18 246 49] UnitPropStep0.unit_prop_step _17 _18 _19 _20 _21); + _16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 246 18 246 49] UnitPropStep0.unit_prop_step _17 _18 _19 _20 _21); goto BB6 } BB6 { @@ -22242,26 +21727,25 @@ module CreuSat_Trail_Impl0_EnqDecision_Interface use prelude.UInt8 use prelude.Prelude use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror clone CreuSat_Logic_LogicTrail_LongArePostUnitInner_Interface as LongArePostUnitInner0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, axiom . clone CreuSat_Logic_Logic_Unset_Interface as Unset0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val enq_decision [@cfg:stackify] (self : borrowed (Type.creusat_trail_trail)) (idx : usize) (_f : Type.creusat_formula_formula) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 268 4 268 31] Invariant0.invariant' _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 269 4 269 43] Invariant1.invariant' ( * self) _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 270 4 270 36] UInt64.to_int idx < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 271 4 271 49] Unset0.unset (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self))) (UInt64.to_int idx))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 275 4 275 78] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self))) _f (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 269 4 269 43] Invariant1.invariant' ( ^ self) _f } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 272 4 273 76] forall j : (int) . 0 <= j && j < Seq.length (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self))) && j <> UInt64.to_int idx -> Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self))) j = Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) j } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 274 4 274 88] UInt8.to_int (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) (UInt64.to_int idx)) = 1 || UInt8.to_int (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) (UInt64.to_int idx)) = 0 } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 276 4 276 87] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) _f (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 277 4 277 65] Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) = 1 + Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self))) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 268 4 268 31] Invariant0.invariant' _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 269 4 269 43] Invariant1.invariant' ( * self) _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 270 4 270 36] UInt64.to_int idx < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 271 4 271 49] Unset0.unset (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self))) (UInt64.to_int idx))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 275 4 275 78] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self))) _f (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 269 4 269 43] Invariant1.invariant' ( ^ self) _f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 272 4 273 76] forall j : (int) . 0 <= j && j < Seq.length (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self))) && j <> UInt64.to_int idx -> Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self))) j = Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) j } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 274 4 274 88] UInt8.to_int (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) (UInt64.to_int idx)) = 1 || UInt8.to_int (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) (UInt64.to_int idx)) = 0 } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 276 4 276 87] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) _f (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 277 4 277 65] Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) = 1 + Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self))) } end module CreuSat_Trail_Impl0_EnqDecision @@ -22272,135 +21756,122 @@ module CreuSat_Trail_Impl0_EnqDecision use prelude.UInt8 use prelude.Prelude use Type - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, function IndexLogic0.index_logic = SatInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic, function IndexLogic0.index_logic = Invariant5.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = Invariant4.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model6 with function Model0.model = Model7.model - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant5 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with function Model0.model = Model6.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant2.invariant', - function Model0.model = Model6.model - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model6.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner0.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model6.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic + type a = Type.alloc_alloc_global, function Model0.model = Model6.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model6 with function Model1.model = InvariantMirror0.model, + function Model0.model = FormulaInvariant0.model, function Model0.model = ClausePostWithRegardsToInner0.model, + function Model0.model = Invariant2.model, function Model1.model = UnitAreSat0.model, + function Model0.model = LitIdxIn0.model, function Model1.model = Invariant6.model clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant6 with function Model0.model = Model5.model, - function Model1.model = Model6.model - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = Invariant5.invariant', - predicate Invariant1.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant4.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model5.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Model5.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model5.model, - predicate Invariant0.invariant' = Invariant2.invariant', function Model1.model = Model6.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model2.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model5.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model0 with function Model0.model = Model4.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model0.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model5.model, - function Model1.model = Model6.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant3 with function Model0.model = Model0.model + type a = Type.alloc_alloc_global, function Model0.model = LongArePostUnitInner0.model, + function Model0.model = InvariantMirror0.model, function Model0.model = Model2.model, + function Model3.model = InvariantNoDecisionMirror0.model, function Model0.model = LitNotInLessInner0.model, + function Model0.model = UnitAreSat0.model, function Model0.model = Invariant6.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant6 with predicate Invariant1.invariant' = Invariant4.invariant' + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant2.invariant_internal + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, + predicate SatInner0.sat_inner = Sat0.sat_inner + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model0.model, axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model0 with function Model1.model = TrailEntriesAreAssigned0.model, + function Model2.model = InvariantNoDecision0.model, function Model0.model = InvariantNoDecisionMirror0.model, + function Model0.model = Invariant3.model, function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model1.model, - function Model1.model = Model0.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model1.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model1.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model3.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model0.model, - function Model1.model = Model1.model, predicate Invariant0.invariant' = Invariant4.invariant', - function Model2.model = Model3.model, function Model3.model = Model5.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant3.invariant', function Model0.model = Model1.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model3.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model0.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model3.model, function Model1.model = Model1.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, function Model0.model = InvariantNoDecision0.model, + function Model1.model = InvariantNoDecisionMirror0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Invariant0.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_Logic_Unset as Unset0 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model8.modelTy, + type ModelTy0.modelTy = Model9.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model as Model9 with type t = Type.creusat_assignments_assignments, + function Model0.model = PhaseSaved0.model + clone CreusotContracts_Logic_Model_Impl1_Model as Model8 with type t = Type.creusat_assignments_assignments, + function Model0.model = IndexMut1.model + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = usize + clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize, type Output0.output = IndexMut0.output + clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = usize, + predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize, + predicate HasValue0.has_value = IndexMut0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize, + predicate InBounds0.in_bounds = IndexMut0.in_bounds clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_trail_trail + clone Alloc_Vec_Impl1_Push_Interface as Push1 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global + clone CreuSat_Lit_Impl1_PhaseSaved_Interface as PhaseSaved0 clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = uint8 - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy1 + clone CreuSat_Assignments_Impl1_IndexMut_Interface as IndexMut1 clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = usize - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = usize - clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = usize - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize - clone CreusotContracts_Logic_Model_Impl0_Model as Model9 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model0.model - clone CreuSat_Lit_Impl1_PhaseSaved_Interface as PhaseSaved0 with function Model0.model = Model9.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic - clone CreusotContracts_Logic_Model_Impl1_Model as Model8 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model0.model - clone CreuSat_Assignments_Impl1_IndexMut_Interface as IndexMut1 with function Model0.model = Model8.model, - function Model1.model = Model0.model - clone Alloc_Vec_Impl1_Push_Interface as Push1 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, - function Model0.model = Model1.model - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, - function Model0.model = Model1.model clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = usize, type i = usize, - type a = Type.alloc_alloc_global, function Model0.model = Model3.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - predicate ResolveElswhere0.resolve_elswhere = ResolveElswhere0.resolve_elswhere, type Output0.output = Output0.output - clone Alloc_Vec_Impl1_Len_Interface as Len1 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Model3.model - clone Alloc_Vec_Impl1_Push_Interface as Push0 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Model3.model - let rec cfg enq_decision [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 278 4 278 60] (self : borrowed (Type.creusat_trail_trail)) (idx : usize) (_f : Type.creusat_formula_formula) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 268 4 268 31] Invariant0.invariant' _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 269 4 269 43] Invariant1.invariant' ( * self) _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 270 4 270 36] UInt64.to_int idx < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 271 4 271 49] Unset0.unset (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self))) (UInt64.to_int idx))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 275 4 275 78] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self))) _f (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 269 4 269 43] Invariant1.invariant' ( ^ self) _f } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 272 4 273 76] forall j : (int) . 0 <= j && j < Seq.length (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self))) && j <> UInt64.to_int idx -> Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self))) j = Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) j } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 274 4 274 88] UInt8.to_int (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) (UInt64.to_int idx)) = 1 || UInt8.to_int (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) (UInt64.to_int idx)) = 0 } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 276 4 276 87] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) _f (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 277 4 277 65] Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) = 1 + Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self))) } + type a = Type.alloc_alloc_global + clone Alloc_Vec_Impl1_Len_Interface as Len1 with type t = usize, type a = Type.alloc_alloc_global + clone Alloc_Vec_Impl1_Push_Interface as Push0 with type t = usize, type a = Type.alloc_alloc_global + clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global + let rec cfg enq_decision [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 278 4 278 60] (self : borrowed (Type.creusat_trail_trail)) (idx : usize) (_f : Type.creusat_formula_formula) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 268 4 268 31] Invariant0.invariant' _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 269 4 269 43] Invariant1.invariant' ( * self) _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 270 4 270 36] UInt64.to_int idx < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 271 4 271 49] Unset0.unset (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self))) (UInt64.to_int idx))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 275 4 275 78] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self))) _f (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 269 4 269 43] Invariant1.invariant' ( ^ self) _f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 272 4 273 76] forall j : (int) . 0 <= j && j < Seq.length (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self))) && j <> UInt64.to_int idx -> Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self))) j = Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) j } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 274 4 274 88] UInt8.to_int (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) (UInt64.to_int idx)) = 1 || UInt8.to_int (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) (UInt64.to_int idx)) = 0 } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 276 4 276 87] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) _f (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 277 4 277 65] Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) = 1 + Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self))) } = var _0 : (); @@ -22444,19 +21915,19 @@ module CreuSat_Trail_Impl0_EnqDecision } BB0 { _5 <- Type.creusat_trail_trail_Trail_trail ( * self_1); - trail_len_4 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 279 24 279 40] Len0.len _5); + trail_len_4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 279 24 279 40] Len0.len _5); goto BB1 } BB1 { _7 <- borrow_mut (Type.creusat_trail_trail_Trail_decisions ( * self_1)); self_1 <- { self_1 with current = (let Type.CreuSat_Trail_Trail a b c d e = * self_1 in Type.CreuSat_Trail_Trail a b c d ( ^ _7)) }; _8 <- trail_len_4; - _6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 280 8 280 38] Push0.push _7 _8); + _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 280 8 280 38] Push0.push _7 _8); goto BB2 } BB2 { _10 <- Type.creusat_trail_trail_Trail_decisions ( * self_1); - dlevel_9 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 281 21 281 41] Len1.len _10); + dlevel_9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 281 21 281 41] Len1.len _10); goto BB3 } BB3 { @@ -22464,7 +21935,7 @@ module CreuSat_Trail_Impl0_EnqDecision _13 <- borrow_mut (Type.creusat_trail_trail_Trail_lit_to_level ( * self_1)); self_1 <- { self_1 with current = (let Type.CreuSat_Trail_Trail a b c d e = * self_1 in Type.CreuSat_Trail_Trail a ( ^ _13) c d e) }; _14 <- idx_2; - _12 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 282 8 282 30] IndexMut0.index_mut _13 _14); + _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 282 8 282 30] IndexMut0.index_mut _13 _14); goto BB4 } BB4 { @@ -22473,16 +21944,16 @@ module CreuSat_Trail_Impl0_EnqDecision _16 <- borrow_mut (Type.creusat_trail_trail_Trail_assignments ( * self_1)); self_1 <- { self_1 with current = (let Type.CreuSat_Trail_Trail a b c d e = * self_1 in Type.CreuSat_Trail_Trail ( ^ _16) b c d e) }; _17 <- idx_2; - _15 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 283 8 283 29] IndexMut1.index_mut _16 _17); + _15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 283 8 283 29] IndexMut1.index_mut _16 _17); goto BB5 } BB5 { - _15 <- { _15 with current = ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 283 8 283 34] * _15 - (2 : uint8)) }; + _15 <- { _15 with current = ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 283 8 283 34] * _15 - (2 : uint8)) }; assume { Resolve1.resolve _15 }; _19 <- idx_2; _21 <- Type.creusat_trail_trail_Trail_assignments ( * self_1); _20 <- _21; - lit_18 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 284 18 284 58] PhaseSaved0.phase_saved _19 _20); + lit_18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 284 18 284 58] PhaseSaved0.phase_saved _19 _20); goto BB6 } BB6 { @@ -22493,18 +21964,18 @@ module CreuSat_Trail_Impl0_EnqDecision _27 <- borrow_mut (Type.creusat_trail_trail_Trail_trail ( * self_1)); self_1 <- { self_1 with current = (let Type.CreuSat_Trail_Trail a b c d e = * self_1 in Type.CreuSat_Trail_Trail a b ( ^ _27) d e) }; _28 <- step_22; - _26 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 288 8 288 29] Push1.push _27 _28); + _26 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 288 8 288 29] Push1.push _27 _28); goto BB7 } BB7 { assume { Resolve2.resolve self_1 }; - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 289 8 289 48] LitNotInLess0.lit_not_in_less ( * self_1) _f_3 }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 289 8 289 48] LitNotInLess0.lit_not_in_less ( * self_1) _f_3 }; _29 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 292 8 292 84] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) _f_3 (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 292 8 292 84] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) _f_3 (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) }; _30 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 296 8 296 43] LitIsUnique0.lit_is_unique ( * self_1) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 296 8 296 43] LitIsUnique0.lit_is_unique ( * self_1) }; _31 <- (); - assert { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 297 8 297 56] TrailEntriesAreAssigned0.trail_entries_are_assigned ( * self_1) }; + assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 297 8 297 56] TrailEntriesAreAssigned0.trail_entries_are_assigned ( * self_1) }; _32 <- (); _0 <- (); return _0 @@ -22517,30 +21988,29 @@ module CreuSat_Solver_Impl0_OuterLoop_Interface use prelude.Prelude use mach.int.Int32 use Type - clone CreuSat_Logic_LogicFormula_Impl1_NotSatisfiable_Interface as NotSatisfiable0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface as NotSatisfiable0 clone CreuSat_Logic_LogicAssignments_Impl1_Complete_Interface as Complete0 - clone CreuSat_Logic_LogicFormula_Impl1_Sat_Interface as Sat0 - clone CreuSat_Logic_LogicFormula_Impl1_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicFormula_Impl2_Sat_Interface as Sat0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant3 clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val outer_loop [@cfg:stackify] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (d : borrowed (Type.creusat_decision_decisions)) (trail : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) : Type.creusat_solver_satresult - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 262 4 262 37] Invariant0.invariant' ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 263 4 263 46] Invariant1.invariant' ( * trail) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 264 4 264 42] Invariant2.invariant' ( * w) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 265 4 265 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 266 4 266 41] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 267 4 267 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 262 4 262 37] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 263 4 263 46] Invariant1.invariant' ( ^ trail) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 264 4 264 42] Invariant2.invariant' ( ^ w) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 265 4 265 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 268 4 268 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 269 4 269 29] Equisat0.equisat ( * f) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 270 4 276 7] match (result) with + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 262 4 262 37] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 263 4 263 46] Invariant1.invariant' ( * trail) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 264 4 264 42] Invariant2.invariant' ( * w) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 265 4 265 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 266 4 266 41] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 267 4 267 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 262 4 262 37] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 263 4 263 46] Invariant1.invariant' ( ^ trail) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 264 4 264 42] Invariant2.invariant' ( ^ w) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 265 4 265 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 268 4 268 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 269 4 269 29] Equisat0.equisat ( * f) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 270 4 276 7] match (result) with | Type.CreuSat_Solver_SatResult_Sat _ -> Sat0.sat ( ^ f) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) && Complete0.complete (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) | Type.CreuSat_Solver_SatResult_Unsat -> NotSatisfiable0.not_satisfiable ( ^ f) | Type.CreuSat_Solver_SatResult_Unknown -> true @@ -22555,179 +22025,150 @@ module CreuSat_Solver_Impl0_OuterLoop use mach.int.Int32 use Type use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner2.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = Invariant7.index_logic, function IndexLogic0.index_logic = SatInner2.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with predicate Invariant0.invariant' = Invariant6.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner2 with predicate SatInner0.sat_inner = Sat1.sat_inner, + predicate SatInner0.sat_inner = SatInner1.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model6 with function Model0.model = Model10.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model5 with function Model0.model = Model9.model - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with function Model0.model = Model5.model - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner2 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model6.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner2.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner1 with function Model0.model = Model6.model, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat1 with function Model0.model = Model5.model, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant7.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with function Model0.model = Model6.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant4.invariant', - function Model0.model = Model6.model - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model6.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with function Model0.model = Model7.model, - function Model1.model = Model6.model - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant7.invariant', - predicate Invariant1.invariant' = Invariant8.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model7.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicFormula_Impl1_SatInner as SatInner0 with function Model0.model = Model7.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model7.model, - function Model1.model = Model6.model, predicate Sat0.sat = Sat1.sat - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model7.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model8.model, - function Model1.model = Model7.model, function Model2.model = Model6.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Model7.model - clone CreuSat_Logic_LogicFormula_Impl1_Sat as Sat0 with function Model0.model = Model0.model, - function Model1.model = Model5.model, - predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model7.model, - predicate Invariant0.invariant' = Invariant4.invariant', function Model1.model = Model6.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model0.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss1.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with function Model0.model = Model0.model, - predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner - clone CreuSat_Logic_LogicFormula_Impl1_NotSatisfiable as NotSatisfiable0 with function Model0.model = Model6.model, - predicate EquisatExtension0.equisat_extension = EquisatExtension0.equisat_extension - clone CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, + type a = Type.alloc_alloc_global, function Model0.model = Model6.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model6 with function Model0.model = NotSatisfiable0.model, + function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, + function Model2.model = WatchesInvariantInternal0.model, function Model0.model = Invariant4.model, + function Model1.model = UnitAreSat0.model, function Model0.model = LitIdxIn0.model, + function Model0.model = SatInner1.model, function Model0.model = ClausePostWithRegardsToInner0.model, + function Model1.model = Invariant8.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner1 with predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner, predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_Equisat as Equisat0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicAssignments_Impl1_Complete as Complete0 with function Model0.model = Model5.model, - predicate Unset0.unset = Unset0.unset + clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = Sat0.formula_sat_inner, + predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss1.formula_sat_inner + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = Complete0.unset, + predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner, + predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss1.complete_inner + clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range + clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, + function Model0.model = Model0.model, function Model3.model = InvariantNoDecisionMirror0.model, + function Model1.model = WatchesInvariantInternal0.model, function Model0.model = LongArePostUnitInner0.model, + function Model0.model = UnitAreSat0.model, function Model0.model = SatInner0.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant8.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with predicate Invariant1.invariant' = Invariant6.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant4.invariant_internal + clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtension0.equisat_extension_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model5.model, axiom . + clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model5 with function Model1.model = Sat0.model, + function Model0.model = Complete0.model, function Model2.model = InvariantNoDecision0.model, + function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant5.model, + function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat1.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat1 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Invariant0.model, + function Model0.model = Sat0.model, function Model0.model = EquisatExtension0.model + clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with predicate EquisatExtension0.equisat_extension = NotSatisfiable0.equisat_extension + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant3 with function Model0.model = Model4.model + type a = Type.alloc_alloc_global, function Model0.model = Invariant3.model, axiom . + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant2.watches_invariant_internal clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 with function Model0.model = Model3.model, - predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model2.model, - function Model1.model = Model5.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model2.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model2.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model1.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model5.model, - function Model1.model = Model2.model, predicate Invariant0.invariant' = Invariant6.invariant', - function Model2.model = Model1.model, function Model3.model = Model7.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat1.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant5.invariant', function Model0.model = Model2.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model1.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model5.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model1.model, function Model1.model = Model2.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable as NotSatisfiable0 + clone CreuSat_Logic_LogicAssignments_Impl1_Complete as Complete0 + clone CreuSat_Logic_LogicFormula_Impl2_Sat as Sat0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 + clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant3 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . use mach.int.Int64 + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model11.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_assignments_assignments, + function Model0.model = GetNext0.model + clone Alloc_Vec_Impl0_New_Interface as New0 with type t = uint8 + clone CreuSat_Formula_Impl2_IsSat_Interface as IsSat0 + clone CreuSat_Trail_Impl0_EnqDecision_Interface as EnqDecision0 clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve4 with type t = Type.creusat_trail_trail clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve3 with type t = Type.creusat_formula_formula clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_decision_decisions - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 + clone CreuSat_Decision_Impl1_GetNext_Interface as GetNext0 + clone CreuSat_Trail_Impl0_BacktrackTo_Interface as BacktrackTo0 clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_watches_watches clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_solver_solver - clone Alloc_Vec_Impl0_New_Interface as New0 with type t = uint8, function Model0.model = Model9.model - clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model5.model - clone CreuSat_Formula_Impl2_IsSat_Interface as IsSat0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant5.invariant', predicate Sat0.sat = Sat0.sat, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_Decision_Impl1_GetNext_Interface as GetNext0 with predicate Invariant0.invariant' = Invariant3.invariant', - predicate Invariant1.invariant' = Invariant5.invariant', function Model0.model = Model11.model, - predicate Unset0.unset = Unset0.unset, predicate Complete0.complete = Complete0.complete - clone CreuSat_Trail_Impl0_DecisionLevel_Interface as DecisionLevel0 with function Model0.model = Model1.model - clone CreuSat_Trail_Impl0_EnqDecision_Interface as EnqDecision0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant1.invariant', function Model0.model = Model5.model, - predicate Unset0.unset = Unset0.unset, function Model1.model = Model2.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_Trail_Impl0_BacktrackTo_Interface as BacktrackTo0 with function Model0.model = Model1.model, - predicate Invariant0.invariant' = Invariant0.invariant', predicate Invariant1.invariant' = Invariant1.invariant', - predicate Invariant2.invariant' = Invariant3.invariant', function Model1.model = Model2.model, - function Model2.model = Model5.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_Formula_Impl2_ReduceDb_Interface as ReduceDb0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant2.invariant', predicate Invariant2.invariant' = Invariant1.invariant', - predicate Equisat0.equisat = Equisat0.equisat, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_Solver_Impl0_UnitPropLoop_Interface as UnitPropLoop0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant1.invariant', predicate Invariant2.invariant' = Invariant2.invariant', - predicate Invariant3.invariant' = Invariant3.invariant', - predicate NotSatisfiable0.not_satisfiable = NotSatisfiable0.not_satisfiable, - predicate Equisat0.equisat = Equisat0.equisat, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - let rec cfg outer_loop [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 277 4 277 113] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (d : borrowed (Type.creusat_decision_decisions)) (trail : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) : Type.creusat_solver_satresult - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 262 4 262 37] Invariant0.invariant' ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 263 4 263 46] Invariant1.invariant' ( * trail) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 264 4 264 42] Invariant2.invariant' ( * w) ( * f)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 265 4 265 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 266 4 266 41] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 267 4 267 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 262 4 262 37] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 263 4 263 46] Invariant1.invariant' ( ^ trail) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 264 4 264 42] Invariant2.invariant' ( ^ w) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 265 4 265 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 268 4 268 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 269 4 269 29] Equisat0.equisat ( * f) ( ^ f) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 270 4 276 7] match (result) with + clone CreuSat_Formula_Impl2_ReduceDb_Interface as ReduceDb0 + clone CreuSat_Trail_Impl0_DecisionLevel_Interface as DecisionLevel0 + clone CreuSat_Solver_Impl0_UnitPropLoop_Interface as UnitPropLoop0 + let rec cfg outer_loop [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 277 4 277 113] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (d : borrowed (Type.creusat_decision_decisions)) (trail : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) : Type.creusat_solver_satresult + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 262 4 262 37] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 263 4 263 46] Invariant1.invariant' ( * trail) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 264 4 264 42] Invariant2.invariant' ( * w) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 265 4 265 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 266 4 266 41] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 267 4 267 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 262 4 262 37] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 263 4 263 46] Invariant1.invariant' ( ^ trail) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 264 4 264 42] Invariant2.invariant' ( ^ w) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 265 4 265 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 268 4 268 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 269 4 269 29] Equisat0.equisat ( * f) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 270 4 276 7] match (result) with | Type.CreuSat_Solver_SatResult_Sat _ -> Sat0.sat ( ^ f) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) && Complete0.complete (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) | Type.CreuSat_Solver_SatResult_Unsat -> NotSatisfiable0.not_satisfiable ( ^ f) | Type.CreuSat_Solver_SatResult_Unknown -> true @@ -22819,7 +22260,7 @@ module CreuSat_Solver_Impl0_OuterLoop trail_4 <- { trail_4 with current = ( ^ _11) }; _12 <- borrow_mut ( * w_5); w_5 <- { w_5 with current = ( ^ _12) }; - _7 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 278 14 278 49] UnitPropLoop0.unit_prop_loop _8 _9 _10 _11 _12); + _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 278 14 278 49] UnitPropLoop0.unit_prop_loop _8 _9 _10 _11 _12); goto BB1 } BB1 { @@ -22837,7 +22278,7 @@ module CreuSat_Solver_Impl0_OuterLoop BB3 { _6 <- (); _18 <- Type.creusat_solver_solver_Solver_slow ( * self_1); - _20 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 283 34 283 48] (2 : usize) = (0 : usize)); + _20 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 283 34 283 48] (2 : usize) = (0 : usize)); assert { not _20 }; goto BB6 } @@ -22860,8 +22301,8 @@ module CreuSat_Solver_Impl0_OuterLoop goto BB34 } BB6 { - _19 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 283 34 283 48] (18446744073709551615 : usize) / (2 : usize)); - _17 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 283 22 283 48] _18 < _19); + _19 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 283 34 283 48] (18446744073709551615 : usize) / (2 : usize)); + _17 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 283 22 283 48] _18 < _19); switch (_17) | False -> goto BB9 | _ -> goto BB7 @@ -22869,13 +22310,13 @@ module CreuSat_Solver_Impl0_OuterLoop } BB7 { _22 <- Type.creusat_solver_solver_Solver_slow ( * self_1); - _23 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 283 51 283 68] (100 : usize) = (0 : usize)); + _23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 283 51 283 68] (100 : usize) = (0 : usize)); assert { not _23 }; goto BB8 } BB8 { - _21 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 283 51 283 68] _22 / (100 : usize)); - slow_16 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 283 51 283 74] _21 * (125 : usize)); + _21 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 283 51 283 68] _22 / (100 : usize)); + slow_16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 283 51 283 74] _21 * (125 : usize)); goto BB10 } BB9 { @@ -22884,7 +22325,7 @@ module CreuSat_Solver_Impl0_OuterLoop } BB10 { _28 <- * trail_4; - _27 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 284 11 284 33] DecisionLevel0.decision_level _28); + _27 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 284 11 284 33] DecisionLevel0.decision_level _28); goto BB14 } BB11 { @@ -22894,7 +22335,7 @@ module CreuSat_Solver_Impl0_OuterLoop BB12 { _30 <- Type.creusat_solver_solver_Solver_fast ( * self_1); _31 <- slow_16; - _29 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 284 41 284 57] _30 > _31); + _29 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 284 41 284 57] _30 > _31); _25 <- _29; goto BB13 } @@ -22905,7 +22346,7 @@ module CreuSat_Solver_Impl0_OuterLoop end } BB14 { - _26 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 284 11 284 37] _27 > (0 : usize)); + _26 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 284 11 284 37] _27 > (0 : usize)); switch (_26) | False -> goto BB11 | _ -> goto BB12 @@ -22916,7 +22357,7 @@ module CreuSat_Solver_Impl0_OuterLoop self_1 <- { self_1 with current = (let Type.CreuSat_Solver_Solver a b c d e f g h = * self_1 in Type.CreuSat_Solver_Solver a b c d e _32 g h) }; _35 <- Type.creusat_solver_solver_Solver_num_lemmas ( * self_1); _36 <- Type.creusat_solver_solver_Solver_max_lemmas ( * self_1); - _34 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 286 15 286 48] _35 > _36); + _34 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 286 15 286 48] _35 > _36); switch (_34) | False -> goto BB18 | _ -> goto BB16 @@ -22930,7 +22371,7 @@ module CreuSat_Solver_Impl0_OuterLoop _40 <- * trail_4; _41 <- borrow_mut ( * self_1); self_1 <- { self_1 with current = ( ^ _41) }; - _37 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 287 16 287 42] ReduceDb0.reduceDB _38 _39 _40 _41); + _37 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 287 16 287 42] ReduceDb0.reduceDB _38 _39 _40 _41); goto BB17 } BB17 { @@ -22951,7 +22392,7 @@ module CreuSat_Solver_Impl0_OuterLoop _44 <- * f_2; _45 <- borrow_mut ( * d_3); d_3 <- { d_3 with current = ( ^ _45) }; - _42 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 289 12 289 39] BacktrackTo0.backtrack_to _43 (0 : usize) _44 _45); + _42 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 289 12 289 39] BacktrackTo0.backtrack_to _43 (0 : usize) _44 _45); goto BB20 } BB20 { @@ -22970,7 +22411,7 @@ module CreuSat_Solver_Impl0_OuterLoop _50 <- Type.creusat_trail_trail_Trail_assignments ( * trail_4); _49 <- _50; _51 <- * f_2; - _47 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 292 14 292 47] GetNext0.get_next _48 _49 _51); + _47 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 292 14 292 47] GetNext0.get_next _48 _49 _51); goto BB23 } BB23 { @@ -22986,7 +22427,7 @@ module CreuSat_Solver_Impl0_OuterLoop _61 <- Type.creusat_trail_trail_Trail_assignments ( * trail_4); assume { Resolve4.resolve trail_4 }; _60 <- _61; - _58 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 301 19 301 47] IsSat0.is_sat _59 _60); + _58 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 301 19 301 47] IsSat0.is_sat _59 _60); goto BB28 } BB25 { @@ -23001,7 +22442,7 @@ module CreuSat_Solver_Impl0_OuterLoop _56 <- next_53; _57 <- * f_2; assume { Resolve3.resolve f_2 }; - _54 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 294 16 294 43] EnqDecision0.enq_decision _55 _56 _57); + _54 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 294 16 294 43] EnqDecision0.enq_decision _55 _56 _57); goto BB27 } BB27 { @@ -23017,7 +22458,7 @@ module CreuSat_Solver_Impl0_OuterLoop end } BB29 { - _63 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 302 42 302 52] New0.new ()); + _63 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 302 42 302 52] New0.new ()); goto BB30 } BB30 { @@ -23049,31 +22490,30 @@ module CreuSat_Solver_Impl0_Inner_Interface use mach.int.Int32 use Type use prelude.UInt8 - clone CreuSat_Logic_LogicFormula_Impl1_NotSatisfiable_Interface as NotSatisfiable0 - clone CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteNoAss_Interface as EventuallySatCompleteNoAss0 - clone CreuSat_Logic_LogicFormula_Impl1_Equisat_Interface as Equisat0 - clone CreuSat_Logic_LogicFormula_Impl1_SatInner_Interface as SatInner0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface as NotSatisfiable0 + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss_Interface as EventuallySatCompleteNoAss0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicFormula_Impl2_SatInner_Interface as SatInner0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = uint8, type a = Type.alloc_alloc_global, axiom . clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant3 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val inner [@cfg:stackify] (self : borrowed (Type.creusat_solver_solver)) (formula : borrowed (Type.creusat_formula_formula)) (decisions : Type.creusat_decision_decisions) (trail : Type.creusat_trail_trail) (watches : Type.creusat_watches_watches) : Type.creusat_solver_satresult - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 313 4 313 50] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula)) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 314 4 314 36] Invariant0.invariant' ( * formula)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 315 4 315 55] Invariant1.invariant' decisions (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 316 4 316 42] Invariant2.invariant' trail ( * formula)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 317 4 317 44] Invariant3.invariant' watches ( * formula)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 318 4 318 55] Invariant1.invariant' decisions (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula)))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 319 4 323 7] match (result) with + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 313 4 313 50] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 314 4 314 36] Invariant0.invariant' ( * formula)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 315 4 315 55] Invariant1.invariant' decisions (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 316 4 316 42] Invariant2.invariant' trail ( * formula)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 317 4 317 44] Invariant3.invariant' watches ( * formula)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 318 4 318 55] Invariant1.invariant' decisions (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula)))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 319 4 323 7] match (result) with | Type.CreuSat_Solver_SatResult_Sat v -> SatInner0.sat_inner ( ^ formula) (Model0.model v) && Equisat0.equisat ( * formula) ( ^ formula) && EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass ( * formula) | Type.CreuSat_Solver_SatResult_Unsat -> NotSatisfiable0.not_satisfiable ( ^ formula) && Equisat0.equisat ( * formula) ( ^ formula) | _ -> true end } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 324 4 324 41] Equisat0.equisat ( * formula) ( ^ formula) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 324 4 324 41] Equisat0.equisat ( * formula) ( ^ formula) } end module CreuSat_Solver_Impl0_Inner @@ -23083,155 +22523,140 @@ module CreuSat_Solver_Impl0_Inner use mach.int.Int32 use Type use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, + function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = SatInner2.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = Invariant7.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner2.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner2 with predicate SatInner0.sat_inner = SatInner1.sat_inner, + predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model7 with function Model0.model = Model10.model - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant7.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with function Model0.model = Model7.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant4.invariant', - function Model0.model = Model7.model - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner2 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model7.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner2.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner1 with function Model0.model = Model7.model, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss1.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model7.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 + type a = Type.alloc_alloc_global, function Model0.model = Model7.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model7 with function Model0.model = NotSatisfiable0.model, + function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, + function Model2.model = WatchesInvariantInternal0.model, function Model0.model = SatInner1.model, + function Model0.model = Invariant4.model, function Model1.model = UnitAreSat0.model, + function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, + function Model1.model = Invariant8.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner1 with predicate SatInner0.sat_inner = SatInner0.sat_inner, + predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner + clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss1.formula_sat_inner + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with predicate Invariant0.invariant' = Invariant6.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner, + predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss1.complete_inner + clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with function Model0.model = Model6.model, - function Model1.model = Model7.model - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant7.invariant', - predicate Invariant1.invariant' = Invariant8.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model6.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model6.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model9.model, - function Model1.model = Model6.model, function Model2.model = Model7.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Model6.model - clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with function Model0.model = Model1.model, - predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner - clone CreuSat_Logic_LogicFormula_Impl1_NotSatisfiable as NotSatisfiable0 with function Model0.model = Model7.model, - predicate EquisatExtension0.equisat_extension = EquisatExtension0.equisat_extension - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model6.model, - predicate Invariant0.invariant' = Invariant4.invariant', function Model1.model = Model7.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model1.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreuSat_Logic_LogicFormula_Impl1_SatInner as SatInner0 with function Model0.model = Model6.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_Equisat as Equisat0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model8 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model8.model, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model6.model, - function Model1.model = Model7.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with function Model0.model = Model8.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant3 with function Model0.model = Model5.model, - predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal + type a = Type.alloc_alloc_global, function Model0.model = SatInner0.model, + function Model0.model = InvariantMirror0.model, function Model0.model = Model1.model, + function Model3.model = InvariantNoDecisionMirror0.model, function Model1.model = WatchesInvariantInternal0.model, + function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant8.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with predicate Invariant1.invariant' = Invariant6.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant4.invariant_internal + clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtension0.equisat_extension_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model8.model, axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model8 with function Model2.model = InvariantNoDecision0.model, + function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant5.model, + function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant2.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model4.model, - function Model1.model = Model8.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model4.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model4.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model3.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model8.model, - function Model1.model = Model4.model, predicate Invariant0.invariant' = Invariant6.invariant', - function Model2.model = Model3.model, function Model3.model = Model6.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant5.invariant', function Model0.model = Model4.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model3.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model8.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model3.model, function Model1.model = Model4.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + type a = Type.alloc_alloc_global, function Model1.model = Invariant2.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Invariant0.model, + function Model0.model = EquisatExtension0.model + clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with predicate EquisatExtension0.equisat_extension = NotSatisfiable0.equisat_extension + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant3.watches_invariant_internal + clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + type a = Type.alloc_alloc_global, function Model0.model = Invariant3.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant2.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant2.invariant_no_decision, + axiom . clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant1 with function Model0.model = Model2.model + type a = Type.alloc_alloc_global, function Model0.model = Invariant1.model, axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable as NotSatisfiable0 + clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant3 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 + clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . use mach.int.Int64 - clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve6 with type t = uint8 + clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve6 with type t = uint8, + predicate Resolve0.resolve = Resolve5.resolve + clone CreuSat_Logic_LogicAssignments_Impl1_Complete as Complete0 with predicate Complete0.complete = OuterLoop0.complete + clone CreuSat_Logic_LogicFormula_Impl2_Sat as Sat1 with predicate Sat0.sat = OuterLoop0.sat + clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve5 with type t = uint8 clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve4 with type t = Type.creusat_formula_formula clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve3 with type t = Type.creusat_solver_solver clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_watches_watches clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_trail_trail clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_decision_decisions - clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve5 with type t = uint8, function Model0.model = Model0.model, - predicate Resolve0.resolve = Resolve6.resolve - clone CreuSat_Logic_LogicAssignments_Impl1_Complete as Complete0 with function Model0.model = Model8.model, - predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicFormula_Impl1_Sat as Sat1 with function Model0.model = Model1.model, - function Model1.model = Model8.model, - predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner - clone CreuSat_Solver_Impl0_OuterLoop_Interface as OuterLoop0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant2.invariant', predicate Invariant2.invariant' = Invariant3.invariant', - predicate Invariant3.invariant' = Invariant1.invariant', predicate Equisat0.equisat = Equisat0.equisat, - predicate Sat0.sat = Sat1.sat, predicate Complete0.complete = Complete0.complete, - predicate NotSatisfiable0.not_satisfiable = NotSatisfiable0.not_satisfiable, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - let rec cfg inner [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 325 4 327 18] (self : borrowed (Type.creusat_solver_solver)) (formula : borrowed (Type.creusat_formula_formula)) (decisions : Type.creusat_decision_decisions) (trail : Type.creusat_trail_trail) (watches : Type.creusat_watches_watches) : Type.creusat_solver_satresult - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 313 4 313 50] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula)) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 314 4 314 36] Invariant0.invariant' ( * formula)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 315 4 315 55] Invariant1.invariant' decisions (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 316 4 316 42] Invariant2.invariant' trail ( * formula)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 317 4 317 44] Invariant3.invariant' watches ( * formula)} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 318 4 318 55] Invariant1.invariant' decisions (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula)))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 319 4 323 7] match (result) with + clone CreuSat_Solver_Impl0_OuterLoop_Interface as OuterLoop0 + let rec cfg inner [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 325 4 327 18] (self : borrowed (Type.creusat_solver_solver)) (formula : borrowed (Type.creusat_formula_formula)) (decisions : Type.creusat_decision_decisions) (trail : Type.creusat_trail_trail) (watches : Type.creusat_watches_watches) : Type.creusat_solver_satresult + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 313 4 313 50] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 314 4 314 36] Invariant0.invariant' ( * formula)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 315 4 315 55] Invariant1.invariant' decisions (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 316 4 316 42] Invariant2.invariant' trail ( * formula)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 317 4 317 44] Invariant3.invariant' watches ( * formula)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 318 4 318 55] Invariant1.invariant' decisions (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula)))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 319 4 323 7] match (result) with | Type.CreuSat_Solver_SatResult_Sat v -> SatInner0.sat_inner ( ^ formula) (Model0.model v) && Equisat0.equisat ( * formula) ( ^ formula) && EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass ( * formula) | Type.CreuSat_Solver_SatResult_Unsat -> NotSatisfiable0.not_satisfiable ( ^ formula) && Equisat0.equisat ( * formula) ( ^ formula) | _ -> true end } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 324 4 324 41] Equisat0.equisat ( * formula) ( ^ formula) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 324 4 324 41] Equisat0.equisat ( * formula) ( ^ formula) } = var _0 : Type.creusat_solver_satresult; @@ -23280,7 +22705,7 @@ module CreuSat_Solver_Impl0_Inner } BB4 { _7 <- (); - old_f_6 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 328 20 328 38] formula_2); + old_f_6 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 328 20 328 38] formula_2); goto BB5 } BB5 { @@ -23296,13 +22721,13 @@ module CreuSat_Solver_Impl0_Inner goto BB9 } BB9 { - invariant equi { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 329 8 329 59] Equisat0.equisat ( * old_f_6) ( * formula_2) }; - invariant num_vars { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 330 8 330 68] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula_2)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * old_f_6)) }; - invariant maintains_f { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 331 8 331 54] Invariant0.invariant' ( * formula_2) }; - invariant maintains_t { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 332 8 332 60] Invariant2.invariant' trail_4 ( * formula_2) }; - invariant maintains_w { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 333 8 333 62] Invariant3.invariant' watches_5 ( * formula_2) }; - invariant maintains_d { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 334 8 334 73] Invariant1.invariant' decisions_3 (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula_2))) }; - invariant proph_f { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 335 8 335 57] ^ formula_2 = ^ old_f_6 }; + invariant equi { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 329 8 329 59] Equisat0.equisat ( * old_f_6) ( * formula_2) }; + invariant num_vars { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 330 8 330 68] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula_2)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * old_f_6)) }; + invariant maintains_f { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 331 8 331 54] Invariant0.invariant' ( * formula_2) }; + invariant maintains_t { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 332 8 332 60] Invariant2.invariant' trail_4 ( * formula_2) }; + invariant maintains_w { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 333 8 333 62] Invariant3.invariant' watches_5 ( * formula_2) }; + invariant maintains_d { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 334 8 334 73] Invariant1.invariant' decisions_3 (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula_2))) }; + invariant proph_f { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 335 8 335 57] ^ formula_2 = ^ old_f_6 }; _11 <- borrow_mut ( * self_1); self_1 <- { self_1 with current = ( ^ _11) }; _12 <- borrow_mut ( * formula_2); @@ -23319,7 +22744,7 @@ module CreuSat_Solver_Impl0_Inner watches_5 <- ^ _18; _17 <- borrow_mut ( * _18); _18 <- { _18 with current = ( ^ _17) }; - _10 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 337 18 337 84] OuterLoop0.outer_loop _11 _12 _13 _15 _17); + _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 337 18 337 84] OuterLoop0.outer_loop _11 _12 _13 _15 _17); goto BB10 } BB10 { @@ -23380,15 +22805,14 @@ end module CreuSat_Trail_Impl0_New_Interface use prelude.Prelude use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicAssignments_Impl1_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . val new [@cfg:stackify] (f : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) : Type.creusat_trail_trail - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 42 4 42 30] Invariant0.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 43 4 43 32] Invariant1.invariant' a f} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 44 4 44 36] Invariant2.invariant' result f } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 42 4 42 30] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 43 4 43 32] Invariant1.invariant' a f} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 44 4 44 36] Invariant2.invariant' result f } end module CreuSat_Trail_Impl0_New @@ -23397,101 +22821,93 @@ module CreuSat_Trail_Impl0_New use mach.int.Int use prelude.UInt8 use mach.int.UInt64 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant5 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = Invariant5.index_logic, function IndexLogic0.index_logic = SatInner0.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = Invariant4.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model5 with function Model0.model = Model7.model - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model5.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner0.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model5.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with function Model0.model = Model5.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant3.invariant', - function Model0.model = Model5.model - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model6.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model1.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant1 with function Model0.model = Model1.model + type a = Type.alloc_alloc_global, function Model0.model = Model5.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model5 with function Model1.model = InvariantMirror0.model, + function Model0.model = FormulaInvariant0.model, function Model0.model = Invariant3.model, + function Model1.model = UnitAreSat0.model, function Model0.model = LitIdxIn0.model, + function Model0.model = ClausePostWithRegardsToInner0.model, function Model1.model = Invariant6.model clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant6 with function Model0.model = Model4.model, - function Model1.model = Model5.model - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = Invariant5.invariant', - predicate Invariant1.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant4.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model4.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model4.model, - function Model1.model = Model5.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model4.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Model4.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model4.model, - predicate Invariant0.invariant' = Invariant3.invariant', function Model1.model = Model5.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model0.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . + type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, + function Model0.model = Model0.model, function Model3.model = InvariantNoDecisionMirror0.model, + function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant6.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant6 with predicate Invariant1.invariant' = Invariant4.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model1.model, axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Invariant1.model, + function Model2.model = InvariantNoDecision0.model, function Model0.model = InvariantNoDecisionMirror0.model, + function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant2.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model3.model, - function Model1.model = Model1.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model3.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model3.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model2.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model1.model, - function Model1.model = Model3.model, predicate Invariant0.invariant' = Invariant4.invariant', - function Model2.model = Model2.model, function Model3.model = Model4.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant1.invariant', function Model0.model = Model3.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model2.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model1.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model2.model, function Model1.model = Model3.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror - clone Alloc_Vec_Impl0_New_Interface as New0 with type t = Type.creusat_trail_step, - function Model0.model = Model3.model - clone Alloc_Vec_Impl0_New_Interface as New1 with type t = usize, function Model0.model = Model2.model - clone Alloc_Vec_FromElem_Interface as FromElem0 with type t = usize, function Model0.model = Model2.model - let rec cfg new [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 45 4 45 52] (f : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) : Type.creusat_trail_trail - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 42 4 42 30] Invariant0.invariant' f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 43 4 43 32] Invariant1.invariant' a f} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 44 4 44 36] Invariant2.invariant' result f } + type a = Type.alloc_alloc_global, function Model1.model = Invariant2.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant2.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant2.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Invariant0.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . + clone Alloc_Vec_Impl0_New_Interface as New1 with type t = usize + clone Alloc_Vec_Impl0_New_Interface as New0 with type t = Type.creusat_trail_step + clone Alloc_Vec_FromElem_Interface as FromElem0 with type t = usize + let rec cfg new [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 45 4 45 52] (f : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) : Type.creusat_trail_trail + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 42 4 42 30] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 43 4 43 32] Invariant1.invariant' a f} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 44 4 44 36] Invariant2.invariant' result f } = var _0 : Type.creusat_trail_trail; @@ -23513,15 +22929,15 @@ module CreuSat_Trail_Impl0_New BB1 { _3 <- a_2; _5 <- Type.creusat_formula_formula_Formula_num_vars f_1; - _4 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 48 26 48 64] FromElem0.from_elem (18446744073709551615 : usize) _5); + _4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 48 26 48 64] FromElem0.from_elem (18446744073709551615 : usize) _5); goto BB2 } BB2 { - _6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 49 19 49 29] New0.new ()); + _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 49 19 49 29] New0.new ()); goto BB3 } BB3 { - _7 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 51 23 51 33] New1.new ()); + _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 51 23 51 33] New1.new ()); goto BB4 } BB4 { @@ -23550,7 +22966,7 @@ module CreuSat_Watches_Impl0_New_Interface use Type clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant0 val new [@cfg:stackify] (f : Type.creusat_formula_formula) : Type.creusat_watches_watches - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 74 4 74 36] Invariant0.invariant' result f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 74 4 74 36] Invariant0.invariant' result f } end module CreuSat_Watches_Impl0_New @@ -23559,33 +22975,28 @@ module CreuSat_Watches_Impl0_New use mach.int.UInt64 use mach.int.Int clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model3 with function Model0.model = Model4.model - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 + type a = Type.alloc_alloc_global, function Model0.model = Model3.model, axiom . + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic + clone CreuSat_Logic_LogicClause_Impl0_Model as Model3 with function Model2.model = WatchesInvariantInternal0.model clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . + type a = Type.alloc_alloc_global, function Model1.model = WatchesInvariantInternal0.model, axiom . clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model1.model, - function Model1.model = Model2.model, function Model2.model = Model3.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic + type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant0.watches_invariant_internal clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant0 with function Model0.model = Model0.model, - predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal - clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve2 with type t = Type.creusat_watches_watcher + type a = Type.alloc_alloc_global, function Model0.model = Invariant0.model, axiom . + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant0 + clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve2 with type t = Type.creusat_watches_watcher, + predicate Resolve0.resolve = Resolve1.resolve clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve1 with type t = Type.creusat_watches_watcher, - function Model0.model = Model1.model, predicate Resolve0.resolve = Resolve2.resolve - clone Alloc_Vec_Impl0_New_Interface as New1 with type t = Type.creusat_watches_watcher, - function Model0.model = Model1.model - clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - function Model0.model = Model0.model, predicate Resolve0.resolve = Resolve1.resolve + predicate Resolve0.resolve = Resolve0.resolve + clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) clone Alloc_Vec_Impl1_Push_Interface as Push0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, function Model0.model = Model0.model - clone Alloc_Vec_Impl0_New_Interface as New0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - function Model0.model = Model0.model - let rec cfg new [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 75 4 75 38] (f : Type.creusat_formula_formula) : Type.creusat_watches_watches - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 74 4 74 36] Invariant0.invariant' result f } + type a = Type.alloc_alloc_global + clone Alloc_Vec_Impl0_New_Interface as New1 with type t = Type.creusat_watches_watcher + clone Alloc_Vec_Impl0_New_Interface as New0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) + let rec cfg new [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 75 4 75 38] (f : Type.creusat_formula_formula) : Type.creusat_watches_watches + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 74 4 74 36] Invariant0.invariant' result f } = var _0 : Type.creusat_watches_watches; @@ -23613,7 +23024,7 @@ module CreuSat_Watches_Impl0_New } BB0 { i_2 <- (0 : usize); - watches_3 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 77 26 77 36] New0.new ()); + watches_3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 77 26 77 36] New0.new ()); goto BB1 } BB1 { @@ -23623,11 +23034,11 @@ module CreuSat_Watches_Impl0_New goto BB3 } BB3 { - invariant i_less { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 78 8 78 47] UInt64.to_int i_2 <= UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; - invariant maintains_inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 79 8 79 81] WatchesInvariantInternal0.watches_invariant_internal (Model0.model watches_3) (UInt64.to_int i_2) f_1 }; + invariant i_less { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 78 8 78 47] UInt64.to_int i_2 <= UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; + invariant maintains_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 79 8 79 81] WatchesInvariantInternal0.watches_invariant_internal (Model0.model watches_3) (UInt64.to_int i_2) f_1 }; _7 <- i_2; _8 <- Type.creusat_formula_formula_Formula_num_vars f_1; - _6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 80 14 80 28] _7 < _8); + _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 80 14 80 28] _7 < _8); switch (_6) | False -> goto BB9 | _ -> goto BB4 @@ -23636,25 +23047,25 @@ module CreuSat_Watches_Impl0_New BB4 { _10 <- borrow_mut watches_3; watches_3 <- ^ _10; - _11 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 81 25 81 35] New1.new ()); + _11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 81 25 81 35] New1.new ()); goto BB5 } BB5 { - _9 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 81 12 81 36] Push0.push _10 _11); + _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 81 12 81 36] Push0.push _10 _11); goto BB6 } BB6 { _13 <- borrow_mut watches_3; watches_3 <- ^ _13; - _14 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 82 25 82 35] New1.new ()); + _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 82 25 82 35] New1.new ()); goto BB7 } BB7 { - _12 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 82 12 82 36] Push0.push _13 _14); + _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 82 12 82 36] Push0.push _13 _14); goto BB8 } BB8 { - i_2 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 83 12 83 18] i_2 + (1 : usize)); + i_2 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 83 12 83 18] i_2 + (1 : usize)); _5 <- (); goto BB3 } @@ -23679,15 +23090,14 @@ module CreuSat_Watches_Impl0_InitWatches_Interface use prelude.Prelude use mach.int.Int32 use Type - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant1 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant1.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant1 with axiom . clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant0 val init_watches [@cfg:stackify] (self : borrowed (Type.creusat_watches_watches)) (f : Type.creusat_formula_formula) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 132 4 132 42] Invariant0.invariant' ( * self) f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 133 4 133 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 134 4 134 30] Invariant1.invariant' f} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 132 4 132 42] Invariant0.invariant' ( ^ self) f } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 132 4 132 42] Invariant0.invariant' ( * self) f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 133 4 133 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 134 4 134 30] Invariant1.invariant' f} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 132 4 132 42] Invariant0.invariant' ( ^ self) f } end module CreuSat_Watches_Impl0_InitWatches @@ -23697,71 +23107,67 @@ module CreuSat_Watches_Impl0_InitWatches use mach.int.Int32 use Type use seq.Seq + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, + function IndexLogic0.index_logic = Invariant3.index_logic + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant2.invariant_internal clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model4 with function Model0.model = Model5.model - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant3.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with function Model0.model = Model4.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant2.invariant', - function Model0.model = Model4.model + type a = Type.alloc_alloc_global, function Model0.model = Model4.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model4 with function Model2.model = WatchesInvariantInternal0.model, + function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, + function Model0.model = Invariant2.model + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Model3.model - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model3.model, - predicate Invariant0.invariant' = Invariant2.invariant', function Model1.model = Model4.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant1 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model1.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . + type a = Type.alloc_alloc_global, function Model1.model = WatchesInvariantInternal0.model, + function Model0.model = InvariantMirror0.model, function Model0.model = Model1.model, axiom . clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model2.model, - function Model1.model = Model3.model, function Model2.model = Model4.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic + type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant1.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Invariant1.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant1.invariant_mirror + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant0.watches_invariant_internal clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant0 with function Model0.model = Model0.model, - predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_watches_watches - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) + type a = Type.alloc_alloc_global, function Model0.model = Invariant0.model, axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant1 with axiom . + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant0 clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy2 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 + clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + type Output0.output = IndexMut0.output + clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + predicate HasValue0.has_value = IndexMut0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + predicate InBounds0.in_bounds = IndexMut0.in_bounds + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = ToNegWatchidx0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = ToNegWatchidxLogic0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic as ToNegWatchidxLogic0 with function ToNegWatchidxLogic0.to_neg_watchidx_logic = ToNegWatchidx0.to_neg_watchidx_logic + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model7.modelTy clone CreusotContracts_Logic_Model_Impl0_Model as Model7 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model4.model - clone CreuSat_Clause_Impl0_Index_Interface as Index1 with function Model0.model = Model7.model - clone CreuSat_Clause_Impl3_Len_Interface as Len1 with function Model0.model = Model7.model - clone CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic as ToNegWatchidxLogic0 with function IndexLogic0.index_logic = IndexLogic0.index_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic - clone CreuSat_Lit_Impl1_ToNegWatchidx_Interface as ToNegWatchidx0 with function IndexLogic0.index_logic = IndexLogic0.index_logic, - function ToNegWatchidxLogic0.to_neg_watchidx_logic = ToNegWatchidxLogic0.to_neg_watchidx_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = Model3.model + function Model0.model = Len1.model, function Model0.model = Index1.model + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model6.modelTy clone CreusotContracts_Logic_Model_Impl0_Model as Model6 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model - clone CreuSat_Formula_Impl0_Index_Interface as Index0 with function Model0.model = Model6.model + function Model0.model = Index0.model + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_watches_watches + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) clone Alloc_Vec_Impl1_Push_Interface as Push0 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = Model2.model + type a = Type.alloc_alloc_global clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type i = usize, type a = Type.alloc_alloc_global, function Model0.model = Model0.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - predicate ResolveElswhere0.resolve_elswhere = ResolveElswhere0.resolve_elswhere, type Output0.output = Output0.output - let rec cfg init_watches [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 135 4 135 47] (self : borrowed (Type.creusat_watches_watches)) (f : Type.creusat_formula_formula) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 132 4 132 42] Invariant0.invariant' ( * self) f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 133 4 133 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 134 4 134 30] Invariant1.invariant' f} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 132 4 132 42] Invariant0.invariant' ( ^ self) f } + type i = usize, type a = Type.alloc_alloc_global + clone CreuSat_Lit_Impl1_ToNegWatchidx_Interface as ToNegWatchidx0 + clone CreuSat_Clause_Impl0_Index_Interface as Index1 + clone CreuSat_Clause_Impl3_Len_Interface as Len1 + clone CreuSat_Formula_Impl0_Index_Interface as Index0 + clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global + let rec cfg init_watches [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 135 4 135 47] (self : borrowed (Type.creusat_watches_watches)) (f : Type.creusat_formula_formula) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 132 4 132 42] Invariant0.invariant' ( * self) f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 133 4 133 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 134 4 134 30] Invariant1.invariant' f} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 132 4 132 42] Invariant0.invariant' ( ^ self) f } = var _0 : (); @@ -23819,7 +23225,7 @@ module CreuSat_Watches_Impl0_InitWatches } BB0 { _4 <- (); - old_w_3 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 136 20 136 35] self_1); + old_w_3 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 136 20 136 35] self_1); goto BB1 } BB1 { @@ -23827,16 +23233,16 @@ module CreuSat_Watches_Impl0_InitWatches goto BB2 } BB2 { - invariant watch_inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 138 8 138 51] Invariant0.invariant' ( * self_1) f_2 }; - invariant same_len { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 139 8 139 72] Seq.length (Model0.model (Type.creusat_watches_watches_Watches_watches ( * self_1))) = 2 * UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_2) }; - invariant proph { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 140 8 140 52] ^ self_1 = ^ old_w_3 }; + invariant watch_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 138 8 138 51] Invariant0.invariant' ( * self_1) f_2 }; + invariant same_len { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 139 8 139 72] Seq.length (Model0.model (Type.creusat_watches_watches_Watches_watches ( * self_1))) = 2 * UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_2) }; + invariant proph { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 140 8 140 52] ^ self_1 = ^ old_w_3 }; _8 <- i_5; _10 <- Type.creusat_formula_formula_Formula_clauses f_2; - _9 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 141 18 141 33] Len0.len _10); + _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 141 18 141 33] Len0.len _10); goto BB3 } BB3 { - _7 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 141 14 141 33] _8 < _9); + _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 141 14 141 33] _8 < _9); switch (_7) | False -> goto BB20 | _ -> goto BB4 @@ -23845,17 +23251,17 @@ module CreuSat_Watches_Impl0_InitWatches BB4 { _13 <- f_2; _14 <- i_5; - _12 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 142 26 142 30] Index0.index _13 _14); + _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 142 26 142 30] Index0.index _13 _14); goto BB5 } BB5 { clause_11 <- _12; _18 <- clause_11; - _17 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 143 15 143 27] Len1.len _18); + _17 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 143 15 143 27] Len1.len _18); goto BB6 } BB6 { - _16 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 143 15 143 31] _17 > (1 : usize)); + _16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 143 15 143 31] _17 > (1 : usize)); switch (_16) | False -> goto BB18 | _ -> goto BB7 @@ -23865,16 +23271,16 @@ module CreuSat_Watches_Impl0_InitWatches _22 <- borrow_mut (Type.creusat_watches_watches_Watches_watches ( * self_1)); self_1 <- { self_1 with current = (let Type.CreuSat_Watches_Watches a = * self_1 in Type.CreuSat_Watches_Watches ( ^ _22)) }; _26 <- clause_11; - _25 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 146 29 146 38] Index1.index _26 (0 : usize)); + _25 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 146 29 146 38] Index1.index _26 (0 : usize)); goto BB8 } BB8 { _24 <- _25; - _23 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 146 29 146 56] ToNegWatchidx0.to_neg_watchidx _24); + _23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 146 29 146 56] ToNegWatchidx0.to_neg_watchidx _24); goto BB9 } BB9 { - _21 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 146 16 146 57] IndexMut0.index_mut _22 _23); + _21 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 146 16 146 57] IndexMut0.index_mut _22 _23); goto BB10 } BB10 { @@ -23882,13 +23288,13 @@ module CreuSat_Watches_Impl0_InitWatches _21 <- { _21 with current = ( ^ _20) }; _28 <- i_5; _31 <- clause_11; - _30 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 146 91 146 100] Index1.index _31 (1 : usize)); + _30 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 146 91 146 100] Index1.index _31 (1 : usize)); goto BB11 } BB11 { _29 <- _30; _27 <- Type.CreuSat_Watches_Watcher _28 _29; - _19 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 146 16 146 103] Push0.push _20 _27); + _19 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 146 16 146 103] Push0.push _20 _27); goto BB12 } BB12 { @@ -23896,16 +23302,16 @@ module CreuSat_Watches_Impl0_InitWatches _35 <- borrow_mut (Type.creusat_watches_watches_Watches_watches ( * self_1)); self_1 <- { self_1 with current = (let Type.CreuSat_Watches_Watches a = * self_1 in Type.CreuSat_Watches_Watches ( ^ _35)) }; _39 <- clause_11; - _38 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 147 29 147 38] Index1.index _39 (1 : usize)); + _38 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 147 29 147 38] Index1.index _39 (1 : usize)); goto BB13 } BB13 { _37 <- _38; - _36 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 147 29 147 56] ToNegWatchidx0.to_neg_watchidx _37); + _36 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 147 29 147 56] ToNegWatchidx0.to_neg_watchidx _37); goto BB14 } BB14 { - _34 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 147 16 147 57] IndexMut0.index_mut _35 _36); + _34 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 147 16 147 57] IndexMut0.index_mut _35 _36); goto BB15 } BB15 { @@ -23913,13 +23319,13 @@ module CreuSat_Watches_Impl0_InitWatches _34 <- { _34 with current = ( ^ _33) }; _41 <- i_5; _44 <- clause_11; - _43 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 147 91 147 100] Index1.index _44 (0 : usize)); + _43 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 147 91 147 100] Index1.index _44 (0 : usize)); goto BB16 } BB16 { _42 <- _43; _40 <- Type.CreuSat_Watches_Watcher _41 _42; - _32 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 147 16 147 103] Push0.push _33 _40); + _32 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 147 16 147 103] Push0.push _33 _40); goto BB17 } BB17 { @@ -23932,7 +23338,7 @@ module CreuSat_Watches_Impl0_InitWatches goto BB19 } BB19 { - i_5 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 149 12 149 18] i_5 + (1 : usize)); + i_5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 149 12 149 18] i_5 + (1 : usize)); _6 <- (); goto BB2 } @@ -23947,19 +23353,18 @@ module CreuSat_Trail_Impl0_LearnUnits_Interface use mach.int.UInt64 use Type use prelude.Prelude - clone CreuSat_Logic_LogicFormula_Impl1_NotSatisfiable_Interface as NotSatisfiable0 - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror_Interface as InvariantMirror0 - clone CreuSat_Logic_LogicFormula_Impl1_Invariant_Interface as Invariant2 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - axiom . + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant2.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface as NotSatisfiable0 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant2 with axiom . clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant1 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant0 val learn_units [@cfg:stackify] (self : borrowed (Type.creusat_trail_trail)) (f : Type.creusat_formula_formula) (d : borrowed (Type.creusat_decision_decisions)) : Type.core_option_option bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 329 4 329 42] Invariant0.invariant' ( * self) f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 330 4 330 48] Invariant1.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 331 4 331 30] Invariant2.invariant' f} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 329 4 329 42] Invariant0.invariant' ( ^ self) f } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 330 4 330 48] Invariant1.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 332 4 335 7] match (result) with + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 329 4 329 42] Invariant0.invariant' ( * self) f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 330 4 330 48] Invariant1.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 331 4 331 30] Invariant2.invariant' f} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 329 4 329 42] Invariant0.invariant' ( ^ self) f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 330 4 330 48] Invariant1.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 332 4 335 7] match (result) with | Type.Core_Option_Option_Some (True) -> NotSatisfiable0.not_satisfiable f | _ -> true end } @@ -23971,155 +23376,131 @@ module CreuSat_Trail_Impl0_LearnUnits use prelude.Prelude use mach.int.Int use prelude.UInt8 - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model5 with function Model0.model = Model8.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model5.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant3 with function Model0.model = Model5.model + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, + function IndexLogic0.index_logic = LitIdxIn0.index_logic, + function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, + function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, + function IndexLogic0.index_logic = Invariant6.index_logic, function IndexLogic0.index_logic = SatInner0.index_logic, + function IndexLogic0.index_logic = UnsatInner0.index_logic, + function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, + function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, + predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, + predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, + predicate SatInner0.sat_inner = SatInner1.sat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model4 with function Model0.model = Model7.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner1 with function Model0.model = Model4.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model4.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner0.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant5 with function Model0.model = Model4.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant5.invariant', - function Model0.model = Model4.model - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model4.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic + type a = Type.alloc_alloc_global, function Model0.model = Model4.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model4 with function Model0.model = NotSatisfiable0.model, + function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, + function Model1.model = UnitAreSat0.model, function Model0.model = LitIdxIn0.model, + function Model0.model = Invariant5.model, function Model0.model = ClausePostWithRegardsToInner0.model, + function Model1.model = Invariant7.model, function Model0.model = SatInner1.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner1 with predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss0.formula_sat_inner + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant4.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant5.invariant_internal + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with function Model0.model = Model6.model, - function Model1.model = Model4.model - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = Invariant6.invariant', - predicate Invariant1.invariant' = Invariant7.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant4.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model6.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model6.model, - function Model1.model = Model4.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model6.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model3 with function Model0.model = Model6.model - clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with function Model0.model = Model3.model, - predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner - clone CreuSat_Logic_LogicFormula_Impl1_NotSatisfiable as NotSatisfiable0 with function Model0.model = Model4.model, - predicate EquisatExtension0.equisat_extension = EquisatExtension0.equisat_extension - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model6.model, - predicate Invariant0.invariant' = Invariant5.invariant', function Model1.model = Model4.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant2 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model3.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant1 with function Model0.model = Model2.model + type a = Type.alloc_alloc_global, function Model3.model = InvariantNoDecisionMirror0.model, + function Model0.model = InvariantMirror0.model, function Model0.model = Model3.model, + function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, + function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant4.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = uint8, type a = Type.alloc_alloc_global, + function Model0.model = Model5.model, axiom . + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtension0.equisat_extension_inner + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model5 with function Model2.model = InvariantNoDecision0.model, + function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant3.model, + function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant0.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model1.model, - function Model1.model = Model5.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model1.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model1.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model0.model, - predicate Sorted0.sorted = Sorted0.sorted - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model5.model, - function Model1.model = Model1.model, predicate Invariant0.invariant' = Invariant4.invariant', - function Model2.model = Model0.model, function Model3.model = Model6.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant3.invariant', function Model0.model = Model1.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model0.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model5.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant0 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model0.model, function Model1.model = Model1.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_trail_trail - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_decision_decisions - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy2 - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 - clone CreuSat_Logic_LogicLit_Impl1_UnsetInner as UnsetInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat0 with function Model0.model = Model5.model, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_Unset as Unset1 with function Model0.model = Model5.model, - predicate UnsetInner0.unset_inner = UnsetInner0.unset_inner + type a = Type.alloc_alloc_global, function Model1.model = Invariant0.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model3 with function Model0.model = Invariant2.model, + function Model0.model = EquisatExtension0.model + clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with predicate EquisatExtension0.equisat_extension = NotSatisfiable0.equisat_extension + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant2.formula_invariant + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant2.invariant_mirror + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_decision_node, + type a = Type.alloc_alloc_global, function Model0.model = Invariant1.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant0.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant0.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable as NotSatisfiable0 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant2 with axiom . + clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant1 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant0 + clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner1 with predicate UnsatInner0.unsat_inner = Unsat1.unsat_inner + clone CreuSat_Logic_LogicLit_Impl1_UnsetInner as UnsetInner0 with predicate UnsetInner0.unset_inner = Unset1.unset_inner + clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat1 with predicate Unsat0.unsat = ResolveEmptyClause0.unsat + clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat0 with predicate Unsat0.unsat = LitUnsat0.unsat + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy2 with type ModelTy0.modelTy = Model11.modelTy + clone CreuSat_Logic_LogicLit_Impl1_Unset as Unset1 with predicate Unset0.unset = LitSet0.unset clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_assignments_assignments, - type ModelTy0.modelTy = ModelTy2.modelTy, function Model0.model = Model5.model - clone CreuSat_Lit_Impl1_LitUnsat_Interface as LitUnsat0 with function Model0.model = Model11.model, - predicate Invariant0.invariant' = Invariant6.invariant', predicate Unsat0.unsat = Unsat0.unsat - clone CreuSat_Lit_Impl1_LitSet_Interface as LitSet0 with function Model0.model = Model11.model, - predicate Invariant0.invariant' = Invariant6.invariant', predicate Unset0.unset = Unset1.unset - clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner1 with function Model0.model = Model4.model, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat1 with function Model0.model = Model5.model, - predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner + function Model0.model = LitSet0.model, function Model0.model = LitUnsat0.model + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model10.modelTy clone CreusotContracts_Logic_Model_Impl0_Model as Model10 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model4.model - clone CreuSat_Clause_Impl0_Index_Interface as Index1 with function Model0.model = Model10.model - clone CreuSat_Clause_Impl3_Len_Interface as Len1 with function Model0.model = Model10.model - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = Model6.model + function Model0.model = Len1.model, function Model0.model = Index1.model + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model9.modelTy clone CreusotContracts_Logic_Model_Impl0_Model as Model9 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model3.model - clone CreuSat_Formula_Impl0_Index_Interface as Index0 with function Model0.model = Model9.model - clone CreuSat_Trail_Impl0_LearnUnit_Interface as LearnUnit0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant1.invariant', predicate Invariant2.invariant' = Invariant2.invariant', - function Model0.model = Model6.model, function Model1.model = Model4.model, - predicate Invariant3.invariant' = Invariant5.invariant', function Model2.model = Model1.model, - function Model3.model = Model5.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_ConflictAnalysis_ResolveEmptyClause_Interface as ResolveEmptyClause0 with predicate Invariant0.invariant' = Invariant2.invariant', - predicate Invariant1.invariant' = Invariant0.invariant', function Model0.model = Model6.model, - predicate Unsat0.unsat = Unsat1.unsat, predicate NotSatisfiable0.not_satisfiable = NotSatisfiable0.not_satisfiable, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - let rec cfg learn_units [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 336 4 336 81] (self : borrowed (Type.creusat_trail_trail)) (f : Type.creusat_formula_formula) (d : borrowed (Type.creusat_decision_decisions)) : Type.core_option_option bool - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 329 4 329 42] Invariant0.invariant' ( * self) f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 330 4 330 48] Invariant1.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 331 4 331 30] Invariant2.invariant' f} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 329 4 329 42] Invariant0.invariant' ( ^ self) f } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 330 4 330 48] Invariant1.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 332 4 335 7] match (result) with + function Model0.model = Index0.model + clone CreuSat_Trail_Impl0_LearnUnit_Interface as LearnUnit0 + clone CreuSat_ConflictAnalysis_ResolveEmptyClause_Interface as ResolveEmptyClause0 + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_trail_trail + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_decision_decisions + clone CreuSat_Lit_Impl1_LitUnsat_Interface as LitUnsat0 + clone CreuSat_Lit_Impl1_LitSet_Interface as LitSet0 + clone CreuSat_Clause_Impl0_Index_Interface as Index1 + clone CreuSat_Clause_Impl3_Len_Interface as Len1 + clone CreuSat_Formula_Impl0_Index_Interface as Index0 + clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global + let rec cfg learn_units [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 336 4 336 81] (self : borrowed (Type.creusat_trail_trail)) (f : Type.creusat_formula_formula) (d : borrowed (Type.creusat_decision_decisions)) : Type.core_option_option bool + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 329 4 329 42] Invariant0.invariant' ( * self) f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 330 4 330 48] Invariant1.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 331 4 331 30] Invariant2.invariant' f} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 329 4 329 42] Invariant0.invariant' ( ^ self) f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 330 4 330 48] Invariant1.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 332 4 335 7] match (result) with | Type.Core_Option_Option_Some (True) -> NotSatisfiable0.not_satisfiable f | _ -> true end } @@ -24182,29 +23563,29 @@ module CreuSat_Trail_Impl0_LearnUnits BB0 { i_5 <- (0 : usize); _7 <- (); - old_d_6 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 338 20 338 32] d_3); + old_d_6 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 338 20 338 32] d_3); goto BB1 } BB1 { _9 <- (); - old_self_8 <- ghost ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 339 23 339 38] self_1); + old_self_8 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 339 23 339 38] self_1); goto BB2 } BB2 { goto BB3 } BB3 { - invariant self_inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 340 8 340 50] Invariant0.invariant' ( * self_1) f_2 }; - invariant proph { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 341 8 341 55] ^ old_self_8 = ^ self_1 }; - invariant proph_d { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 342 8 342 51] ^ old_d_6 = ^ d_3 }; - invariant d_inv { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 343 8 343 53] Invariant1.invariant' ( * d_3) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_2)) }; + invariant self_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 340 8 340 50] Invariant0.invariant' ( * self_1) f_2 }; + invariant proph { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 341 8 341 55] ^ old_self_8 = ^ self_1 }; + invariant proph_d { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 342 8 342 51] ^ old_d_6 = ^ d_3 }; + invariant d_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 343 8 343 53] Invariant1.invariant' ( * d_3) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_2)) }; _13 <- i_5; _15 <- Type.creusat_formula_formula_Formula_clauses f_2; - _14 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 344 18 344 33] Len0.len _15); + _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 344 18 344 33] Len0.len _15); goto BB4 } BB4 { - _12 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 344 14 344 33] _13 < _14); + _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 344 14 344 33] _13 < _14); switch (_12) | False -> goto BB21 | _ -> goto BB5 @@ -24213,17 +23594,17 @@ module CreuSat_Trail_Impl0_LearnUnits BB5 { _18 <- f_2; _19 <- i_5; - _17 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 345 26 345 30] Index0.index _18 _19); + _17 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 345 26 345 30] Index0.index _18 _19); goto BB6 } BB6 { clause_16 <- _17; _23 <- clause_16; - _22 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 346 15 346 27] Len1.len _23); + _22 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 346 15 346 27] Len1.len _23); goto BB7 } BB7 { - _21 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 346 15 346 32] _22 = (1 : usize)); + _21 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 346 15 346 32] _22 = (1 : usize)); switch (_21) | False -> goto BB19 | _ -> goto BB8 @@ -24231,7 +23612,7 @@ module CreuSat_Trail_Impl0_LearnUnits } BB8 { _26 <- clause_16; - _25 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 347 26 347 35] Index1.index _26 (0 : usize)); + _25 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 347 26 347 35] Index1.index _26 (0 : usize)); goto BB9 } BB9 { @@ -24239,7 +23620,7 @@ module CreuSat_Trail_Impl0_LearnUnits _28 <- lit_24; _30 <- Type.creusat_trail_trail_Trail_assignments ( * self_1); _29 <- _30; - _27 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 348 19 348 49] LitSet0.lit_set _28 _29); + _27 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 348 19 348 49] LitSet0.lit_set _28 _29); goto BB10 } BB10 { @@ -24252,7 +23633,7 @@ module CreuSat_Trail_Impl0_LearnUnits _32 <- lit_24; _34 <- Type.creusat_trail_trail_Trail_assignments ( * self_1); _33 <- _34; - _31 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 349 23 349 55] LitUnsat0.lit_unsat _32 _33); + _31 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 349 23 349 55] LitUnsat0.lit_unsat _32 _33); goto BB12 } BB12 { @@ -24267,7 +23648,7 @@ module CreuSat_Trail_Impl0_LearnUnits _38 <- * self_1; assume { Resolve1.resolve self_1 }; _39 <- i_5; - _36 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 353 36 353 68] ResolveEmptyClause0.resolve_empty_clause _37 _38 _39); + _36 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 353 36 353 68] ResolveEmptyClause0.resolve_empty_clause _37 _38 _39); goto BB14 } BB14 { @@ -24285,7 +23666,7 @@ module CreuSat_Trail_Impl0_LearnUnits _43 <- f_2; _44 <- borrow_mut ( * d_3); d_3 <- { d_3 with current = ( ^ _44) }; - _40 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 356 20 356 44] LearnUnit0.learn_unit _41 _42 _43 _44); + _40 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 356 20 356 44] LearnUnit0.learn_unit _41 _42 _43 _44); goto BB17 } BB17 { @@ -24300,7 +23681,7 @@ module CreuSat_Trail_Impl0_LearnUnits goto BB20 } BB20 { - i_5 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/trail.rs" 359 12 359 18] i_5 + (1 : usize)); + i_5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 359 12 359 18] i_5 + (1 : usize)); _11 <- (); goto BB3 } @@ -24321,14 +23702,14 @@ module CreuSat_Solver_Solver_Interface use prelude.Prelude use mach.int.Int use prelude.UInt8 - clone CreuSat_Logic_LogicFormula_Impl1_NotSatisfiable_Interface as NotSatisfiable0 - clone CreuSat_Logic_LogicFormula_Impl1_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface as NotSatisfiable0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 clone CreuSat_Logic_LogicFormula_FormulaSatInner_Interface as FormulaSatInner0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = uint8, type a = Type.alloc_alloc_global, axiom . clone CreuSat_Logic_LogicFormula_Impl0_Model_Interface as Model0 val solver [@cfg:stackify] (formula : borrowed (Type.creusat_formula_formula)) : Type.creusat_solver_satresult - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 351 0 355 3] match (result) with + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 351 0 355 3] match (result) with | Type.CreuSat_Solver_SatResult_Sat assn -> FormulaSatInner0.formula_sat_inner (Model0.model ( ^ formula)) (Model1.model assn) && Equisat0.equisat ( * formula) ( ^ formula) | Type.CreuSat_Solver_SatResult_Unsat -> NotSatisfiable0.not_satisfiable ( ^ formula) && Equisat0.equisat ( * formula) ( ^ formula) | _ -> true @@ -24340,162 +23721,126 @@ module CreuSat_Solver_Solver use prelude.Prelude use mach.int.Int use prelude.UInt8 - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = SatInner1.index_logic + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = SatInner0.sat_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model3 with function Model0.model = Model4.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner0 with function Model0.model = Model3.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, - predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss1.eventually_sat_complete_no_ass - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl1_SatInner as SatInner2 with function Model0.model = Model2.model, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, + type a = Type.alloc_alloc_global, function Model0.model = Model3.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model3 with function Model0.model = NotSatisfiable0.model, + function Model0.model = SatInner0.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner, predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_Impl1_Equisat as Equisat0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Model2.model - clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with function Model0.model = Model0.model, - predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner - clone CreuSat_Logic_LogicFormula_Impl1_NotSatisfiable as NotSatisfiable0 with function Model0.model = Model3.model, - predicate EquisatExtension0.equisat_extension = EquisatExtension0.equisat_extension + clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss1.formula_sat_inner + clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner, + predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss1.complete_inner + clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtension0.equisat_extension_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, function Model0.model = Model0.model, function Model0.model = SatInner2.model, + axiom . + clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = EquisatExtension0.model + clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with predicate EquisatExtension0.equisat_extension = NotSatisfiable0.equisat_extension + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable as NotSatisfiable0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 + clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = uint8, type a = Type.alloc_alloc_global, axiom . use mach.int.Int64 use mach.int.UInt64 - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with predicate Invariant1.invariant' = Invariant6.invariant' + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with predicate Invariant0.invariant' = Invariant6.invariant', + predicate Invariant0.invariant' = VarsInRangeInner0.invariant' + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, + predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', + predicate Invariant0.invariant' = CrefsInRange0.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner clone CreusotContracts_Std1_Vec_Impl0_Model as Model11 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 + type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, + predicate Sorted0.sorted = DecisionsAreSorted0.sorted + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model6 with function Model0.model = Invariant1.model, + function Model2.model = InvariantNoDecision0.model, function Model0.model = InvariantNoDecisionMirror0.model, + function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, + predicate Sat0.sat = UnitAreSat0.sat + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, + predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = usize, type a = Type.alloc_alloc_global, + function Model0.model = Invariant2.model, function Model1.model = InvariantNoDecision0.model, + function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted + clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, function Model1.model = Invariant2.model, + function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, + function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, + function Model0.model = TrailEntriesAreAssigned0.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant5.invariant_internal + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant4.watches_invariant_internal clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . + type a = Type.alloc_alloc_global, function Model0.model = Invariant4.model, axiom . clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant3 with function Model0.model = Model9.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model7.model, - predicate Sorted0.sorted = Sorted0.sorted + type a = Type.alloc_alloc_global, function Model0.model = Invariant3.model, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant2.invariant_no_decision_mirror, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant1 with predicate Invariant1.invariant' = New0.invariant', + predicate Invariant1.invariant' = New1.invariant', predicate Invariant0.invariant' = InvariantNoDecision0.invariant' + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant2.invariant_no_decision, + axiom . + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantMirror0.invariant', + predicate Invariant0.invariant' = FormulaInvariant0.invariant' + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant4 with predicate Invariant0.invariant' = New3.invariant', + predicate Invariant0.invariant' = InitWatches0.invariant', predicate Invariant3.invariant' = Inner0.invariant' + clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant3 with predicate Invariant1.invariant' = New2.invariant', + predicate Invariant1.invariant' = LearnUnits0.invariant', predicate Invariant1.invariant' = Inner0.invariant' + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 with predicate Invariant2.invariant' = New1.invariant', + predicate Invariant0.invariant' = LearnUnits0.invariant', predicate Invariant2.invariant' = Inner0.invariant' + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = CheckFormulaInvariant0.invariant_mirror, + predicate InvariantMirror0.invariant_mirror = New0.invariant_mirror, + predicate InvariantMirror0.invariant_mirror = New1.invariant_mirror, + predicate InvariantMirror0.invariant_mirror = New2.invariant_mirror, + predicate InvariantMirror0.invariant_mirror = InitWatches0.invariant_mirror, + predicate InvariantMirror0.invariant_mirror = LearnUnits0.invariant_mirror, + predicate InvariantMirror0.invariant_mirror = Inner0.invariant_mirror, + predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model5.modelTy + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with predicate Invariant0.invariant' = CheckFormulaInvariant0.invariant', + predicate Invariant0.invariant' = New0.invariant', predicate Invariant0.invariant' = New1.invariant', + predicate Invariant0.invariant' = New2.invariant', predicate Invariant1.invariant' = InitWatches0.invariant', + predicate Invariant2.invariant' = LearnUnits0.invariant', predicate Invariant0.invariant' = Inner0.invariant', axiom . + clone CreusotContracts_Logic_Model_Impl0_Model as Model5 with type t = Type.creusat_formula_formula, + function Model0.model = CheckFormulaInvariant0.model + clone CreuSat_Solver_Impl0_Inner_Interface as Inner0 clone CreuSat_Solver_Impl0_New_Interface as New4 clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_decision_decisions + clone CreuSat_Trail_Impl0_LearnUnits_Interface as LearnUnits0 + clone CreuSat_Watches_Impl0_InitWatches_Interface as InitWatches0 + clone CreuSat_Watches_Impl0_New_Interface as New3 + clone CreuSat_Decision_Impl1_New_Interface as New2 + clone CreuSat_Trail_Impl0_New_Interface as New1 + clone CreuSat_Assignments_Impl2_New_Interface as New0 clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant7.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, - predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model8.model, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model3.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner1.sat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model3.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant5 with function Model0.model = Model3.model, - predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant5.invariant', - function Model0.model = Model3.model - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model6 with function Model0.model = Model1.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model6.model, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model8.model, - function Model1.model = Model6.model, - predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant1 with function Model0.model = Model6.model - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with function Model0.model = Model2.model, - function Model1.model = Model3.model - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant7.invariant', - predicate Invariant1.invariant' = Invariant8.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model2.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model8.model, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model2.model, - function Model1.model = Model3.model, predicate Sat0.sat = Sat0.sat - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model2.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model6.model, - function Model1.model = Model8.model, predicate Invariant0.invariant' = Invariant6.invariant', - function Model2.model = Model7.model, function Model3.model = Model2.model, - predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, - predicate Invariant0.invariant' = Invariant1.invariant', function Model0.model = Model8.model, - predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model7.model, - predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, - predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, - predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model6.model, - predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, - predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, - predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, - predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, - function Model0.model = Model7.model, function Model1.model = Model8.model, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model11.model, - function Model1.model = Model2.model, function Model2.model = Model3.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant4 with function Model0.model = Model10.model, - predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal - clone CreuSat_Watches_Impl0_New_Interface as New3 with predicate Invariant0.invariant' = Invariant4.invariant' - clone CreuSat_Logic_LogicFormula_Impl1_InvariantMirror as InvariantMirror0 with function Model0.model = Model2.model, - predicate Invariant0.invariant' = Invariant5.invariant', function Model1.model = Model3.model - clone CreuSat_Logic_LogicFormula_Impl1_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, - function Model0.model = Model0.model, - predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . - clone CreuSat_Watches_Impl0_InitWatches_Interface as InitWatches0 with predicate Invariant0.invariant' = Invariant4.invariant', - predicate Invariant1.invariant' = Invariant0.invariant', - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_Decision_Impl1_New_Interface as New2 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant3.invariant', - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_Trail_Impl0_New_Interface as New1 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant1.invariant', predicate Invariant2.invariant' = Invariant2.invariant', - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_Assignments_Impl2_New_Interface as New0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant1.invariant', - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreusotContracts_Logic_Model_Impl0_Model as Model5 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model0.model - clone CreuSat_Solver_Impl0_Inner_Interface as Inner0 with predicate Invariant0.invariant' = Invariant0.invariant', - predicate Invariant1.invariant' = Invariant3.invariant', predicate Invariant2.invariant' = Invariant2.invariant', - predicate Invariant3.invariant' = Invariant4.invariant', function Model0.model = Model1.model, - predicate SatInner0.sat_inner = SatInner2.sat_inner, predicate Equisat0.equisat = Equisat0.equisat, - predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass, - predicate NotSatisfiable0.not_satisfiable = NotSatisfiable0.not_satisfiable, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_Trail_Impl0_LearnUnits_Interface as LearnUnits0 with predicate Invariant0.invariant' = Invariant2.invariant', - predicate Invariant1.invariant' = Invariant3.invariant', predicate Invariant2.invariant' = Invariant0.invariant', - predicate NotSatisfiable0.not_satisfiable = NotSatisfiable0.not_satisfiable, - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - clone CreuSat_Formula_Impl2_CheckFormulaInvariant_Interface as CheckFormulaInvariant0 with function Model0.model = Model5.model, - function Model1.model = Model1.model, - predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner, - predicate NotSatisfiable0.not_satisfiable = NotSatisfiable0.not_satisfiable, - predicate Invariant0.invariant' = Invariant0.invariant', - predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror - let rec cfg solver [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 356 0 356 49] (formula : borrowed (Type.creusat_formula_formula)) : Type.creusat_solver_satresult - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 351 0 355 3] match (result) with + clone CreuSat_Formula_Impl2_CheckFormulaInvariant_Interface as CheckFormulaInvariant0 + let rec cfg solver [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 356 0 356 49] (formula : borrowed (Type.creusat_formula_formula)) : Type.creusat_solver_satresult + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 351 0 355 3] match (result) with | Type.CreuSat_Solver_SatResult_Sat assn -> FormulaSatInner0.formula_sat_inner (Model0.model ( ^ formula)) (Model1.model assn) && Equisat0.equisat ( * formula) ( ^ formula) | Type.CreuSat_Solver_SatResult_Unsat -> NotSatisfiable0.not_satisfiable ( ^ formula) && Equisat0.equisat ( * formula) ( ^ formula) | _ -> true @@ -24543,7 +23888,7 @@ module CreuSat_Solver_Solver } BB0 { _4 <- * formula_1; - _3 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 357 10 357 43] CheckFormulaInvariant0.check_formula_invariant _4); + _3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 357 10 357 43] CheckFormulaInvariant0.check_formula_invariant _4); goto BB1 } BB1 { @@ -24565,28 +23910,28 @@ module CreuSat_Solver_Solver BB4 { _9 <- * formula_1; _11 <- * formula_1; - _10 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 361 40 361 65] New0.new _11); + _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 361 40 361 65] New0.new _11); goto BB5 } BB5 { - trail_8 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 361 20 361 66] New1.new _9 _10); + trail_8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 361 20 361 66] New1.new _9 _10); goto BB6 } BB6 { _13 <- * formula_1; - decisions_12 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 362 24 362 47] New2.new _13); + decisions_12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 362 24 362 47] New2.new _13); goto BB7 } BB7 { _15 <- * formula_1; - watches_14 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 363 22 363 43] New3.new _15); + watches_14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 363 22 363 43] New3.new _15); goto BB8 } BB8 { _17 <- borrow_mut watches_14; watches_14 <- ^ _17; _18 <- * formula_1; - _16 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 364 4 364 33] InitWatches0.init_watches _17 _18); + _16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 364 4 364 33] InitWatches0.init_watches _17 _18); goto BB9 } BB9 { @@ -24597,7 +23942,7 @@ module CreuSat_Solver_Solver decisions_12 <- ^ _24; _23 <- borrow_mut ( * _24); _24 <- { _24 with current = ( ^ _23) }; - _20 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 365 10 365 52] LearnUnits0.learn_units _21 _22 _23); + _20 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 365 10 365 52] LearnUnits0.learn_units _21 _22 _23); goto BB10 } BB10 { @@ -24625,7 +23970,7 @@ module CreuSat_Solver_Solver BB14 { _19 <- (); _29 <- * formula_1; - solver_28 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 370 21 370 41] New4.new _29); + solver_28 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 370 21 370 41] New4.new _29); goto BB16 } BB15 { @@ -24640,7 +23985,7 @@ module CreuSat_Solver_Solver _32 <- decisions_12; _33 <- trail_8; _34 <- watches_14; - _0 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/solver.rs" 371 4 371 52] Inner0.inner _30 _31 _32 _33 _34); + _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 371 4 371 52] Inner0.inner _30 _31 _32 _33 _34); goto BB17 } BB17 { @@ -24697,13 +24042,13 @@ module CreuSat_Watches_Impl0_MoveToEnd_Interface clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant0 val move_to_end [@cfg:stackify] (self : borrowed (Type.creusat_watches_watches)) (old_idx : usize) (old_pos : usize) (new_lit : Type.creusat_lit_lit) (_f : Type.creusat_formula_formula) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 118 4 118 43] Invariant0.invariant' ( * self) _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 119 4 119 54] IndexLogic0.index_logic new_lit < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 120 4 120 72] ToNegWatchidxLogic0.to_neg_watchidx_logic new_lit < Seq.length (Model0.model (Type.creusat_watches_watches_Watches_watches ( * self)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 121 4 121 49] UInt64.to_int old_idx < Seq.length (Model0.model (Type.creusat_watches_watches_Watches_watches ( * self)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 122 4 122 62] UInt64.to_int old_pos < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( * self))) (UInt64.to_int old_idx)))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 118 4 118 43] Invariant0.invariant' ( ^ self) _f } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 123 4 123 93] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( ^ self))) (UInt64.to_int old_idx))) = Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( * self))) (UInt64.to_int old_idx))) } + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 118 4 118 43] Invariant0.invariant' ( * self) _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 119 4 119 54] IndexLogic0.index_logic new_lit < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 120 4 120 72] ToNegWatchidxLogic0.to_neg_watchidx_logic new_lit < Seq.length (Model0.model (Type.creusat_watches_watches_Watches_watches ( * self)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 121 4 121 49] UInt64.to_int old_idx < Seq.length (Model0.model (Type.creusat_watches_watches_Watches_watches ( * self)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 122 4 122 62] UInt64.to_int old_pos < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( * self))) (UInt64.to_int old_idx)))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 118 4 118 43] Invariant0.invariant' ( ^ self) _f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 123 4 123 93] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( ^ self))) (UInt64.to_int old_idx))) = Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( * self))) (UInt64.to_int old_idx))) } end module CreuSat_Watches_Impl0_MoveToEnd @@ -24714,57 +24059,56 @@ module CreuSat_Watches_Impl0_MoveToEnd use seq.Seq use Type clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model3 with function Model0.model = Model4.model + type a = Type.alloc_alloc_global, function Model0.model = Model3.model, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model3 with function Model2.model = WatchesInvariantInternal0.model clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . + type a = Type.alloc_alloc_global, function Model1.model = WatchesInvariantInternal0.model, axiom . + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = ToNegWatchidxLogic0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = ToNegWatchidxLogic0.index_logic, + function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model1.model, - function Model1.model = Model2.model, function Model2.model = Model3.model, - function IndexLogic0.index_logic = IndexLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic as ToNegWatchidxLogic0 with function IndexLogic0.index_logic = IndexLogic0.index_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic + type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant0.watches_invariant_internal clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant0 with function Model0.model = Model0.model, - predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = seq (Type.creusat_watches_watcher) - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_watches_watcher - clone CreusotContracts_Std1_Slice_Impl0_Model as Model5 with type t = Type.creusat_watches_watcher, axiom . + type a = Type.alloc_alloc_global, function Model0.model = Invariant0.model, axiom . + clone CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic as ToNegWatchidxLogic0 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant0 + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_watches_watcher, + type ModelTy0.modelTy = Model6.modelTy + clone CreusotContracts_Std1_Slice_Impl0_Model as Model5 with type t = Type.creusat_watches_watcher, + function Model0.model = DerefMut0.model, function Model1.model = Swap0.model, function Model0.model = Model6.model, + axiom . clone CreusotContracts_Logic_Model_Impl1_Model as Model6 with type t = seq (Type.creusat_watches_watcher), - type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model5.model - clone Core_Slice_Impl0_Swap_Interface as Swap0 with type t = Type.creusat_watches_watcher, - function Model0.model = Model6.model, function Model1.model = Model5.model - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_watches_watches + function Model0.model = Swap0.model + clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) + clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + type Output0.output = Index0.output, type Output0.output = IndexMut0.output + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + predicate HasValue0.has_value = Index0.has_value, predicate HasValue0.has_value = IndexMut0.has_value + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + predicate InBounds0.in_bounds = Index0.in_bounds, predicate InBounds0.in_bounds = IndexMut0.in_bounds + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = seq (Type.creusat_watches_watcher) + clone Core_Slice_Impl0_Swap_Interface as Swap0 with type t = Type.creusat_watches_watcher clone Alloc_Vec_Impl11_DerefMut_Interface as DerefMut0 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = Model5.model, function Model1.model = Model1.model - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model + type a = Type.alloc_alloc_global + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type i = usize, type a = Type.alloc_alloc_global, function Model0.model = Model0.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - predicate ResolveElswhere0.resolve_elswhere = ResolveElswhere0.resolve_elswhere, type Output0.output = Output0.output + type i = usize, type a = Type.alloc_alloc_global + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_watches_watches + clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type i = usize, type a = Type.alloc_alloc_global, function Model0.model = Model0.model, - predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, - type Output0.output = Output0.output - let rec cfg move_to_end [@cfg:stackify] [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 124 4 124 93] (self : borrowed (Type.creusat_watches_watches)) (old_idx : usize) (old_pos : usize) (new_lit : Type.creusat_lit_lit) (_f : Type.creusat_formula_formula) : () - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 118 4 118 43] Invariant0.invariant' ( * self) _f} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 119 4 119 54] IndexLogic0.index_logic new_lit < div 18446744073709551615 2} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 120 4 120 72] ToNegWatchidxLogic0.to_neg_watchidx_logic new_lit < Seq.length (Model0.model (Type.creusat_watches_watches_Watches_watches ( * self)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 121 4 121 49] UInt64.to_int old_idx < Seq.length (Model0.model (Type.creusat_watches_watches_Watches_watches ( * self)))} - requires {[#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 122 4 122 62] UInt64.to_int old_pos < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( * self))) (UInt64.to_int old_idx)))} - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 118 4 118 43] Invariant0.invariant' ( ^ self) _f } - ensures { [#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 123 4 123 93] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( ^ self))) (UInt64.to_int old_idx))) = Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( * self))) (UInt64.to_int old_idx))) } + type i = usize, type a = Type.alloc_alloc_global + let rec cfg move_to_end [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 124 4 124 93] (self : borrowed (Type.creusat_watches_watches)) (old_idx : usize) (old_pos : usize) (new_lit : Type.creusat_lit_lit) (_f : Type.creusat_formula_formula) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 118 4 118 43] Invariant0.invariant' ( * self) _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 119 4 119 54] IndexLogic0.index_logic new_lit < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 120 4 120 72] ToNegWatchidxLogic0.to_neg_watchidx_logic new_lit < Seq.length (Model0.model (Type.creusat_watches_watches_Watches_watches ( * self)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 121 4 121 49] UInt64.to_int old_idx < Seq.length (Model0.model (Type.creusat_watches_watches_Watches_watches ( * self)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 122 4 122 62] UInt64.to_int old_pos < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( * self))) (UInt64.to_int old_idx)))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 118 4 118 43] Invariant0.invariant' ( ^ self) _f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 123 4 123 93] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( ^ self))) (UInt64.to_int old_idx))) = Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( * self))) (UInt64.to_int old_idx))) } = var _0 : (); @@ -24799,28 +24143,28 @@ module CreuSat_Watches_Impl0_MoveToEnd BB0 { _10 <- Type.creusat_watches_watches_Watches_watches ( * self_1); _11 <- old_idx_2; - _9 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 125 18 125 39] Index0.index _10 _11); + _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 125 18 125 39] Index0.index _10 _11); goto BB1 } BB1 { _8 <- _9; - _7 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 125 18 125 45] Len0.len _8); + _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 125 18 125 45] Len0.len _8); goto BB2 } BB2 { - end'_6 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 125 18 125 49] _7 - (1 : usize)); + end'_6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 125 18 125 49] _7 - (1 : usize)); _17 <- borrow_mut (Type.creusat_watches_watches_Watches_watches ( * self_1)); self_1 <- { self_1 with current = (let Type.CreuSat_Watches_Watches a = * self_1 in Type.CreuSat_Watches_Watches ( ^ _17)) }; assume { Resolve0.resolve self_1 }; _18 <- old_idx_2; - _16 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 126 8 126 29] IndexMut0.index_mut _17 _18); + _16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 126 8 126 29] IndexMut0.index_mut _17 _18); goto BB3 } BB3 { _15 <- borrow_mut ( * _16); _16 <- { _16 with current = ( ^ _15) }; assume { Resolve1.resolve _16 }; - _14 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 126 8 126 48] DerefMut0.deref_mut _15); + _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 126 8 126 48] DerefMut0.deref_mut _15); goto BB4 } BB4 { @@ -24828,7 +24172,7 @@ module CreuSat_Watches_Impl0_MoveToEnd _14 <- { _14 with current = ( ^ _13) }; _19 <- old_pos_3; _20 <- end'_6; - _12 <- ([#"/Users/e34402/Code/CreuSAT/CreuSAT/src/watches.rs" 126 8 126 48] Swap0.swap _13 _19 _20); + _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 126 8 126 48] Swap0.swap _13 _19 _20); goto BB5 } BB5 { @@ -24844,16 +24188,16 @@ module CreuSat_Clause_Impl1 use prelude.Prelude use mach.int.UInt64 clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model2.model - clone CreuSat_Clause_Impl0_Output as Output0 - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 + type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . + clone CreuSat_Clause_Impl0_Output as Output0 with type Output0.output = IndexMut1.output + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model1.model = IndexMut0.model, + function Model0.model = Model0.model clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_clause_clause, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model - clone CreuSat_Clause_Impl1_IndexMut_Interface as IndexMut0 with function Model0.model = Model0.model, - function Model1.model = Model1.model + function Model0.model = IndexMut0.model + clone CreuSat_Clause_Impl1_IndexMut_Interface as IndexMut0 with val index_mut = IndexMut1.index_mut clone Core_Ops_Index_IndexMut_IndexMut_Interface as IndexMut1 with type self = Type.creusat_clause_clause, - type idx = usize, val index_mut = IndexMut0.index_mut, type Output0.output = Output0.output + type idx = usize end module CreuSat_Formula_Impl1 use Type @@ -24861,16 +24205,16 @@ module CreuSat_Formula_Impl1 use prelude.Prelude use mach.int.UInt64 clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Model2.model - clone CreuSat_Formula_Impl0_Output as Output0 - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 + type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . + clone CreuSat_Formula_Impl0_Output as Output0 with type Output0.output = IndexMut1.output + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model1.model = IndexMut0.model, + function Model0.model = Model0.model clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_formula_formula, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model - clone CreuSat_Formula_Impl1_IndexMut_Interface as IndexMut0 with function Model0.model = Model0.model, - function Model1.model = Model1.model + function Model0.model = IndexMut0.model + clone CreuSat_Formula_Impl1_IndexMut_Interface as IndexMut0 with val index_mut = IndexMut1.index_mut clone Core_Ops_Index_IndexMut_IndexMut_Interface as IndexMut1 with type self = Type.creusat_formula_formula, - type idx = usize, val index_mut = IndexMut0.index_mut, type Output0.output = Output0.output + type idx = usize end module Core_Clone_Clone_CloneFrom_Interface type self @@ -24903,15 +24247,14 @@ end module CreuSat_Decision_Impl2 use Type clone Core_Clone_Clone_CloneFrom_Interface as CloneFrom0 with type self = Type.creusat_decision_node - clone CreuSat_Decision_Impl2_Clone_Interface as Clone0 - clone Core_Clone_Clone_Clone_Interface as Clone1 with type self = Type.creusat_decision_node, - val clone' = Clone0.clone' + clone CreuSat_Decision_Impl2_Clone_Interface as Clone0 with val clone' = Clone1.clone' + clone Core_Clone_Clone_Clone_Interface as Clone1 with type self = Type.creusat_decision_node end module CreuSat_Lit_Impl4 use Type clone Core_Clone_Clone_CloneFrom_Interface as CloneFrom0 with type self = Type.creusat_lit_lit - clone CreuSat_Lit_Impl4_Clone_Interface as Clone0 - clone Core_Clone_Clone_Clone_Interface as Clone1 with type self = Type.creusat_lit_lit, val clone' = Clone0.clone' + clone CreuSat_Lit_Impl4_Clone_Interface as Clone0 with val clone' = Clone1.clone' + clone Core_Clone_Clone_Clone_Interface as Clone1 with type self = Type.creusat_lit_lit end module CreuSat_Decision_Impl3 @@ -24926,12 +24269,11 @@ module CreuSat_Lit_Impl0_ModelTy end module CreuSat_Lit_Impl0 use Type - clone CreuSat_Lit_Impl0_Model as Model0 - clone CreuSat_Lit_Impl0_ModelTy as ModelTy0 - clone CreusotContracts_Logic_Model_Model_Model_Interface as Model1 with type self = Type.creusat_lit_lit, - function model = Model0.model, type ModelTy0.modelTy = ModelTy0.modelTy - clone CreusotContracts_Logic_Model_Model_ModelTy as ModelTy1 with type self = Type.creusat_lit_lit, - type modelTy = ModelTy0.modelTy + clone CreuSat_Lit_Impl0_ModelTy as ModelTy0 with type modelTy = ModelTy1.modelTy, + type ModelTy0.modelTy = Model1.modelTy + clone CreuSat_Lit_Impl0_Model as Model0 with function model = Model1.model + clone CreusotContracts_Logic_Model_Model_Model_Interface as Model1 with type self = Type.creusat_lit_lit + clone CreusotContracts_Logic_Model_Model_ModelTy as ModelTy1 with type self = Type.creusat_lit_lit end module Core_Cmp_PartialEq_Ne_Interface type self @@ -24953,11 +24295,10 @@ module Core_Cmp_PartialEq_Eq_Interface type self type rhs use prelude.Prelude - clone CreusotContracts_Logic_Model_Model_ModelTy as ModelTy0 with type self = self - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model1 with type t = rhs, - type ModelTy0.modelTy = ModelTy0.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = self, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Model_ModelTy as ModelTy0 with type self = self, + type ModelTy0.modelTy = Model0.modelTy, type ModelTy0.modelTy = Model1.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model1 with type t = rhs + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = self val eq [@cfg:stackify] (self : self) (other : rhs) : bool ensures { result = (Model0.model self = Model1.model other) } @@ -24966,26 +24307,24 @@ module Core_Cmp_PartialEq_Eq type self type rhs use prelude.Prelude - clone CreusotContracts_Logic_Model_Model_ModelTy as ModelTy0 with type self = self - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model1 with type t = rhs, - type ModelTy0.modelTy = ModelTy0.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = self, - type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Model_ModelTy as ModelTy0 with type self = self, + type ModelTy0.modelTy = Model0.modelTy, type ModelTy0.modelTy = Model1.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model1 with type t = rhs + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = self val eq [@cfg:stackify] (self : self) (other : rhs) : bool ensures { result = (Model0.model self = Model1.model other) } end module CreuSat_Lit_Impl2 use Type - clone CreuSat_Lit_Impl0_Model as Model1 - clone Core_Cmp_PartialEq_Ne_Interface as Ne0 with type self = Type.creusat_lit_lit, type rhs = Type.creusat_lit_lit - clone CreuSat_Lit_Impl0_ModelTy as ModelTy0 + clone CreuSat_Lit_Impl0_Model as Model1 with function Model0.model = Model0.model + clone CreuSat_Lit_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Eq1.modelTy, + type ModelTy0.modelTy = Model0.modelTy clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_lit_lit, - type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model - clone CreuSat_Lit_Impl2_Eq_Interface as Eq0 - clone Core_Cmp_PartialEq_Eq_Interface as Eq1 with type self = Type.creusat_lit_lit, type rhs = Type.creusat_lit_lit, - val eq = Eq0.eq, function Model0.model = Model0.model, function Model1.model = Model0.model, - type ModelTy0.modelTy = ModelTy0.modelTy + function Model0.model = Eq1.model, function Model1.model = Eq1.model + clone Core_Cmp_PartialEq_Ne_Interface as Ne0 with type self = Type.creusat_lit_lit, type rhs = Type.creusat_lit_lit + clone CreuSat_Lit_Impl2_Eq_Interface as Eq0 with val eq = Eq1.eq + clone Core_Cmp_PartialEq_Eq_Interface as Eq1 with type self = Type.creusat_lit_lit, type rhs = Type.creusat_lit_lit end module CreuSat_Lit_Impl3_Output use Type @@ -25012,12 +24351,10 @@ module Core_Ops_Bit_Not_Not end module CreuSat_Lit_Impl3 use Type - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreuSat_Lit_Impl3_Not_Interface as Not0 with function IndexLogic0.index_logic = IndexLogic0.index_logic, - function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic - clone CreuSat_Lit_Impl3_Output as Output0 - clone Core_Ops_Bit_Not_Not_Interface as Not1 with type self = Type.creusat_lit_lit, val not' = Not0.not', - type Output0.output = Output0.output - clone Core_Ops_Bit_Not_Output as Output1 with type self = Type.creusat_lit_lit, type output = Output0.output + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = Not0.is_positive_logic + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = Not0.index_logic + clone CreuSat_Lit_Impl3_Output as Output0 with type output = Output1.output, type Output0.output = Not1.output + clone CreuSat_Lit_Impl3_Not_Interface as Not0 with val not' = Not1.not' + clone Core_Ops_Bit_Not_Not_Interface as Not1 with type self = Type.creusat_lit_lit + clone Core_Ops_Bit_Not_Output as Output1 with type self = Type.creusat_lit_lit end From d18b22c0969509c30b6748996d7ff04d51b06200 Mon Sep 17 00:00:00 2001 From: Xavier Denis Date: Thu, 14 Jul 2022 22:30:58 -0700 Subject: [PATCH 3/4] Work on models --- CreuSAT/src/logic/logic.rs | 2 +- mlcfgs/CreuSAT.mlcfg | 25927 ++++++------------------------- mlcfgs/CreuSAT/why3session.xml | 10602 +------------ mlcfgs/CreuSAT/why3shapes.gz | Bin 179988 -> 14602 bytes 4 files changed, 5637 insertions(+), 30894 deletions(-) diff --git a/CreuSAT/src/logic/logic.rs b/CreuSAT/src/logic/logic.rs index babdaadb..e454260c 100644 --- a/CreuSAT/src/logic/logic.rs +++ b/CreuSAT/src/logic/logic.rs @@ -16,7 +16,7 @@ mod inner { #[predicate] fn satisfies_clause(self, cl: Seq) -> bool { pearlite! { - forall 0 <= i && i < cl.len() ==> self.0.get(@cl[i].idx) == cl[i].polarity + exists 0 <= i && i < cl.len() && self.0.get(@cl[i].idx) == cl[i].polarity } } diff --git a/mlcfgs/CreuSAT.mlcfg b/mlcfgs/CreuSAT.mlcfg index 36e509ca..a65690f3 100644 --- a/mlcfgs/CreuSAT.mlcfg +++ b/mlcfgs/CreuSAT.mlcfg @@ -18,11 +18,11 @@ module Type type creusat_lit_lit = | CreuSat_Lit_Lit usize bool - let function creusat_lit_lit_Lit_idx (self : creusat_lit_lit) : usize = + let function creusat_lit_lit_Lit_idx (self : creusat_lit_lit) : usize = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Lit_Lit a _ -> a end - let function creusat_lit_lit_Lit_polarity (self : creusat_lit_lit) : bool = + let function creusat_lit_lit_Lit_polarity (self : creusat_lit_lit) : bool = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Lit_Lit _ a -> a end @@ -49,15 +49,17 @@ module Type let function creusat_clause_clause_Clause_lits (self : creusat_clause_clause) : alloc_vec_vec (creusat_lit_lit) (alloc_alloc_global) - = + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Clause_Clause _ _ _ a -> a end - let function creusat_clause_clause_Clause_deleted (self : creusat_clause_clause) : bool = + let function creusat_clause_clause_Clause_deleted (self : creusat_clause_clause) : bool + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Clause_Clause a _ _ _ -> a end - let function creusat_clause_clause_Clause_search (self : creusat_clause_clause) : usize = + let function creusat_clause_clause_Clause_search (self : creusat_clause_clause) : usize + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Clause_Clause _ _ a _ -> a end @@ -66,44 +68,51 @@ module Type let function creusat_formula_formula_Formula_clauses (self : creusat_formula_formula) : alloc_vec_vec (creusat_clause_clause) (alloc_alloc_global) - = + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Formula_Formula a _ -> a end - let function creusat_formula_formula_Formula_num_vars (self : creusat_formula_formula) : usize = + let function creusat_formula_formula_Formula_num_vars (self : creusat_formula_formula) : usize + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Formula_Formula _ a -> a end type creusat_solver_solver = | CreuSat_Solver_Solver usize usize usize usize usize usize usize (alloc_vec_vec usize (alloc_alloc_global)) - let function creusat_solver_solver_Solver_num_conflicts (self : creusat_solver_solver) : usize = + let function creusat_solver_solver_Solver_num_conflicts (self : creusat_solver_solver) : usize + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Solver_Solver _ _ a _ _ _ _ _ -> a end - let function creusat_solver_solver_Solver_num_lemmas (self : creusat_solver_solver) : usize = + let function creusat_solver_solver_Solver_num_lemmas (self : creusat_solver_solver) : usize + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Solver_Solver a _ _ _ _ _ _ _ -> a end let function creusat_solver_solver_Solver_perm_diff (self : creusat_solver_solver) : alloc_vec_vec usize (alloc_alloc_global) - = + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Solver_Solver _ _ _ _ _ _ _ a -> a end - let function creusat_solver_solver_Solver_max_lemmas (self : creusat_solver_solver) : usize = + let function creusat_solver_solver_Solver_max_lemmas (self : creusat_solver_solver) : usize + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Solver_Solver _ a _ _ _ _ _ _ -> a end - let function creusat_solver_solver_Solver_initial_len (self : creusat_solver_solver) : usize = + let function creusat_solver_solver_Solver_initial_len (self : creusat_solver_solver) : usize + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Solver_Solver _ _ _ a _ _ _ _ -> a end - let function creusat_solver_solver_Solver_fast (self : creusat_solver_solver) : usize = + let function creusat_solver_solver_Solver_fast (self : creusat_solver_solver) : usize + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Solver_Solver _ _ _ _ _ a _ _ -> a end - let function creusat_solver_solver_Solver_slow (self : creusat_solver_solver) : usize = + let function creusat_solver_solver_Solver_slow (self : creusat_solver_solver) : usize + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Solver_Solver _ _ _ _ _ _ a _ -> a end @@ -112,7 +121,7 @@ module Type let function creusat_assignments_assignments_Assignments_0 (self : creusat_assignments_assignments) : alloc_vec_vec uint8 (alloc_alloc_global) - = + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Assignments_Assignments a -> a end @@ -121,13 +130,13 @@ module Type | CreuSat_Trail_Reason_Unit usize | CreuSat_Trail_Reason_Long usize - let function creusat_trail_reason_Long_0 (self : creusat_trail_reason) : usize = + let function creusat_trail_reason_Long_0 (self : creusat_trail_reason) : usize = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Trail_Reason_Decision -> any usize | CreuSat_Trail_Reason_Unit _ -> any usize | CreuSat_Trail_Reason_Long a -> a end - let function creusat_trail_reason_Unit_0 (self : creusat_trail_reason) : usize = + let function creusat_trail_reason_Unit_0 (self : creusat_trail_reason) : usize = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Trail_Reason_Decision -> any usize | CreuSat_Trail_Reason_Unit a -> a @@ -136,11 +145,13 @@ module Type type creusat_trail_step = | CreuSat_Trail_Step (creusat_lit_lit) usize (creusat_trail_reason) - let function creusat_trail_step_Step_lit (self : creusat_trail_step) : creusat_lit_lit = + let function creusat_trail_step_Step_lit (self : creusat_trail_step) : creusat_lit_lit + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Trail_Step a _ _ -> a end - let function creusat_trail_step_Step_reason (self : creusat_trail_step) : creusat_trail_reason = + let function creusat_trail_step_Step_reason (self : creusat_trail_step) : creusat_trail_reason + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Trail_Step _ _ a -> a end @@ -148,7 +159,7 @@ module Type | Core_Option_Option_None | Core_Option_Option_Some 't - let function core_option_option_Some_0 (self : core_option_option 't) : 't = + let function core_option_option_Some_0 (self : core_option_option 't) : 't = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | Core_Option_Option_None -> any 't | Core_Option_Option_Some a -> a @@ -158,42 +169,43 @@ module Type let function creusat_trail_trail_Trail_lit_to_level (self : creusat_trail_trail) : alloc_vec_vec usize (alloc_alloc_global) - = + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Trail_Trail _ a _ _ _ -> a end - let function creusat_trail_trail_Trail_assignments (self : creusat_trail_trail) : creusat_assignments_assignments = + let function creusat_trail_trail_Trail_assignments (self : creusat_trail_trail) : creusat_assignments_assignments + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Trail_Trail a _ _ _ _ -> a end let function creusat_trail_trail_Trail_trail (self : creusat_trail_trail) : alloc_vec_vec (creusat_trail_step) (alloc_alloc_global) - = + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Trail_Trail _ _ a _ _ -> a end let function creusat_trail_trail_Trail_decisions (self : creusat_trail_trail) : alloc_vec_vec usize (alloc_alloc_global) - = + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Trail_Trail _ _ _ _ a -> a end - let function creusat_trail_trail_Trail_curr_i (self : creusat_trail_trail) : usize = + let function creusat_trail_trail_Trail_curr_i (self : creusat_trail_trail) : usize = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Trail_Trail _ _ _ a _ -> a end type creusat_decision_node = | CreuSat_Decision_Node usize usize usize - let function creusat_decision_node_Node_next (self : creusat_decision_node) : usize = + let function creusat_decision_node_Node_next (self : creusat_decision_node) : usize = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Decision_Node a _ _ -> a end - let function creusat_decision_node_Node_prev (self : creusat_decision_node) : usize = + let function creusat_decision_node_Node_prev (self : creusat_decision_node) : usize = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Decision_Node _ a _ -> a end - let function creusat_decision_node_Node_ts (self : creusat_decision_node) : usize = + let function creusat_decision_node_Node_ts (self : creusat_decision_node) : usize = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Decision_Node _ _ a -> a end @@ -202,19 +214,22 @@ module Type let function creusat_decision_decisions_Decisions_linked_list (self : creusat_decision_decisions) : alloc_vec_vec (creusat_decision_node) (alloc_alloc_global) - = + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Decision_Decisions a _ _ _ -> a end - let function creusat_decision_decisions_Decisions_search (self : creusat_decision_decisions) : usize = + let function creusat_decision_decisions_Decisions_search (self : creusat_decision_decisions) : usize + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Decision_Decisions _ _ _ a -> a end - let function creusat_decision_decisions_Decisions_start (self : creusat_decision_decisions) : usize = + let function creusat_decision_decisions_Decisions_start (self : creusat_decision_decisions) : usize + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Decision_Decisions _ _ a _ -> a end - let function creusat_decision_decisions_Decisions_timestamp (self : creusat_decision_decisions) : usize = + let function creusat_decision_decisions_Decisions_timestamp (self : creusat_decision_decisions) : usize + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Decision_Decisions _ a _ _ -> a end @@ -226,14 +241,15 @@ module Type let function creusat_conflictanalysis_conflict_Restart_0 (self : creusat_conflictanalysis_conflict) : creusat_clause_clause - = + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_ConflictAnalysis_Conflict_Ground -> any creusat_clause_clause | CreuSat_ConflictAnalysis_Conflict_Unit _ -> any creusat_clause_clause | CreuSat_ConflictAnalysis_Conflict_Learned _ _ -> any creusat_clause_clause | CreuSat_ConflictAnalysis_Conflict_Restart a -> a end - let function creusat_conflictanalysis_conflict_Learned_0 (self : creusat_conflictanalysis_conflict) : usize = + let function creusat_conflictanalysis_conflict_Learned_0 (self : creusat_conflictanalysis_conflict) : usize + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_ConflictAnalysis_Conflict_Ground -> any usize | CreuSat_ConflictAnalysis_Conflict_Unit _ -> any usize @@ -242,7 +258,7 @@ module Type end let function creusat_conflictanalysis_conflict_Learned_1 (self : creusat_conflictanalysis_conflict) : creusat_clause_clause - = + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_ConflictAnalysis_Conflict_Ground -> any creusat_clause_clause | CreuSat_ConflictAnalysis_Conflict_Unit _ -> any creusat_clause_clause @@ -251,7 +267,7 @@ module Type end let function creusat_conflictanalysis_conflict_Unit_0 (self : creusat_conflictanalysis_conflict) : creusat_clause_clause - = + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_ConflictAnalysis_Conflict_Ground -> any creusat_clause_clause | CreuSat_ConflictAnalysis_Conflict_Unit a -> a @@ -267,11 +283,13 @@ module Type type creusat_watches_watcher = | CreuSat_Watches_Watcher usize (creusat_lit_lit) - let function creusat_watches_watcher_Watcher_cref (self : creusat_watches_watcher) : usize = + let function creusat_watches_watcher_Watcher_cref (self : creusat_watches_watcher) : usize + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Watches_Watcher a _ -> a end - let function creusat_watches_watcher_Watcher_blocker (self : creusat_watches_watcher) : creusat_lit_lit = + let function creusat_watches_watcher_Watcher_blocker (self : creusat_watches_watcher) : creusat_lit_lit + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Watches_Watcher _ a -> a end @@ -280,14 +298,15 @@ module Type let function creusat_watches_watches_Watches_watches (self : creusat_watches_watches) : alloc_vec_vec (alloc_vec_vec (creusat_watches_watcher) (alloc_alloc_global)) (alloc_alloc_global) - = + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Watches_Watches a -> a end type creusat_logic_logic_inner_m = | CreuSat_Logic_Logic_Inner_M (Map.map int bool) - let function creusat_logic_logic_inner_m_M_0 (self : creusat_logic_logic_inner_m) : Map.map int bool = + let function creusat_logic_logic_inner_m_M_0 (self : creusat_logic_logic_inner_m) : Map.map int bool + = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | CreuSat_Logic_Logic_Inner_M a -> a end @@ -295,12 +314,12 @@ module Type | Core_Result_Result_Ok 't | Core_Result_Result_Err 'e - let function core_result_result_Err_0 (self : core_result_result 't 'e) : 'e = + let function core_result_result_Err_0 (self : core_result_result 't 'e) : 'e = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | Core_Result_Result_Ok _ -> any 'e | Core_Result_Result_Err a -> a end - let function core_result_result_Ok_0 (self : core_result_result 't 'e) : 't = + let function core_result_result_Ok_0 (self : core_result_result 't 'e) : 't = [@vc:do_not_keep_trace] [@vc:sp] match (self) with | Core_Result_Result_Ok a -> a | Core_Result_Result_Err _ -> any 't @@ -319,32 +338,6 @@ module CreuSat_Lit_Impl1_New_Interface use Type val new [@cfg:stackify] (idx : usize) (polarity : bool) : Type.creusat_lit_lit end -module CreuSat_Lit_Impl1_New - use mach.int.Int - use prelude.Prelude - use mach.int.UInt64 - use Type - let rec cfg new [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 113 4 113 49] (idx : usize) (polarity : bool) : Type.creusat_lit_lit - - = - var _0 : Type.creusat_lit_lit; - var idx_1 : usize; - var polarity_2 : bool; - var _3 : usize; - var _4 : bool; - { - idx_1 <- idx; - polarity_2 <- polarity; - goto BB0 - } - BB0 { - _3 <- idx_1; - _4 <- polarity_2; - _0 <- Type.CreuSat_Lit_Lit _3 _4; - return _0 - } - -end module CreusotContracts_Std1_Vec_Impl0_Model_Interface type t type a @@ -378,19 +371,6 @@ module Alloc_Vec_Impl1_Len_Interface val len [@cfg:stackify] (self : Type.alloc_vec_vec t a) : usize ensures { UInt64.to_int result = Seq.length (Model0.model self) } -end -module Alloc_Vec_Impl1_Len - type t - type a - use mach.int.UInt64 - use seq.Seq - use prelude.Prelude - use Type - use mach.int.Int - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = t, type a = a, axiom . - val len [@cfg:stackify] (self : Type.alloc_vec_vec t a) : usize - ensures { UInt64.to_int result = Seq.length (Model0.model self) } - end module Alloc_Vec_FromElem_Interface type t @@ -404,22 +384,7 @@ module Alloc_Vec_FromElem_Interface axiom . val from_elem [@cfg:stackify] (elem : t) (n : usize) : Type.alloc_vec_vec t (Type.alloc_alloc_global) ensures { Seq.length (Model0.model result) = UInt64.to_int n } - ensures { forall i : (int) . 0 <= i && i < UInt64.to_int n -> Seq.get (Model0.model result) i = elem } - -end -module Alloc_Vec_FromElem - type t - use seq.Seq - use mach.int.UInt64 - use mach.int.Int - use mach.int.Int32 - use prelude.Prelude - use Type - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = t, type a = Type.alloc_alloc_global, - axiom . - val from_elem [@cfg:stackify] (elem : t) (n : usize) : Type.alloc_vec_vec t (Type.alloc_alloc_global) - ensures { Seq.length (Model0.model result) = UInt64.to_int n } - ensures { forall i : (int) . 0 <= i && i < UInt64.to_int n -> Seq.get (Model0.model result) i = elem } + ensures { forall i : (int) . 0 <= i /\ i < UInt64.to_int n -> Seq.get (Model0.model result) i = elem } end module CreusotContracts_Std1_Vec_Impl0 @@ -436,15 +401,15 @@ module CreuSat_Solver_Impl0_New use Type use mach.int.Int use mach.int.UInt64 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = FromElem0.model, axiom . + clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = usize, type a = Type.alloc_alloc_global, axiom . clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = Len0.model, axiom . - clone Alloc_Vec_FromElem_Interface as FromElem0 with type t = usize - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global + type a = Type.alloc_alloc_global, axiom . + clone Alloc_Vec_FromElem_Interface as FromElem0 with type t = usize, function Model0.model = Model1.model + clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, function Model0.model = Model0.model let rec cfg new [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 76 4 76 37] (f : Type.creusat_formula_formula) : Type.creusat_solver_solver - = + = [@vc:do_not_keep_trace] [@vc:sp] var _0 : Type.creusat_solver_solver; var f_1 : Type.creusat_formula_formula; var _2 : usize; @@ -501,7 +466,7 @@ module CreuSat_Solver_Impl0_IncreaseNumConflicts clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_solver_solver let rec cfg increase_num_conflicts [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 91 4 91 40] (self : borrowed (Type.creusat_solver_solver)) : () - = + = [@vc:do_not_keep_trace] [@vc:sp] var _0 : (); var self_1 : borrowed (Type.creusat_solver_solver); var _2 : bool; @@ -547,7 +512,7 @@ module CreuSat_Solver_Impl0_IncreaseNumLemmas clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_solver_solver let rec cfg increase_num_lemmas [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 99 4 99 37] (self : borrowed (Type.creusat_solver_solver)) : () - = + = [@vc:do_not_keep_trace] [@vc:sp] var _0 : (); var self_1 : borrowed (Type.creusat_solver_solver); var _2 : bool; @@ -586,188 +551,12 @@ module CreuSat_Util_UpdateFast_Interface use mach.int.UInt64 val update_fast [@cfg:stackify] (fast : borrowed usize) (lbd : usize) : () end -module CreuSat_Util_UpdateFast - use prelude.Prelude - use mach.int.Int - use mach.int.UInt64 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = usize - let rec cfg update_fast [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 40 0 40 48] (fast : borrowed usize) (lbd : usize) : () - - = - var _0 : (); - var fast_1 : borrowed usize; - var lbd_2 : usize; - var _3 : usize; - var _4 : usize; - var _5 : bool; - var lbd_shl_fifteen_6 : usize; - var _7 : bool; - var _8 : usize; - var _9 : usize; - var _10 : bool; - var _11 : usize; - var _12 : bool; - var _13 : usize; - var _14 : usize; - var _15 : usize; - var _16 : usize; - { - fast_1 <- fast; - lbd_2 <- lbd; - goto BB0 - } - BB0 { - _4 <- * fast_1; - _5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 41 13 41 23] (32 : usize) = (0 : usize)); - assert { not _5 }; - goto BB1 - } - BB1 { - _3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 41 13 41 23] _4 / (32 : usize)); - fast_1 <- { fast_1 with current = ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 41 4 41 23] * fast_1 - _3) }; - _8 <- lbd_2; - _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 42 35 42 53] (32768 : usize) = (0 : usize)); - assert { not _10 }; - goto BB2 - } - BB2 { - _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 42 35 42 53] (18446744073709551615 : usize) / (32768 : usize)); - _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 42 29 42 53] _8 < _9); - switch (_7) - | False -> goto BB4 - | _ -> goto BB3 - end - } - BB3 { - _11 <- lbd_2; - lbd_shl_fifteen_6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 42 56 42 67] _11 * (32768 : usize)); - goto BB5 - } - BB4 { - lbd_shl_fifteen_6 <- lbd_2; - goto BB5 - } - BB5 { - _14 <- * fast_1; - _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 43 7 43 25] (18446744073709551615 : usize) - _14); - _15 <- lbd_shl_fifteen_6; - _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 43 7 43 43] _13 > _15); - switch (_12) - | False -> goto BB7 - | _ -> goto BB6 - end - } - BB6 { - _16 <- lbd_shl_fifteen_6; - fast_1 <- { fast_1 with current = ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 44 8 44 32] * fast_1 + _16) }; - assume { Resolve0.resolve fast_1 }; - _0 <- (); - goto BB8 - } - BB7 { - assume { Resolve0.resolve fast_1 }; - _0 <- (); - goto BB8 - } - BB8 { - return _0 - } - -end module CreuSat_Util_UpdateSlow_Interface use prelude.Prelude use mach.int.Int use mach.int.UInt64 val update_slow [@cfg:stackify] (slow : borrowed usize) (lbd : usize) : () end -module CreuSat_Util_UpdateSlow - use prelude.Prelude - use mach.int.Int - use mach.int.UInt64 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = usize - let rec cfg update_slow [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 50 0 50 48] (slow : borrowed usize) (lbd : usize) : () - - = - var _0 : (); - var slow_1 : borrowed usize; - var lbd_2 : usize; - var _3 : usize; - var _4 : usize; - var _5 : bool; - var lbd_shl_five_6 : usize; - var _7 : bool; - var _8 : usize; - var _9 : usize; - var _10 : bool; - var _11 : usize; - var _12 : bool; - var _13 : usize; - var _14 : usize; - var _15 : usize; - var _16 : usize; - { - slow_1 <- slow; - lbd_2 <- lbd; - goto BB0 - } - BB0 { - _4 <- * slow_1; - _5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 51 13 51 26] (32768 : usize) = (0 : usize)); - assert { not _5 }; - goto BB1 - } - BB1 { - _3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 51 13 51 26] _4 / (32768 : usize)); - slow_1 <- { slow_1 with current = ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 51 4 51 26] * slow_1 - _3) }; - _8 <- lbd_2; - _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 52 32 52 47] (32 : usize) = (0 : usize)); - assert { not _10 }; - goto BB2 - } - BB2 { - _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 52 32 52 47] (18446744073709551615 : usize) / (32 : usize)); - _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 52 26 52 47] _8 < _9); - switch (_7) - | False -> goto BB4 - | _ -> goto BB3 - end - } - BB3 { - _11 <- lbd_2; - lbd_shl_five_6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 52 50 52 58] _11 * (32 : usize)); - goto BB5 - } - BB4 { - lbd_shl_five_6 <- lbd_2; - goto BB5 - } - BB5 { - _14 <- * slow_1; - _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 53 7 53 25] (18446744073709551615 : usize) - _14); - _15 <- lbd_shl_five_6; - _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 53 7 53 40] _13 > _15); - switch (_12) - | False -> goto BB7 - | _ -> goto BB6 - end - } - BB6 { - _16 <- lbd_shl_five_6; - slow_1 <- { slow_1 with current = ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 54 8 54 29] * slow_1 + _16) }; - assume { Resolve0.resolve slow_1 }; - _0 <- (); - goto BB8 - } - BB7 { - assume { Resolve0.resolve slow_1 }; - _0 <- (); - goto BB8 - } - BB8 { - return _0 - } - -end module CreusotContracts_Logic_Model_Model_ModelTy type self type modelTy @@ -792,7 +581,8 @@ module CreusotContracts_Logic_Model_Impl0_Model type t use prelude.Prelude clone CreusotContracts_Logic_Model_Model_ModelTy as ModelTy0 with type self = t - clone CreusotContracts_Logic_Model_Model_Model_Interface as Model0 with type self = t + clone CreusotContracts_Logic_Model_Model_Model_Interface as Model0 with type self = t, + type ModelTy0.modelTy = ModelTy0.modelTy function model (self : t) : ModelTy0.modelTy = Model0.model self end @@ -833,13 +623,13 @@ module CreuSat_Logic_LogicAssignments_Impl0 use prelude.Prelude use prelude.UInt8 use Type - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model0.model, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type modelTy = ModelTy1.modelTy, - type ModelTy0.modelTy = Model1.modelTy - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model0 with function model = Model1.model - clone CreusotContracts_Logic_Model_Model_Model_Interface as Model1 with type self = Type.creusat_assignments_assignments - clone CreusotContracts_Logic_Model_Model_ModelTy as ModelTy1 with type self = Type.creusat_assignments_assignments + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model0 with function Model0.model = Model2.model + clone CreusotContracts_Logic_Model_Model_Model_Interface as Model1 with type self = Type.creusat_assignments_assignments, + function model = Model0.model, type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Model_ModelTy as ModelTy1 with type self = Type.creusat_assignments_assignments, + type modelTy = ModelTy0.modelTy end module CreusotContracts_Std1_Slice_SliceIndexSpec_InBounds_Interface type self @@ -885,31 +675,12 @@ module Alloc_Vec_Impl16_Index_Interface use prelude.Prelude use Type use seq.Seq - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = t, - type ModelTy0.modelTy = InBounds0.modelTy, type ModelTy0.modelTy = HasValue0.modelTy - clone Core_Slice_Index_SliceIndex_Output as Output0 with type self = i, type t = seq t, - type Output0.output = HasValue0.output - clone CreusotContracts_Std1_Slice_SliceIndexSpec_HasValue_Interface as HasValue0 with type self = i, type t = seq t - clone CreusotContracts_Std1_Slice_SliceIndexSpec_InBounds_Interface as InBounds0 with type self = i, type t = seq t - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = t, type a = a, axiom . - val index [@cfg:stackify] (self : Type.alloc_vec_vec t a) (index : i) : Output0.output - requires {InBounds0.in_bounds index (Model0.model self)} - ensures { HasValue0.has_value index (Model0.model self) result } - -end -module Alloc_Vec_Impl16_Index - type t - type i - type a - use prelude.Prelude - use Type - use seq.Seq - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = t, - type ModelTy0.modelTy = InBounds0.modelTy, type ModelTy0.modelTy = HasValue0.modelTy - clone Core_Slice_Index_SliceIndex_Output as Output0 with type self = i, type t = seq t, - type Output0.output = HasValue0.output - clone CreusotContracts_Std1_Slice_SliceIndexSpec_HasValue_Interface as HasValue0 with type self = i, type t = seq t - clone CreusotContracts_Std1_Slice_SliceIndexSpec_InBounds_Interface as InBounds0 with type self = i, type t = seq t + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = t + clone Core_Slice_Index_SliceIndex_Output as Output0 with type self = i, type t = seq t + clone CreusotContracts_Std1_Slice_SliceIndexSpec_HasValue_Interface as HasValue0 with type self = i, type t = seq t, + type ModelTy0.modelTy = ModelTy0.modelTy, type Output0.output = Output0.output + clone CreusotContracts_Std1_Slice_SliceIndexSpec_InBounds_Interface as InBounds0 with type self = i, type t = seq t, + type ModelTy0.modelTy = ModelTy0.modelTy clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = t, type a = a, axiom . val index [@cfg:stackify] (self : Type.alloc_vec_vec t a) (index : i) : Output0.output requires {InBounds0.in_bounds index (Model0.model self)} @@ -976,61 +747,13 @@ module CreuSat_Assignments_Impl0_Index_Interface use prelude.Prelude use Type use prelude.UInt8 - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments, + type ModelTy0.modelTy = ModelTy0.modelTy val index [@cfg:stackify] (self : Type.creusat_assignments_assignments) (ix : usize) : uint8 requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 21 4 21 36] UInt64.to_int ix < Seq.length (Model0.model self)} ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 22 4 22 39] Seq.get (Model0.model self) (UInt64.to_int ix) = result } -end -module CreuSat_Assignments_Impl0_Index - use mach.int.UInt64 - use seq.Seq - use mach.int.Int - use prelude.Prelude - use Type - use prelude.UInt8 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_assignments_assignments - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = uint8 - clone Core_Slice_Index_Impl2_Output as Output0 with type t = uint8, type Output0.output = Index0.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = uint8, - predicate HasValue0.has_value = Index0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = uint8, - predicate InBounds0.in_bounds = Index0.in_bounds - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = uint8, type i = usize, type a = Type.alloc_alloc_global - let rec cfg index [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 23 4 23 48] (self : Type.creusat_assignments_assignments) (ix : usize) : uint8 - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 21 4 21 36] UInt64.to_int ix < Seq.length (Model0.model self)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 22 4 22 39] Seq.get (Model0.model self) (UInt64.to_int ix) = result } - - = - var _0 : uint8; - var self_1 : Type.creusat_assignments_assignments; - var ix_2 : usize; - var _3 : uint8; - var _4 : uint8; - var _5 : Type.alloc_vec_vec uint8 (Type.alloc_alloc_global); - var _6 : usize; - { - self_1 <- self; - ix_2 <- ix; - goto BB0 - } - BB0 { - _5 <- Type.creusat_assignments_assignments_Assignments_0 self_1; - _6 <- ix_2; - _4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 29 9 29 19] Index0.index _5 _6); - goto BB1 - } - BB1 { - _3 <- _4; - _0 <- _3; - return _0 - } - end module CreusotContracts_Logic_Model_Impl1_Model_Interface type t @@ -1042,7 +765,8 @@ module CreusotContracts_Logic_Model_Impl1_Model type t use prelude.Prelude clone CreusotContracts_Logic_Model_Model_ModelTy as ModelTy0 with type self = t - clone CreusotContracts_Logic_Model_Model_Model_Interface as Model0 with type self = t + clone CreusotContracts_Logic_Model_Model_Model_Interface as Model0 with type self = t, + type ModelTy0.modelTy = ModelTy0.modelTy function model (self : borrowed t) : ModelTy0.modelTy = Model0.model ( * self) end @@ -1068,40 +792,14 @@ module Alloc_Vec_Impl17_IndexMut_Interface use seq.Seq use prelude.Prelude use Type - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = t, - type ModelTy0.modelTy = InBounds0.modelTy, type ModelTy0.modelTy = HasValue0.modelTy, - type ModelTy0.modelTy = ResolveElswhere0.modelTy - clone Core_Slice_Index_SliceIndex_Output as Output0 with type self = i, type t = seq t, - type Output0.output = HasValue0.output - clone CreusotContracts_Std1_Slice_SliceIndexSpec_ResolveElswhere_Interface as ResolveElswhere0 with type self = i, - type t = seq t - clone CreusotContracts_Std1_Slice_SliceIndexSpec_HasValue_Interface as HasValue0 with type self = i, type t = seq t - clone CreusotContracts_Std1_Slice_SliceIndexSpec_InBounds_Interface as InBounds0 with type self = i, type t = seq t - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = t, type a = a, axiom . - val index_mut [@cfg:stackify] (self : borrowed (Type.alloc_vec_vec t a)) (index : i) : borrowed Output0.output - requires {InBounds0.in_bounds index (Model0.model ( * self))} - ensures { HasValue0.has_value index (Model0.model ( * self)) ( * result) } - ensures { HasValue0.has_value index (Model0.model ( ^ self)) ( ^ result) } - ensures { ResolveElswhere0.resolve_elswhere index (Model0.model ( * self)) (Model0.model ( ^ self)) } - ensures { Seq.length (Model0.model ( ^ self)) = Seq.length (Model0.model ( * self)) } - -end -module Alloc_Vec_Impl17_IndexMut - type t - type i - type a - use seq.Seq - use prelude.Prelude - use Type - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = t, - type ModelTy0.modelTy = InBounds0.modelTy, type ModelTy0.modelTy = HasValue0.modelTy, - type ModelTy0.modelTy = ResolveElswhere0.modelTy - clone Core_Slice_Index_SliceIndex_Output as Output0 with type self = i, type t = seq t, - type Output0.output = HasValue0.output + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = t + clone Core_Slice_Index_SliceIndex_Output as Output0 with type self = i, type t = seq t clone CreusotContracts_Std1_Slice_SliceIndexSpec_ResolveElswhere_Interface as ResolveElswhere0 with type self = i, - type t = seq t - clone CreusotContracts_Std1_Slice_SliceIndexSpec_HasValue_Interface as HasValue0 with type self = i, type t = seq t - clone CreusotContracts_Std1_Slice_SliceIndexSpec_InBounds_Interface as InBounds0 with type self = i, type t = seq t + type t = seq t, type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Std1_Slice_SliceIndexSpec_HasValue_Interface as HasValue0 with type self = i, type t = seq t, + type ModelTy0.modelTy = ModelTy0.modelTy, type Output0.output = Output0.output + clone CreusotContracts_Std1_Slice_SliceIndexSpec_InBounds_Interface as InBounds0 with type self = i, type t = seq t, + type ModelTy0.modelTy = ModelTy0.modelTy clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = t, type a = a, axiom . val index_mut [@cfg:stackify] (self : borrowed (Type.alloc_vec_vec t a)) (index : i) : borrowed Output0.output requires {InBounds0.in_bounds index (Model0.model ( * self))} @@ -1132,7 +830,7 @@ module CreusotContracts_Std1_Slice_Impl3_ResolveElswhere use seq.Seq use mach.int.Int32 predicate resolve_elswhere [@inline:trivial] (self : usize) (old' : Seq.seq t) (fin : Seq.seq t) = - forall i : (int) . 0 <= i && i <> UInt64.to_int self && i < Seq.length old' -> Seq.get old' i = Seq.get fin i + forall i : (int) . 0 <= i /\ i <> UInt64.to_int self /\ i < Seq.length old' -> Seq.get old' i = Seq.get fin i end module CreuSat_Assignments_Impl1_IndexMut_Interface use mach.int.UInt64 @@ -1142,84 +840,17 @@ module CreuSat_Assignments_Impl1_IndexMut_Interface use prelude.Prelude use Type use prelude.UInt8 - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model1 - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments, + type ModelTy0.modelTy = ModelTy0.modelTy val index_mut [@cfg:stackify] (self : borrowed (Type.creusat_assignments_assignments)) (ix : usize) : borrowed uint8 requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 35 4 35 36] UInt64.to_int ix < Seq.length (Model0.model self)} ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 36 4 36 40] Seq.get (Model1.model ( * self)) (UInt64.to_int ix) = * result } ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 37 4 37 40] Seq.get (Model1.model ( ^ self)) (UInt64.to_int ix) = ^ result } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 38 4 38 101] forall i : (int) . 0 <= i && i <> UInt64.to_int ix && i < Seq.length (Model0.model self) -> Seq.get (Model0.model self) i = Seq.get (Model1.model ( ^ self)) i } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 39 4 39 48] Seq.length (Model1.model ( ^ self)) = Seq.length (Model1.model ( * self)) } - -end -module CreuSat_Assignments_Impl1_IndexMut - use mach.int.UInt64 - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use prelude.Prelude - use Type - use prelude.UInt8 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model0.model - clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_assignments_assignments - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = uint8 - clone Core_Slice_Index_Impl2_Output as Output0 with type t = uint8, type Output0.output = IndexMut0.output - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = uint8, - predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = uint8, - predicate HasValue0.has_value = IndexMut0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = uint8, - predicate InBounds0.in_bounds = IndexMut0.in_bounds - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = uint8 - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = uint8, type i = usize, - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_assignments_assignments - let rec cfg index_mut [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 40 4 40 60] (self : borrowed (Type.creusat_assignments_assignments)) (ix : usize) : borrowed uint8 - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 35 4 35 36] UInt64.to_int ix < Seq.length (Model0.model self)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 36 4 36 40] Seq.get (Model1.model ( * self)) (UInt64.to_int ix) = * result } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 37 4 37 40] Seq.get (Model1.model ( ^ self)) (UInt64.to_int ix) = ^ result } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 38 4 38 101] forall i : (int) . 0 <= i && i <> UInt64.to_int ix && i < Seq.length (Model0.model self) -> Seq.get (Model0.model self) i = Seq.get (Model1.model ( ^ self)) i } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 38 4 38 101] forall i : (int) . 0 <= i /\ i <> UInt64.to_int ix /\ i < Seq.length (Model0.model self) -> Seq.get (Model0.model self) i = Seq.get (Model1.model ( ^ self)) i } ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 39 4 39 48] Seq.length (Model1.model ( ^ self)) = Seq.length (Model1.model ( * self)) } - = - var _0 : borrowed uint8; - var self_1 : borrowed (Type.creusat_assignments_assignments); - var ix_2 : usize; - var _3 : borrowed uint8; - var _4 : borrowed uint8; - var _5 : borrowed uint8; - var _6 : borrowed (Type.alloc_vec_vec uint8 (Type.alloc_alloc_global)); - var _7 : usize; - { - self_1 <- self; - ix_2 <- ix; - goto BB0 - } - BB0 { - _6 <- borrow_mut (Type.creusat_assignments_assignments_Assignments_0 ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Assignments_Assignments a = * self_1 in Type.CreuSat_Assignments_Assignments ( ^ _6)) }; - assume { Resolve0.resolve self_1 }; - _7 <- ix_2; - _5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 46 13 46 23] IndexMut0.index_mut _6 _7); - goto BB1 - } - BB1 { - _4 <- borrow_mut ( * _5); - _5 <- { _5 with current = ( ^ _4) }; - assume { Resolve1.resolve _5 }; - _3 <- borrow_mut ( * _4); - _4 <- { _4 with current = ( ^ _3) }; - assume { Resolve1.resolve _4 }; - _0 <- borrow_mut ( * _3); - _3 <- { _3 with current = ( ^ _0) }; - assume { Resolve1.resolve _3 }; - return _0 - } - end module CreuSat_Assignments_Impl2_Len_Interface use mach.int.UInt64 @@ -1227,45 +858,12 @@ module CreuSat_Assignments_Impl2_Len_Interface use prelude.Prelude use Type use mach.int.Int - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments, + type ModelTy0.modelTy = ModelTy0.modelTy val len [@cfg:stackify] (self : Type.creusat_assignments_assignments) : usize ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 54 4 54 40] UInt64.to_int result = Seq.length (Model0.model self) } -end -module CreuSat_Assignments_Impl2_Len - use mach.int.UInt64 - use seq.Seq - use prelude.Prelude - use Type - use mach.int.Int - use prelude.UInt8 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_assignments_assignments - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = uint8, type a = Type.alloc_alloc_global - let rec cfg len [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 55 4 55 30] (self : Type.creusat_assignments_assignments) : usize - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 54 4 54 40] UInt64.to_int result = Seq.length (Model0.model self) } - - = - var _0 : usize; - var self_1 : Type.creusat_assignments_assignments; - var _2 : Type.alloc_vec_vec uint8 (Type.alloc_alloc_global); - { - self_1 <- self; - goto BB0 - } - BB0 { - _2 <- Type.creusat_assignments_assignments_Assignments_0 self_1; - _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 56 8 56 20] Len0.len _2); - goto BB1 - } - BB1 { - return _0 - } - end module CreuSat_Logic_LogicAssignments_Impl1_Invariant_Interface use Type @@ -1282,7 +880,7 @@ module CreuSat_Logic_LogicAssignments_Impl1_Invariant predicate invariant' [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 47 4 47 46] (self : Type.creusat_assignments_assignments) (f : Type.creusat_formula_formula) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 48 8 51 9] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) = Seq.length (Model0.model self) && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model self) -> UInt8.to_int (Seq.get (Model0.model self) i) <= 3) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 48 8 51 9] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) = Seq.length (Model0.model self) /\ (forall i : (int) . 0 <= i /\ i < Seq.length (Model0.model self) -> UInt8.to_int (Seq.get (Model0.model self) i) <= 3) end module CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface use Type @@ -1342,7 +940,7 @@ module CreuSat_Logic_LogicClause_VarsInRangeInner predicate vars_in_range_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 21 0 21 55] (s : Seq.seq (Type.creusat_lit_lit)) (n : int) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 22 4 25 5] forall i : (int) . 0 <= i && i < Seq.length s -> Invariant0.invariant' (Seq.get s i) n + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 22 4 25 5] forall i : (int) . 0 <= i /\ i < Seq.length s -> Invariant0.invariant' (Seq.get s i) n end module CreuSat_Logic_LogicClause_NoDuplicateIndexesInner_Interface use seq.Seq @@ -1358,7 +956,7 @@ module CreuSat_Logic_LogicClause_NoDuplicateIndexesInner predicate no_duplicate_indexes_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 41 0 41 54] (s : Seq.seq (Type.creusat_lit_lit)) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 42 4 45 5] forall k : (int) . forall j : (int) . 0 <= j && j < Seq.length s && 0 <= k && k < j -> not IndexLogic0.index_logic (Seq.get s k) = IndexLogic0.index_logic (Seq.get s j) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 42 4 45 5] forall k : (int) . forall j : (int) . 0 <= j /\ j < Seq.length s /\ 0 <= k /\ k < j -> not IndexLogic0.index_logic (Seq.get s k) = IndexLogic0.index_logic (Seq.get s j) end module CreuSat_Logic_LogicClause_InvariantInternal_Interface use seq.Seq @@ -1375,7 +973,7 @@ module CreuSat_Logic_LogicClause_InvariantInternal predicate invariant_internal [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 29 0 29 54] (s : Seq.seq (Type.creusat_lit_lit)) (n : int) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 28 0 28 12] VarsInRangeInner0.vars_in_range_inner s n && NoDuplicateIndexesInner0.no_duplicate_indexes_inner s + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 28 0 28 12] VarsInRangeInner0.vars_in_range_inner s n /\ NoDuplicateIndexesInner0.no_duplicate_indexes_inner s end module CreuSat_Logic_LogicClause_Impl2_Invariant_Interface use Type @@ -1409,7 +1007,7 @@ module CreuSat_Logic_LogicFormula_Impl2_InvariantMirror predicate invariant_mirror [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 113 4 113 37] (self : Type.creusat_formula_formula) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 114 8 121 9] (forall i : (int) . 0 <= i && i < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) -> Invariant0.invariant' (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) i) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self))) && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) -> Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) i)) >= 1) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 114 8 121 9] (forall i : (int) . 0 <= i /\ i < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) -> Invariant0.invariant' (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) i) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self))) /\ (forall i : (int) . 0 <= i /\ i < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) -> Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) i)) >= 1) end module CreuSat_Logic_LogicFormula_Impl0_Model_Interface use Type @@ -1445,7 +1043,7 @@ module CreuSat_Logic_LogicFormula_FormulaInvariant predicate formula_invariant [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 28 0 28 55] (f : (Seq.seq (Type.creusat_clause_clause), int)) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 29 4 35 5] (forall i : (int) . 0 <= i && i < Seq.length (let (a, _) = f in a) -> Invariant0.invariant' (Seq.get (let (a, _) = f in a) i) (let (_, a) = f in a)) && (forall i : (int) . 0 <= i && i < Seq.length (let (a, _) = f in a) -> Seq.length (Model0.model (Seq.get (let (a, _) = f in a) i)) > 0) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 29 4 35 5] (forall i : (int) . 0 <= i /\ i < Seq.length (let (a, _) = f in a) -> Invariant0.invariant' (Seq.get (let (a, _) = f in a) i) (let (_, a) = f in a)) /\ (forall i : (int) . 0 <= i /\ i < Seq.length (let (a, _) = f in a) -> Seq.length (Model0.model (Seq.get (let (a, _) = f in a) i)) > 0) end module CreuSat_Logic_LogicFormula_Impl0_ModelTy use seq.Seq @@ -1457,12 +1055,13 @@ end module CreuSat_Logic_LogicFormula_Impl0 use Type clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type modelTy = ModelTy1.modelTy, - type ModelTy0.modelTy = Model1.modelTy - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function model = Model1.model - clone CreusotContracts_Logic_Model_Model_Model_Interface as Model1 with type self = Type.creusat_formula_formula - clone CreusotContracts_Logic_Model_Model_ModelTy as ModelTy1 with type self = Type.creusat_formula_formula + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Model2.model + clone CreusotContracts_Logic_Model_Model_Model_Interface as Model1 with type self = Type.creusat_formula_formula, + function model = Model0.model, type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Model_ModelTy as ModelTy1 with type self = Type.creusat_formula_formula, + type modelTy = ModelTy0.modelTy end module CreuSat_Logic_LogicClause_Impl0_ModelTy use seq.Seq @@ -1473,12 +1072,13 @@ end module CreuSat_Logic_LogicClause_Impl0 use Type clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type modelTy = ModelTy1.modelTy, - type ModelTy0.modelTy = Model1.modelTy - clone CreuSat_Logic_LogicClause_Impl0_Model as Model0 with function model = Model1.model - clone CreusotContracts_Logic_Model_Model_Model_Interface as Model1 with type self = Type.creusat_clause_clause - clone CreusotContracts_Logic_Model_Model_ModelTy as ModelTy1 with type self = Type.creusat_clause_clause + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 + clone CreuSat_Logic_LogicClause_Impl0_Model as Model0 with function Model0.model = Model2.model + clone CreusotContracts_Logic_Model_Model_Model_Interface as Model1 with type self = Type.creusat_clause_clause, + function model = Model0.model, type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Model_ModelTy as ModelTy1 with type self = Type.creusat_clause_clause, + type modelTy = ModelTy0.modelTy end module CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface use Type @@ -1496,32 +1096,6 @@ module CreuSat_Logic_LogicFormula_Impl2_Invariant [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 109 8 109 46] FormulaInvariant0.formula_invariant (Model0.model self) axiom invariant'_spec : forall self : Type.creusat_formula_formula . [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 107 4 107 49] invariant' self = InvariantMirror0.invariant_mirror self end -module CreuSat_Logic_LogicFormula_Impl2_Invariant_Impl - use Type - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = Invariant1.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model2.model, axiom . - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant0.invariant_internal - clone CreuSat_Logic_LogicClause_Impl0_Model as Model2 with function Model1.model = InvariantMirror0.model, - function Model0.model = FormulaInvariant0.model, function Model0.model = Invariant0.model - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant0 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, - function Model0.model = Model0.model, axiom . - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 - let rec ghost function invariant' (self : Type.creusat_formula_formula) : bool - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 107 4 107 49] result = InvariantMirror0.invariant_mirror self } - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 109 8 109 46] let a' = Model0.model self in FormulaInvariant0.formula_invariant a' -end module CreuSat_Logic_LogicTrail_Impl0_Invariant_Interface use Type predicate invariant' (self : Type.creusat_trail_reason) (f : Type.creusat_formula_formula) @@ -1539,8 +1113,8 @@ module CreuSat_Logic_LogicTrail_Impl0_Invariant = [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 13 8 23 9] match (self) with - | Type.CreuSat_Trail_Reason_Long cref -> 0 <= UInt64.to_int cref && UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) && Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) > 1 - | Type.CreuSat_Trail_Reason_Unit cref -> 0 <= UInt64.to_int cref && UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) && Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) = 1 + | Type.CreuSat_Trail_Reason_Long cref -> 0 <= UInt64.to_int cref /\ UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) /\ Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) > 1 + | Type.CreuSat_Trail_Reason_Unit cref -> 0 <= UInt64.to_int cref /\ UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) /\ Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) = 1 | _ -> true end end @@ -1556,7 +1130,7 @@ module CreuSat_Logic_LogicTrail_Impl1_Invariant predicate invariant' [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 48 4 48 46] (self : Type.creusat_trail_step) (f : Type.creusat_formula_formula) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 49 8 52 9] Invariant0.invariant' (Type.creusat_trail_step_Step_lit self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) && Invariant1.invariant' (Type.creusat_trail_step_Step_reason self) f + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 49 8 52 9] Invariant0.invariant' (Type.creusat_trail_step_Step_lit self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) /\ Invariant1.invariant' (Type.creusat_trail_step_Step_reason self) f end module CreuSat_Logic_LogicTrail_CrefsInRange_Interface use seq.Seq @@ -1572,7 +1146,7 @@ module CreuSat_Logic_LogicTrail_CrefsInRange predicate crefs_in_range [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 171 0 171 59] (trail : Seq.seq (Type.creusat_trail_step)) (f : Type.creusat_formula_formula) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 172 4 175 5] forall i : (int) . 0 <= i && i < Seq.length trail -> Invariant0.invariant' (Seq.get trail i) f + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 172 4 175 5] forall i : (int) . 0 <= i /\ i < Seq.length trail -> Invariant0.invariant' (Seq.get trail i) f end module CreuSat_Logic_LogicTrail_TrailInvariant_Interface use seq.Seq @@ -1687,7 +1261,7 @@ module CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner predicate clause_post_with_regards_to_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 194 0 194 90] (c : Type.creusat_clause_clause) (a : Seq.seq uint8) (j : int) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 195 4 199 5] IndexLogic0.index_logic (Seq.get (Model0.model c) 0) = j && SatInner0.sat_inner (Seq.get (Model0.model c) 0) a && (forall i : (int) . 1 <= i && i < Seq.length (Model0.model c) -> UnsatInner0.unsat_inner (Seq.get (Model0.model c) i) a) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 195 4 199 5] IndexLogic0.index_logic (Seq.get (Model0.model c) 0) = j /\ SatInner0.sat_inner (Seq.get (Model0.model c) 0) a /\ (forall i : (int) . 1 <= i /\ i < Seq.length (Model0.model c) -> UnsatInner0.unsat_inner (Seq.get (Model0.model c) i) a) end module CreuSat_Logic_LogicTrail_LongArePostUnitInner_Interface use seq.Seq @@ -1713,7 +1287,7 @@ module CreuSat_Logic_LogicTrail_LongArePostUnitInner predicate long_are_post_unit_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 230 0 230 92] (trail : Seq.seq (Type.creusat_trail_step)) (f : Type.creusat_formula_formula) (a : Seq.seq uint8) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 231 4 237 5] forall j : (int) . 0 <= j && j < Seq.length trail -> match (Type.creusat_trail_step_Step_reason (Seq.get trail j)) with + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 231 4 237 5] forall j : (int) . 0 <= j /\ j < Seq.length trail -> match (Type.creusat_trail_step_Step_reason (Seq.get trail j)) with | Type.CreuSat_Trail_Reason_Long k -> ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int k)) a (IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit (Seq.get trail j))) | _ -> true end @@ -1744,25 +1318,6 @@ module CreuSat_Lit_Impl1_IsPositive_Interface val is_positive [@cfg:stackify] (self : Type.creusat_lit_lit) : bool ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 37 4 37 50] result = IsPositiveLogic0.is_positive_logic self } -end -module CreuSat_Lit_Impl1_IsPositive - use Type - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - let rec cfg is_positive [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 38 4 38 36] (self : Type.creusat_lit_lit) : bool - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 37 4 37 50] result = IsPositiveLogic0.is_positive_logic self } - - = - var _0 : bool; - var self_1 : Type.creusat_lit_lit; - { - self_1 <- self; - goto BB0 - } - BB0 { - _0 <- Type.creusat_lit_lit_Lit_polarity self_1; - return _0 - } - end module CreuSat_Lit_Impl1_Index_Interface use mach.int.UInt64 @@ -1773,28 +1328,6 @@ module CreuSat_Lit_Impl1_Index_Interface val index [@cfg:stackify] (self : Type.creusat_lit_lit) : usize ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 30 4 30 45] UInt64.to_int result = IndexLogic0.index_logic self } -end -module CreuSat_Lit_Impl1_Index - use mach.int.UInt64 - use Type - use mach.int.Int - use prelude.Prelude - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - let rec cfg index [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 31 4 31 31] (self : Type.creusat_lit_lit) : usize - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 30 4 30 45] UInt64.to_int result = IndexLogic0.index_logic self } - - = - var _0 : usize; - var self_1 : Type.creusat_lit_lit; - { - self_1 <- self; - goto BB0 - } - BB0 { - _0 <- Type.creusat_lit_lit_Lit_idx self_1; - return _0 - } - end module CreuSat_Assignments_Impl2_SetAssignment_Interface use mach.int.UInt64 @@ -1803,19 +1336,22 @@ module CreuSat_Assignments_Impl2_SetAssignment_Interface use mach.int.Int32 use prelude.Prelude use Type - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model1.modelTy + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy1 clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant2.invariant_mirror + type a = Type.alloc_alloc_global + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 clone CreuSat_Logic_LogicLit_Impl1_Sat_Interface as Sat0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model2 clone CreuSat_Logic_LogicTrail_LongArePostUnitInner_Interface as LongArePostUnitInner0 clone CreuSat_Logic_Logic_Unset_Interface as Unset0 clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model1 with type t = Type.creusat_assignments_assignments + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model1 with type t = Type.creusat_assignments_assignments, + type ModelTy0.modelTy = ModelTy1.modelTy clone CreuSat_Logic_LogicTrail_TrailInvariant_Interface as TrailInvariant0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global) - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant2 with axiom . + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global), + type ModelTy0.modelTy = ModelTy0.modelTy + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant2 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . clone CreuSat_Logic_LogicLit_Impl1_Invariant_Interface as Invariant1 clone CreuSat_Logic_LogicAssignments_Impl1_Invariant_Interface as Invariant0 val set_assignment [@cfg:stackify] (self : borrowed (Type.creusat_assignments_assignments)) (lit : Type.creusat_lit_lit) (_f : Type.creusat_formula_formula) (_t : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global)) : () @@ -1829,245 +1365,21 @@ module CreuSat_Assignments_Impl2_SetAssignment_Interface ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 67 4 67 58] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model _t) _f (Model2.model ( ^ self)) } ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 68 4 68 51] not Unset0.unset (Seq.get (Model2.model ( ^ self)) (IndexLogic0.index_logic lit)) } ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 69 4 69 47] Seq.length (Model2.model ( ^ self)) = Seq.length (Model1.model self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 70 4 71 71] forall j : (int) . 0 <= j && j < Seq.length (Model1.model self) && j <> IndexLogic0.index_logic lit -> Seq.get (Model2.model ( * self)) j = Seq.get (Model2.model ( ^ self)) j } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 72 4 72 30] Sat0.sat lit ( ^ self) } - -end -module CreuSat_Assignments_Impl2_SetAssignment - use mach.int.UInt64 - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use prelude.Prelude - use Type - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = Invariant1.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = SatInner0.index_logic, function IndexLogic0.index_logic = UnsatInner0.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = Invariant4.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model7.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model7 with function Model1.model = InvariantMirror0.model, - function Model0.model = FormulaInvariant0.model, function Model0.model = ClausePostWithRegardsToInner0.model, - function Model0.model = Invariant3.model, function Model1.model = Invariant5.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = LongArePostUnitInner0.model, - function Model0.model = InvariantMirror0.model, function Model0.model = Model3.model, - function Model0.model = Invariant5.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant5 with predicate Invariant1.invariant' = Invariant4.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model2.model, axiom . - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model1.modelTy - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model, axiom . - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant2.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model3 with function Model0.model = Invariant2.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant2.invariant_mirror - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model0.model = Invariant0.model, - function Model0.model = Model1.model, function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreusotContracts_Logic_Model_Impl1_Model as Model1 with type t = Type.creusat_assignments_assignments - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global) - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant2 with axiom . - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant0 - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy2 with type t = uint8 - clone Core_Slice_Index_Impl2_Output as Output0 with type t = uint8, type Output0.output = IndexMut0.output - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = uint8, - predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = uint8, - predicate HasValue0.has_value = IndexMut0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = uint8, - predicate InBounds0.in_bounds = IndexMut0.in_bounds - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = uint8 - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = uint8, type i = usize, - type a = Type.alloc_alloc_global - clone CreuSat_Lit_Impl1_Index_Interface as Index0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_assignments_assignments - clone CreuSat_Lit_Impl1_IsPositive_Interface as IsPositive0 - let rec cfg set_assignment [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 73 4 73 76] (self : borrowed (Type.creusat_assignments_assignments)) (lit : Type.creusat_lit_lit) (_f : Type.creusat_formula_formula) (_t : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global)) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 61 4 61 43] Invariant0.invariant' ( * self) _f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 62 4 62 44] Invariant1.invariant' lit (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 63 4 63 31] Invariant2.invariant' _f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 64 4 64 42] TrailInvariant0.trail_invariant (Model0.model _t) _f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 65 4 65 50] Unset0.unset (Seq.get (Model1.model self) (IndexLogic0.index_logic lit))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 66 4 66 58] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model _t) _f (Model1.model self)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 61 4 61 43] Invariant0.invariant' ( ^ self) _f } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 67 4 67 58] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model _t) _f (Model2.model ( ^ self)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 68 4 68 51] not Unset0.unset (Seq.get (Model2.model ( ^ self)) (IndexLogic0.index_logic lit)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 69 4 69 47] Seq.length (Model2.model ( ^ self)) = Seq.length (Model1.model self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 70 4 71 71] forall j : (int) . 0 <= j && j < Seq.length (Model1.model self) && j <> IndexLogic0.index_logic lit -> Seq.get (Model2.model ( * self)) j = Seq.get (Model2.model ( ^ self)) j } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 70 4 71 71] forall j : (int) . 0 <= j /\ j < Seq.length (Model1.model self) /\ j <> IndexLogic0.index_logic lit -> Seq.get (Model2.model ( * self)) j = Seq.get (Model2.model ( ^ self)) j } ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 72 4 72 30] Sat0.sat lit ( ^ self) } - = - var _0 : (); - var self_1 : borrowed (Type.creusat_assignments_assignments); - var lit_2 : Type.creusat_lit_lit; - var _f_3 : Type.creusat_formula_formula; - var _t_4 : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global); - ghost var old_self_5 : borrowed (Type.creusat_assignments_assignments); - var _6 : (); - var _7 : bool; - var _8 : Type.creusat_lit_lit; - var _9 : borrowed uint8; - var _10 : borrowed (Type.alloc_vec_vec uint8 (Type.alloc_alloc_global)); - var _11 : usize; - var _12 : Type.creusat_lit_lit; - var _13 : borrowed uint8; - var _14 : borrowed (Type.alloc_vec_vec uint8 (Type.alloc_alloc_global)); - var _15 : usize; - var _16 : Type.creusat_lit_lit; - { - self_1 <- self; - lit_2 <- lit; - _f_3 <- _f; - _t_4 <- _t; - goto BB0 - } - BB0 { - _6 <- (); - old_self_5 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 74 23 74 38] self_1); - goto BB1 - } - BB1 { - _8 <- lit_2; - _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 76 11 76 28] IsPositive0.is_positive _8); - goto BB2 - } - BB2 { - switch (_7) - | False -> goto BB6 - | _ -> goto BB3 - end - } - BB3 { - _10 <- borrow_mut (Type.creusat_assignments_assignments_Assignments_0 ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Assignments_Assignments a = * self_1 in Type.CreuSat_Assignments_Assignments ( ^ _10)) }; - assume { Resolve0.resolve self_1 }; - _12 <- lit_2; - _11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 77 19 77 30] Index0.index _12); - goto BB4 - } - BB4 { - _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 77 12 77 31] IndexMut0.index_mut _10 _11); - goto BB5 - } - BB5 { - _9 <- { _9 with current = (1 : uint8) }; - assume { Resolve1.resolve _9 }; - _0 <- (); - goto BB9 - } - BB6 { - _14 <- borrow_mut (Type.creusat_assignments_assignments_Assignments_0 ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Assignments_Assignments a = * self_1 in Type.CreuSat_Assignments_Assignments ( ^ _14)) }; - assume { Resolve0.resolve self_1 }; - _16 <- lit_2; - _15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 79 19 79 30] Index0.index _16); - goto BB7 - } - BB7 { - _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 79 12 79 31] IndexMut0.index_mut _14 _15); - goto BB8 - } - BB8 { - _13 <- { _13 with current = (0 : uint8) }; - assume { Resolve1.resolve _13 }; - _0 <- (); - goto BB9 - } - BB9 { - return _0 - } - end module CreuSat_Assignments_Impl2_New_Interface use prelude.Prelude use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 clone CreuSat_Logic_LogicAssignments_Impl1_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . val new [@cfg:stackify] (f : Type.creusat_formula_formula) : Type.creusat_assignments_assignments requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 85 4 85 30] Invariant0.invariant' f} ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 86 4 86 36] Invariant1.invariant' result f } -end -module CreuSat_Assignments_Impl2_New - use prelude.Prelude - use Type - use mach.int.Int - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = Invariant3.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model3.model, axiom . - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant2.invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model3 with function Model1.model = InvariantMirror0.model, - function Model0.model = FormulaInvariant0.model, function Model0.model = Invariant2.model - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, - function Model0.model = Model0.model, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Invariant1.model - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Invariant0.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - use mach.int.UInt64 - clone Alloc_Vec_FromElem_Interface as FromElem0 with type t = uint8 - let rec cfg new [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 87 4 87 35] (f : Type.creusat_formula_formula) : Type.creusat_assignments_assignments - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 85 4 85 30] Invariant0.invariant' f} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 86 4 86 36] Invariant1.invariant' result f } - - = - var _0 : Type.creusat_assignments_assignments; - var f_1 : Type.creusat_formula_formula; - var _2 : Type.alloc_vec_vec uint8 (Type.alloc_alloc_global); - var _3 : usize; - { - f_1 <- f; - goto BB0 - } - BB0 { - _3 <- Type.creusat_formula_formula_Formula_num_vars f_1; - _2 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/assignments.rs" 88 20 88 49] FromElem0.from_elem (2 : uint8) _3); - goto BB1 - } - BB1 { - _0 <- Type.CreuSat_Assignments_Assignments _2; - goto BB2 - } - BB2 { - return _0 - } - end module CreuSat_Clause_Impl0_Index_Interface use mach.int.UInt64 @@ -2075,61 +1387,13 @@ module CreuSat_Clause_Impl0_Index_Interface use mach.int.Int use prelude.Prelude use Type - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type ModelTy0.modelTy = ModelTy0.modelTy val index [@cfg:stackify] (self : Type.creusat_clause_clause) (ix : usize) : Type.creusat_lit_lit requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 22 4 22 36] UInt64.to_int ix < Seq.length (Model0.model self)} ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 23 4 23 39] Seq.get (Model0.model self) (UInt64.to_int ix) = result } -end -module CreuSat_Clause_Impl0_Index - use mach.int.UInt64 - use seq.Seq - use mach.int.Int - use prelude.Prelude - use Type - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_lit_lit - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_lit_lit, type Output0.output = Index0.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_lit_lit, - predicate HasValue0.has_value = Index0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_lit_lit, - predicate InBounds0.in_bounds = Index0.in_bounds - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.creusat_lit_lit, type i = usize, - type a = Type.alloc_alloc_global - let rec cfg index [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 24 4 24 38] (self : Type.creusat_clause_clause) (ix : usize) : Type.creusat_lit_lit - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 22 4 22 36] UInt64.to_int ix < Seq.length (Model0.model self)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 23 4 23 39] Seq.get (Model0.model self) (UInt64.to_int ix) = result } - - = - var _0 : Type.creusat_lit_lit; - var self_1 : Type.creusat_clause_clause; - var ix_2 : usize; - var _3 : Type.creusat_lit_lit; - var _4 : Type.creusat_lit_lit; - var _5 : Type.alloc_vec_vec (Type.creusat_lit_lit) (Type.alloc_alloc_global); - var _6 : usize; - { - self_1 <- self; - ix_2 <- ix; - goto BB0 - } - BB0 { - _5 <- Type.creusat_clause_clause_Clause_lits self_1; - _6 <- ix_2; - _4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 30 9 30 22] Index0.index _5 _6); - goto BB1 - } - BB1 { - _3 <- _4; - _0 <- _3; - return _0 - } - end module CreuSat_Clause_Impl1_IndexMut_Interface use mach.int.UInt64 @@ -2138,84 +1402,17 @@ module CreuSat_Clause_Impl1_IndexMut_Interface use mach.int.Int32 use prelude.Prelude use Type - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_clause_clause + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type ModelTy0.modelTy = ModelTy0.modelTy val index_mut [@cfg:stackify] (self : borrowed (Type.creusat_clause_clause)) (ix : usize) : borrowed (Type.creusat_lit_lit) requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 36 4 36 36] UInt64.to_int ix < Seq.length (Model0.model self)} ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 37 4 37 40] Seq.get (Model1.model ( * self)) (UInt64.to_int ix) = * result } ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 38 4 38 40] Seq.get (Model1.model ( ^ self)) (UInt64.to_int ix) = ^ result } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 39 4 39 101] forall i : (int) . 0 <= i && i <> UInt64.to_int ix && i < Seq.length (Model0.model self) -> Seq.get (Model0.model self) i = Seq.get (Model1.model ( ^ self)) i } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 40 4 40 48] Seq.length (Model1.model ( ^ self)) = Seq.length (Model1.model ( * self)) } - -end -module CreuSat_Clause_Impl1_IndexMut - use mach.int.UInt64 - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use prelude.Prelude - use Type - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model0.model - clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_lit_lit - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_lit_lit, - type Output0.output = IndexMut0.output - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.creusat_lit_lit, - predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_lit_lit, - predicate HasValue0.has_value = IndexMut0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_lit_lit, - predicate InBounds0.in_bounds = IndexMut0.in_bounds - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_lit_lit - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.creusat_lit_lit, type i = usize, - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_clause_clause - let rec cfg index_mut [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 41 4 41 50] (self : borrowed (Type.creusat_clause_clause)) (ix : usize) : borrowed (Type.creusat_lit_lit) - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 36 4 36 36] UInt64.to_int ix < Seq.length (Model0.model self)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 37 4 37 40] Seq.get (Model1.model ( * self)) (UInt64.to_int ix) = * result } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 38 4 38 40] Seq.get (Model1.model ( ^ self)) (UInt64.to_int ix) = ^ result } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 39 4 39 101] forall i : (int) . 0 <= i && i <> UInt64.to_int ix && i < Seq.length (Model0.model self) -> Seq.get (Model0.model self) i = Seq.get (Model1.model ( ^ self)) i } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 39 4 39 101] forall i : (int) . 0 <= i /\ i <> UInt64.to_int ix /\ i < Seq.length (Model0.model self) -> Seq.get (Model0.model self) i = Seq.get (Model1.model ( ^ self)) i } ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 40 4 40 48] Seq.length (Model1.model ( ^ self)) = Seq.length (Model1.model ( * self)) } - = - var _0 : borrowed (Type.creusat_lit_lit); - var self_1 : borrowed (Type.creusat_clause_clause); - var ix_2 : usize; - var _3 : borrowed (Type.creusat_lit_lit); - var _4 : borrowed (Type.creusat_lit_lit); - var _5 : borrowed (Type.creusat_lit_lit); - var _6 : borrowed (Type.alloc_vec_vec (Type.creusat_lit_lit) (Type.alloc_alloc_global)); - var _7 : usize; - { - self_1 <- self; - ix_2 <- ix; - goto BB0 - } - BB0 { - _6 <- borrow_mut (Type.creusat_clause_clause_Clause_lits ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Clause_Clause a b c d = * self_1 in Type.CreuSat_Clause_Clause a b c ( ^ _6)) }; - assume { Resolve0.resolve self_1 }; - _7 <- ix_2; - _5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 47 13 47 26] IndexMut0.index_mut _6 _7); - goto BB1 - } - BB1 { - _4 <- borrow_mut ( * _5); - _5 <- { _5 with current = ( ^ _4) }; - assume { Resolve1.resolve _5 }; - _3 <- borrow_mut ( * _4); - _4 <- { _4 with current = ( ^ _3) }; - assume { Resolve1.resolve _4 }; - _0 <- borrow_mut ( * _3); - _3 <- { _3 with current = ( ^ _0) }; - assume { Resolve1.resolve _3 }; - return _0 - } - end module CreuSat_Clause_Impl2_Clone_Interface use prelude.Prelude @@ -2223,13 +1420,6 @@ module CreuSat_Clause_Impl2_Clone_Interface val clone' [@cfg:stackify] (self : Type.creusat_clause_clause) : Type.creusat_clause_clause ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 53 4 53 31] result = self } -end -module CreuSat_Clause_Impl2_Clone - use prelude.Prelude - use Type - val clone' [@cfg:stackify] (self : Type.creusat_clause_clause) : Type.creusat_clause_clause - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 53 4 53 31] result = self } - end module CreuSat_Clause_Impl3_Len_Interface use mach.int.UInt64 @@ -2237,44 +1427,12 @@ module CreuSat_Clause_Impl3_Len_Interface use prelude.Prelude use Type use mach.int.Int - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type ModelTy0.modelTy = ModelTy0.modelTy val len [@cfg:stackify] (self : Type.creusat_clause_clause) : usize ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 102 4 102 40] UInt64.to_int result = Seq.length (Model0.model self) } -end -module CreuSat_Clause_Impl3_Len - use mach.int.UInt64 - use seq.Seq - use prelude.Prelude - use Type - use mach.int.Int - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_clause_clause - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_lit_lit, type a = Type.alloc_alloc_global - let rec cfg len [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 103 4 103 30] (self : Type.creusat_clause_clause) : usize - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 102 4 102 40] UInt64.to_int result = Seq.length (Model0.model self) } - - = - var _0 : usize; - var self_1 : Type.creusat_clause_clause; - var _2 : Type.alloc_vec_vec (Type.creusat_lit_lit) (Type.alloc_alloc_global); - { - self_1 <- self; - goto BB0 - } - BB0 { - _2 <- Type.creusat_clause_clause_Clause_lits self_1; - _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 104 8 104 23] Len0.len _2); - goto BB1 - } - BB1 { - return _0 - } - end module CreuSat_Lit_Impl1_CheckLitInvariant_Interface use mach.int.UInt64 @@ -2285,41 +1443,6 @@ module CreuSat_Lit_Impl1_CheckLitInvariant_Interface val check_lit_invariant [@cfg:stackify] (self : Type.creusat_lit_lit) (n : usize) : bool ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 44 4 44 44] result = Invariant0.invariant' self (UInt64.to_int n) } -end -module CreuSat_Lit_Impl1_CheckLitInvariant - use mach.int.UInt64 - use prelude.Prelude - use Type - use mach.int.Int - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = Invariant0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant0 - clone CreuSat_Lit_Impl1_Index_Interface as Index0 - let rec cfg check_lit_invariant [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 45 4 45 55] (self : Type.creusat_lit_lit) (n : usize) : bool - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 44 4 44 44] result = Invariant0.invariant' self (UInt64.to_int n) } - - = - var _0 : bool; - var self_1 : Type.creusat_lit_lit; - var n_2 : usize; - var _3 : usize; - var _4 : Type.creusat_lit_lit; - var _5 : usize; - { - self_1 <- self; - n_2 <- n; - goto BB0 - } - BB0 { - _4 <- self_1; - _3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 46 8 46 20] Index0.index _4); - goto BB1 - } - BB1 { - _5 <- n_2; - _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 46 8 46 24] _3 < _5); - return _0 - } - end module CreuSat_Logic_LogicClause_Impl2_NoDuplicateIndexes_Interface use Type @@ -2352,15 +1475,6 @@ module Core_Ops_Index_Index_Index_Interface val index [@cfg:stackify] (self : self) (index : idx) : Output0.output requires {false} -end -module Core_Ops_Index_Index_Index - type self - type idx - use prelude.Prelude - clone Core_Ops_Index_Index_Output as Output0 with type self = self, type idx = idx - val index [@cfg:stackify] (self : self) (index : idx) : Output0.output - requires {false} - end module CreuSat_Clause_Impl0 use Type @@ -2368,15 +1482,17 @@ module CreuSat_Clause_Impl0 use prelude.Prelude use mach.int.UInt64 clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model2.model + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - function Model0.model = Index0.model - clone CreuSat_Clause_Impl0_Output as Output0 with type output = Output1.output, type Output0.output = Index1.output - clone CreuSat_Clause_Impl0_Index_Interface as Index0 with val index = Index1.index - clone Core_Ops_Index_Index_Index_Interface as Index1 with type self = Type.creusat_clause_clause, type idx = usize - clone Core_Ops_Index_Index_Output as Output1 with type self = Type.creusat_clause_clause, type idx = usize + type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model + clone CreuSat_Clause_Impl0_Output as Output0 + clone CreuSat_Clause_Impl0_Index_Interface as Index0 with function Model0.model = Model0.model + clone Core_Ops_Index_Index_Index_Interface as Index1 with type self = Type.creusat_clause_clause, type idx = usize, + val index = Index0.index, type Output0.output = Output0.output + clone Core_Ops_Index_Index_Output as Output1 with type self = Type.creusat_clause_clause, type idx = usize, + type output = Output0.output end module CreuSat_Clause_Impl3_NoDuplicates_Interface use prelude.Prelude @@ -2386,302 +1502,15 @@ module CreuSat_Clause_Impl3_NoDuplicates_Interface ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 78 4 78 53] result = NoDuplicateIndexes0.no_duplicate_indexes self } end -module CreuSat_Clause_Impl3_NoDuplicates +module CreuSat_Clause_Impl3_CheckClauseInvariant_Interface + use mach.int.UInt64 use prelude.Prelude use Type use mach.int.Int - use mach.int.Int32 - use mach.int.UInt64 - use seq.Seq - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexes0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = NoDuplicateIndexes0.model, - function Model0.model = Model0.model - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_clause_clause - clone CreuSat_Logic_LogicClause_Impl2_NoDuplicateIndexes as NoDuplicateIndexes0 - clone CreuSat_Lit_Impl1_Index_Interface as Index1 - clone CreuSat_Clause_Impl0_Index_Interface as Index0 - clone CreuSat_Clause_Impl3_Len_Interface as Len0 - let rec cfg no_duplicates [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 79 4 79 39] (self : Type.creusat_clause_clause) : bool - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 78 4 78 53] result = NoDuplicateIndexes0.no_duplicate_indexes self } + clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant0 + val check_clause_invariant [@cfg:stackify] (self : Type.creusat_clause_clause) (n : usize) : bool + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 61 4 61 44] result = Invariant0.invariant' self (UInt64.to_int n) } - = - var _0 : bool; - var self_1 : Type.creusat_clause_clause; - var i_2 : usize; - var _3 : (); - var _4 : (); - var _5 : bool; - var _6 : usize; - var _7 : usize; - var _8 : Type.creusat_clause_clause; - var lit1_9 : Type.creusat_lit_lit; - var _10 : Type.creusat_lit_lit; - var _11 : Type.creusat_clause_clause; - var _12 : usize; - var j_13 : usize; - var _14 : (); - var _15 : bool; - var _16 : usize; - var _17 : usize; - var lit2_18 : Type.creusat_lit_lit; - var _19 : Type.creusat_lit_lit; - var _20 : Type.creusat_clause_clause; - var _21 : usize; - var _22 : (); - var _23 : bool; - var _24 : usize; - var _25 : Type.creusat_lit_lit; - var _26 : usize; - var _27 : Type.creusat_lit_lit; - var _28 : (); - var _29 : (); - var _30 : (); - var _31 : (); - var _32 : (); - var _33 : (); - var _34 : (); - { - self_1 <- self; - goto BB0 - } - BB0 { - i_2 <- (0 : usize); - goto BB1 - } - BB1 { - invariant no_dups { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 81 8 83 87] forall k : (int) . forall j : (int) . 0 <= j && j < UInt64.to_int i_2 && 0 <= k && k < j -> IndexLogic0.index_logic (Seq.get (Model0.model self_1) j) <> IndexLogic0.index_logic (Seq.get (Model0.model self_1) k) }; - _6 <- i_2; - _8 <- self_1; - _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 84 18 84 28] Len0.len _8); - goto BB2 - } - BB2 { - _5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 84 14 84 28] _6 < _7); - switch (_5) - | False -> goto BB13 - | _ -> goto BB3 - end - } - BB3 { - _11 <- self_1; - _12 <- i_2; - _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 85 23 85 30] Index0.index _11 _12); - goto BB4 - } - BB4 { - lit1_9 <- _10; - j_13 <- (0 : usize); - goto BB5 - } - BB5 { - invariant inv { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 87 12 87 113] forall k : (int) . 0 <= k && k < UInt64.to_int j_13 -> IndexLogic0.index_logic lit1_9 <> IndexLogic0.index_logic (Seq.get (Model0.model self_1) k) }; - _16 <- j_13; - _17 <- i_2; - _15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 88 18 88 23] _16 < _17); - switch (_15) - | False -> goto BB12 - | _ -> goto BB6 - end - } - BB6 { - _20 <- self_1; - _21 <- j_13; - _19 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 89 27 89 34] Index0.index _20 _21); - goto BB7 - } - BB7 { - lit2_18 <- _19; - _25 <- lit1_9; - _24 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 90 19 90 31] Index1.index _25); - goto BB8 - } - BB8 { - _27 <- lit2_18; - _26 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 90 35 90 47] Index1.index _27); - goto BB9 - } - BB9 { - _23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 90 19 90 47] _24 = _26); - switch (_23) - | False -> goto BB11 - | _ -> goto BB10 - end - } - BB10 { - _0 <- false; - goto BB14 - } - BB11 { - _22 <- (); - j_13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 93 16 93 22] j_13 + (1 : usize)); - _4 <- (); - goto BB5 - } - BB12 { - _14 <- (); - i_2 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 95 12 95 18] i_2 + (1 : usize)); - _4 <- (); - goto BB1 - } - BB13 { - _3 <- (); - _0 <- true; - goto BB14 - } - BB14 { - return _0 - } - -end -module CreuSat_Clause_Impl3_CheckClauseInvariant_Interface - use mach.int.UInt64 - use prelude.Prelude - use Type - use mach.int.Int - clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant0 - val check_clause_invariant [@cfg:stackify] (self : Type.creusat_clause_clause) (n : usize) : bool - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 61 4 61 44] result = Invariant0.invariant' self (UInt64.to_int n) } - -end -module CreuSat_Clause_Impl3_CheckClauseInvariant - use mach.int.UInt64 - use prelude.Prelude - use Type - use mach.int.Int - use mach.int.Int32 - use seq.Seq - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = Invariant1.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant0.invariant_internal - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Invariant0.model, - function Model0.model = Model0.model - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_clause_clause - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant0 - clone CreuSat_Logic_LogicClause_Impl2_NoDuplicateIndexes as NoDuplicateIndexes0 with predicate NoDuplicateIndexes0.no_duplicate_indexes = NoDuplicates0.no_duplicate_indexes - clone CreuSat_Clause_Impl3_NoDuplicates_Interface as NoDuplicates0 - clone CreuSat_Lit_Impl1_CheckLitInvariant_Interface as CheckLitInvariant0 - clone CreuSat_Clause_Impl0_Index_Interface as Index0 - clone CreuSat_Clause_Impl3_Len_Interface as Len0 - let rec cfg check_clause_invariant [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 62 4 62 58] (self : Type.creusat_clause_clause) (n : usize) : bool - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 61 4 61 44] result = Invariant0.invariant' self (UInt64.to_int n) } - - = - var _0 : bool; - var self_1 : Type.creusat_clause_clause; - var n_2 : usize; - var i_3 : usize; - var _4 : (); - var _5 : (); - var _6 : bool; - var _7 : usize; - var _8 : usize; - var _9 : Type.creusat_clause_clause; - var _10 : (); - var _11 : bool; - var _12 : bool; - var _13 : Type.creusat_lit_lit; - var _14 : Type.creusat_lit_lit; - var _15 : Type.creusat_clause_clause; - var _16 : usize; - var _17 : usize; - var _18 : (); - var _19 : (); - var _20 : (); - var _21 : (); - var _22 : (); - var _23 : bool; - var _24 : Type.creusat_clause_clause; - var _25 : (); - { - self_1 <- self; - n_2 <- n; - goto BB0 - } - BB0 { - i_3 <- (0 : usize); - goto BB1 - } - BB1 { - invariant inv { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 64 8 64 87] forall j : (int) . 0 <= j && j < UInt64.to_int i_3 -> Invariant1.invariant' (Seq.get (Model0.model self_1) j) (UInt64.to_int n_2) }; - _7 <- i_3; - _9 <- self_1; - _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 65 18 65 28] Len0.len _9); - goto BB2 - } - BB2 { - _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 65 14 65 28] _7 < _8); - switch (_6) - | False -> goto BB8 - | _ -> goto BB3 - end - } - BB3 { - _15 <- self_1; - _16 <- i_3; - _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 66 16 66 23] Index0.index _15 _16); - goto BB4 - } - BB4 { - _13 <- _14; - _17 <- n_2; - _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 66 16 66 46] CheckLitInvariant0.check_lit_invariant _13 _17); - goto BB5 - } - BB5 { - _11 <- not _12; - switch (_11) - | False -> goto BB7 - | _ -> goto BB6 - end - } - BB6 { - _0 <- false; - goto BB12 - } - BB7 { - _10 <- (); - i_3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 69 12 69 18] i_3 + (1 : usize)); - _5 <- (); - goto BB1 - } - BB8 { - _4 <- (); - _24 <- self_1; - _23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 71 11 71 31] NoDuplicates0.no_duplicates _24); - goto BB9 - } - BB9 { - switch (_23) - | False -> goto BB11 - | _ -> goto BB10 - end - } - BB10 { - _0 <- true; - goto BB12 - } - BB11 { - _22 <- (); - _0 <- false; - goto BB13 - } - BB12 { - goto BB13 - } - BB13 { - return _0 - } - end module CreuSat_Clause_Impl3_ClauseFromVec_Interface use prelude.Prelude @@ -2689,12 +1518,6 @@ module CreuSat_Clause_Impl3_ClauseFromVec_Interface use Type val clause_from_vec [@cfg:stackify] (vec : seq (Type.creusat_lit_lit)) : Type.creusat_clause_clause end -module CreuSat_Clause_Impl3_ClauseFromVec - use prelude.Prelude - use seq.Seq - use Type - val clause_from_vec [@cfg:stackify] (vec : seq (Type.creusat_lit_lit)) : Type.creusat_clause_clause -end module CreuSat_Logic_LogicLit_Impl1_LitIn_Interface use Type predicate lit_in (self : Type.creusat_lit_lit) (c : Type.creusat_clause_clause) @@ -2708,7 +1531,7 @@ module CreuSat_Logic_LogicLit_Impl1_LitIn predicate lit_in [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 61 4 61 42] (self : Type.creusat_lit_lit) (c : Type.creusat_clause_clause) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 62 8 64 9] exists i : (int) . 0 <= i && i < Seq.length (Model0.model c) && Seq.get (Model0.model c) i = self + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 62 8 64 9] exists i : (int) . 0 <= i /\ i < Seq.length (Model0.model c) /\ Seq.get (Model0.model c) i = self end module CreusotContracts_Std1_Slice_Impl0_Model_Interface type t @@ -2739,19 +1562,6 @@ module Alloc_Vec_Impl11_DerefMut_Interface ensures { Model0.model ( * result) = Model1.model ( * self) } ensures { Model0.model ( ^ result) = Model1.model ( ^ self) } -end -module Alloc_Vec_Impl11_DerefMut - type t - type a - use prelude.Prelude - use Type - use seq.Seq - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = t, type a = a, axiom . - clone CreusotContracts_Std1_Slice_Impl0_Model_Interface as Model0 with type t = t, axiom . - val deref_mut [@cfg:stackify] (self : borrowed (Type.alloc_vec_vec t a)) : borrowed (seq t) - ensures { Model0.model ( * result) = Model1.model ( * self) } - ensures { Model0.model ( ^ result) = Model1.model ( ^ self) } - end module Core_Slice_Impl0_Swap_Interface type t @@ -2760,25 +1570,10 @@ module Core_Slice_Impl0_Swap_Interface use mach.int.Int use seq.Permut use prelude.Prelude - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = t, type ModelTy0.modelTy = Model0.modelTy - clone CreusotContracts_Std1_Slice_Impl0_Model_Interface as Model1 with type t = t, axiom . - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = seq t - val swap [@cfg:stackify] (self : borrowed (seq t)) (a : usize) (b : usize) : () - requires {UInt64.to_int a < Seq.length (Model0.model self)} - requires {UInt64.to_int b < Seq.length (Model0.model self)} - ensures { Permut.exchange (Model1.model ( ^ self)) (Model1.model ( * self)) (UInt64.to_int a) (UInt64.to_int b) } - -end -module Core_Slice_Impl0_Swap - type t - use mach.int.UInt64 - use seq.Seq - use mach.int.Int - use seq.Permut - use prelude.Prelude - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = t, type ModelTy0.modelTy = Model0.modelTy + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = t clone CreusotContracts_Std1_Slice_Impl0_Model_Interface as Model1 with type t = t, axiom . - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = seq t + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = seq t, + type ModelTy0.modelTy = ModelTy0.modelTy val swap [@cfg:stackify] (self : borrowed (seq t)) (a : usize) (b : usize) : () requires {UInt64.to_int a < Seq.length (Model0.model self)} requires {UInt64.to_int b < Seq.length (Model0.model self)} @@ -2796,115 +1591,22 @@ module CreuSat_Clause_Impl3_MoveToEnd_Interface use mach.int.Int32 use prelude.Prelude use Type - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 clone CreuSat_Logic_LogicLit_Impl1_LitIn_Interface as LitIn0 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_clause_clause + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type ModelTy0.modelTy = ModelTy0.modelTy clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant0 val move_to_end [@cfg:stackify] (self : borrowed (Type.creusat_clause_clause)) (idx : usize) (_f : Type.creusat_formula_formula) : () requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 117 4 117 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 118 4 118 34] Seq.length (Model0.model self) > 0} requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 119 4 119 37] UInt64.to_int idx < Seq.length (Model0.model self)} ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 117 4 117 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 120 4 121 85] forall i : (int) . 0 <= i && i < Seq.length (Model1.model ( ^ self)) -> (exists j : (int) . 0 <= j && j < Seq.length (Model0.model self) && Seq.get (Model1.model ( ^ self)) i = Seq.get (Model0.model self) j) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 122 4 122 63] Seq.get (Model1.model ( ^ self)) (Seq.length (Model1.model ( ^ self)) - 1) = Seq.get (Model0.model self) (UInt64.to_int idx) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 123 4 123 49] Seq.length (Model1.model ( ^ self)) = Seq.length (Model0.model self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 124 4 125 38] forall j : (int) . 0 <= j && j < Seq.length (Model0.model self) -> LitIn0.lit_in (Seq.get (Model0.model self) j) ( ^ self) } - -end -module CreuSat_Clause_Impl3_MoveToEnd - use mach.int.UInt64 - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use prelude.Prelude - use Type - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = Invariant1.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant0.invariant_internal - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Invariant0.model, - function Model0.model = Model0.model, function Model0.model = LitIn0.model - clone CreuSat_Logic_LogicLit_Impl1_LitIn as LitIn0 - clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_clause_clause - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant0 - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_lit_lit, - type ModelTy0.modelTy = Model5.modelTy - clone CreusotContracts_Std1_Slice_Impl0_Model as Model4 with type t = Type.creusat_lit_lit, - function Model0.model = DerefMut0.model, function Model1.model = Swap0.model, function Model0.model = Model5.model, - axiom . - clone CreusotContracts_Logic_Model_Impl1_Model as Model5 with type t = seq (Type.creusat_lit_lit), - function Model0.model = Swap0.model - clone CreusotContracts_Logic_Model_Impl0_Model as Model3 with type t = Type.creusat_clause_clause, - function Model0.model = Len0.model - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = seq (Type.creusat_lit_lit) - clone Core_Slice_Impl0_Swap_Interface as Swap0 with type t = Type.creusat_lit_lit - clone Alloc_Vec_Impl11_DerefMut_Interface as DerefMut0 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_clause_clause - clone CreuSat_Clause_Impl3_Len_Interface as Len0 - let rec cfg move_to_end [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 126 4 126 55] (self : borrowed (Type.creusat_clause_clause)) (idx : usize) (_f : Type.creusat_formula_formula) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 117 4 117 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 118 4 118 34] Seq.length (Model0.model self) > 0} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 119 4 119 37] UInt64.to_int idx < Seq.length (Model0.model self)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 117 4 117 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 120 4 121 85] forall i : (int) . 0 <= i && i < Seq.length (Model1.model ( ^ self)) -> (exists j : (int) . 0 <= j && j < Seq.length (Model0.model self) && Seq.get (Model1.model ( ^ self)) i = Seq.get (Model0.model self) j) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 120 4 121 85] forall i : (int) . 0 <= i /\ i < Seq.length (Model1.model ( ^ self)) -> (exists j : (int) . 0 <= j /\ j < Seq.length (Model0.model self) /\ Seq.get (Model1.model ( ^ self)) i = Seq.get (Model0.model self) j) } ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 122 4 122 63] Seq.get (Model1.model ( ^ self)) (Seq.length (Model1.model ( ^ self)) - 1) = Seq.get (Model0.model self) (UInt64.to_int idx) } ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 123 4 123 49] Seq.length (Model1.model ( ^ self)) = Seq.length (Model0.model self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 124 4 125 38] forall j : (int) . 0 <= j && j < Seq.length (Model0.model self) -> LitIn0.lit_in (Seq.get (Model0.model self) j) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 124 4 125 38] forall j : (int) . 0 <= j /\ j < Seq.length (Model0.model self) -> LitIn0.lit_in (Seq.get (Model0.model self) j) ( ^ self) } - = - var _0 : (); - var self_1 : borrowed (Type.creusat_clause_clause); - var idx_2 : usize; - var _f_3 : Type.creusat_formula_formula; - var end'_4 : usize; - var _5 : usize; - var _6 : Type.creusat_clause_clause; - var _7 : (); - var _8 : borrowed (seq (Type.creusat_lit_lit)); - var _9 : borrowed (seq (Type.creusat_lit_lit)); - var _10 : borrowed (Type.alloc_vec_vec (Type.creusat_lit_lit) (Type.alloc_alloc_global)); - var _11 : usize; - var _12 : usize; - { - self_1 <- self; - idx_2 <- idx; - _f_3 <- _f; - goto BB0 - } - BB0 { - _6 <- * self_1; - _5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 127 18 127 28] Len0.len _6); - goto BB1 - } - BB1 { - end'_4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 127 18 127 32] _5 - (1 : usize)); - _10 <- borrow_mut (Type.creusat_clause_clause_Clause_lits ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Clause_Clause a b c d = * self_1 in Type.CreuSat_Clause_Clause a b c ( ^ _10)) }; - assume { Resolve0.resolve self_1 }; - _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 128 8 128 32] DerefMut0.deref_mut _10); - goto BB2 - } - BB2 { - _8 <- borrow_mut ( * _9); - _9 <- { _9 with current = ( ^ _8) }; - _11 <- idx_2; - _12 <- end'_4; - _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 128 8 128 32] Swap0.swap _8 _11 _12); - goto BB3 - } - BB3 { - assume { Resolve1.resolve _9 }; - _0 <- (); - return _0 - } - end module Alloc_Vec_Impl1_Pop_Interface type t @@ -2918,25 +1620,8 @@ module Alloc_Vec_Impl1_Pop_Interface clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = t, type a = a, axiom . val pop [@cfg:stackify] (self : borrowed (Type.alloc_vec_vec t a)) : Type.core_option_option t ensures { match (result) with - | Type.Core_Option_Option_Some t -> Model0.model ( ^ self) = SeqExt.subsequence (Model0.model ( * self)) 0 (Seq.length (Model0.model ( * self)) - 1) && Model0.model ( * self) = Seq.snoc (Model0.model ( ^ self)) t - | Type.Core_Option_Option_None -> * self = ^ self && Seq.length (Model0.model ( * self)) = 0 - end } - -end -module Alloc_Vec_Impl1_Pop - type t - type a - use Type - use mach.int.Int - use mach.int.Int32 - use seq.Seq - use seq_ext.SeqExt - use prelude.Prelude - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = t, type a = a, axiom . - val pop [@cfg:stackify] (self : borrowed (Type.alloc_vec_vec t a)) : Type.core_option_option t - ensures { match (result) with - | Type.Core_Option_Option_Some t -> Model0.model ( ^ self) = SeqExt.subsequence (Model0.model ( * self)) 0 (Seq.length (Model0.model ( * self)) - 1) && Model0.model ( * self) = Seq.snoc (Model0.model ( ^ self)) t - | Type.Core_Option_Option_None -> * self = ^ self && Seq.length (Model0.model ( * self)) = 0 + | Type.Core_Option_Option_Some t -> Model0.model ( ^ self) = SeqExt.subsequence (Model0.model ( * self)) 0 (Seq.length (Model0.model ( * self)) - 1) /\ Model0.model ( * self) = Seq.snoc (Model0.model ( ^ self)) t + | Type.Core_Option_Option_None -> * self = ^ self /\ Seq.length (Model0.model ( * self)) = 0 end } end @@ -2947,100 +1632,29 @@ module CreuSat_Clause_Impl3_RemoveFromClause_Interface use mach.int.Int32 use prelude.Prelude use Type - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 clone CreuSat_Logic_LogicLit_Impl1_LitIn_Interface as LitIn0 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_clause_clause + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type ModelTy0.modelTy = ModelTy0.modelTy clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant0 val remove_from_clause [@cfg:stackify] (self : borrowed (Type.creusat_clause_clause)) (idx : usize) (_f : Type.creusat_formula_formula) : () requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 134 4 134 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 135 4 135 34] Seq.length (Model0.model self) > 0} requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 136 4 136 37] UInt64.to_int idx < Seq.length (Model0.model self)} ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 134 4 134 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 137 4 138 83] forall i : (int) . 0 <= i && i < Seq.length (Model1.model ( ^ self)) -> (exists j : (int) . 0 <= j && j < Seq.length (Model0.model self) && Seq.get (Model1.model ( ^ self)) i = Seq.get (Model0.model self) j) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 137 4 138 83] forall i : (int) . 0 <= i /\ i < Seq.length (Model1.model ( ^ self)) -> (exists j : (int) . 0 <= j /\ j < Seq.length (Model0.model self) /\ Seq.get (Model1.model ( ^ self)) i = Seq.get (Model0.model self) j) } ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 139 4 139 53] Seq.length (Model1.model ( ^ self)) + 1 = Seq.length (Model0.model self) } ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 140 4 140 44] not LitIn0.lit_in (Seq.get (Model0.model self) (UInt64.to_int idx)) ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 141 4 142 51] forall j : (int) . 0 <= j && j < Seq.length (Model0.model self) && j <> UInt64.to_int idx -> LitIn0.lit_in (Seq.get (Model0.model self) j) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 141 4 142 51] forall j : (int) . 0 <= j /\ j < Seq.length (Model0.model self) /\ j <> UInt64.to_int idx -> LitIn0.lit_in (Seq.get (Model0.model self) j) ( ^ self) } end -module CreuSat_Clause_Impl3_RemoveFromClause - use mach.int.UInt64 - use seq.Seq +module CreuSat_Logic_LogicClause_Impl2_VarsInRange_Interface + use Type use mach.int.Int - use mach.int.Int32 - use prelude.Prelude - use Type - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = Invariant1.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant0.invariant_internal - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Invariant0.model, - function Model0.model = Model0.model, function Model0.model = LitIn0.model - clone CreuSat_Logic_LogicLit_Impl1_LitIn as LitIn0 - clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_clause_clause - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_clause_clause - clone Alloc_Vec_Impl1_Pop_Interface as Pop0 with type t = Type.creusat_lit_lit, type a = Type.alloc_alloc_global - clone CreuSat_Clause_Impl3_MoveToEnd_Interface as MoveToEnd0 - let rec cfg remove_from_clause [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 143 4 143 66] (self : borrowed (Type.creusat_clause_clause)) (idx : usize) (_f : Type.creusat_formula_formula) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 134 4 134 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 135 4 135 34] Seq.length (Model0.model self) > 0} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 136 4 136 37] UInt64.to_int idx < Seq.length (Model0.model self)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 134 4 134 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 137 4 138 83] forall i : (int) . 0 <= i && i < Seq.length (Model1.model ( ^ self)) -> (exists j : (int) . 0 <= j && j < Seq.length (Model0.model self) && Seq.get (Model1.model ( ^ self)) i = Seq.get (Model0.model self) j) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 139 4 139 53] Seq.length (Model1.model ( ^ self)) + 1 = Seq.length (Model0.model self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 140 4 140 44] not LitIn0.lit_in (Seq.get (Model0.model self) (UInt64.to_int idx)) ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 141 4 142 51] forall j : (int) . 0 <= j && j < Seq.length (Model0.model self) && j <> UInt64.to_int idx -> LitIn0.lit_in (Seq.get (Model0.model self) j) ( ^ self) } - - = - var _0 : (); - var self_1 : borrowed (Type.creusat_clause_clause); - var idx_2 : usize; - var _f_3 : Type.creusat_formula_formula; - var _4 : (); - var _5 : borrowed (Type.creusat_clause_clause); - var _6 : usize; - var _7 : Type.creusat_formula_formula; - var _8 : Type.core_option_option (Type.creusat_lit_lit); - var _9 : borrowed (Type.alloc_vec_vec (Type.creusat_lit_lit) (Type.alloc_alloc_global)); - { - self_1 <- self; - idx_2 <- idx; - _f_3 <- _f; - goto BB0 - } - BB0 { - _5 <- borrow_mut ( * self_1); - self_1 <- { self_1 with current = ( ^ _5) }; - _6 <- idx_2; - _7 <- _f_3; - _4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 144 8 144 33] MoveToEnd0.move_to_end _5 _6 _7); - goto BB1 - } - BB1 { - _9 <- borrow_mut (Type.creusat_clause_clause_Clause_lits ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Clause_Clause a b c d = * self_1 in Type.CreuSat_Clause_Clause a b c ( ^ _9)) }; - _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 145 8 145 23] Pop0.pop _9); - goto BB2 - } - BB2 { - assume { Resolve0.resolve self_1 }; - _0 <- (); - return _0 - } - -end -module CreuSat_Logic_LogicClause_Impl2_VarsInRange_Interface - use Type - use mach.int.Int - predicate vars_in_range (self : Type.creusat_clause_clause) (n : int) -end -module CreuSat_Logic_LogicClause_Impl2_VarsInRange + predicate vars_in_range (self : Type.creusat_clause_clause) (n : int) +end +module CreuSat_Logic_LogicClause_Impl2_VarsInRange use Type use mach.int.Int clone CreuSat_Logic_LogicClause_VarsInRangeInner_Interface as VarsInRangeInner0 @@ -3070,7 +1684,7 @@ module CreuSat_Logic_LogicClause_Impl2_SatInner predicate sat_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 158 4 158 57] (self : Type.creusat_clause_clause) (a : Seq.seq uint8) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 159 8 162 9] exists i : (int) . 0 <= i && i < Seq.length (Model0.model self) && SatInner0.sat_inner (Seq.get (Model0.model self) i) a + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 159 8 162 9] exists i : (int) . 0 <= i /\ i < Seq.length (Model0.model self) /\ SatInner0.sat_inner (Seq.get (Model0.model self) i) a end module CreuSat_Logic_LogicLit_Impl1_UnsetInner_Interface use Type @@ -3115,7 +1729,7 @@ module CreuSat_Logic_LogicClause_Impl2_UnitInner predicate unit_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 129 4 129 54] (self : Type.creusat_clause_clause) (a : Seq.seq uint8) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 130 8 137 9] VarsInRange0.vars_in_range self (Seq.length a) && not SatInner0.sat_inner self a && (exists i : (int) . 0 <= i && i < Seq.length (Model0.model self) && UnsetInner0.unset_inner (Seq.get (Model0.model self) i) a && (forall j : (int) . 0 <= j && j < Seq.length (Model0.model self) && j <> i -> not UnsetInner0.unset_inner (Seq.get (Model0.model self) j) a)) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 130 8 137 9] VarsInRange0.vars_in_range self (Seq.length a) /\ not SatInner0.sat_inner self a /\ (exists i : (int) . 0 <= i /\ i < Seq.length (Model0.model self) /\ UnsetInner0.unset_inner (Seq.get (Model0.model self) i) a /\ (forall j : (int) . 0 <= j /\ j < Seq.length (Model0.model self) /\ j <> i -> not UnsetInner0.unset_inner (Seq.get (Model0.model self) j) a)) end module CreuSat_Logic_LogicClause_Impl2_Unit_Interface use Type @@ -3169,192 +1783,45 @@ module CreuSat_Assignments_Impl0 use prelude.UInt8 use Type use mach.int.UInt64 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model2.model + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_assignments_assignments, - function Model0.model = Index0.model - clone CreuSat_Assignments_Impl0_Output as Output0 with type output = Output1.output, - type Output0.output = Index1.output - clone CreuSat_Assignments_Impl0_Index_Interface as Index0 with val index = Index1.index + type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model + clone CreuSat_Assignments_Impl0_Output as Output0 + clone CreuSat_Assignments_Impl0_Index_Interface as Index0 with function Model0.model = Model0.model clone Core_Ops_Index_Index_Index_Interface as Index1 with type self = Type.creusat_assignments_assignments, - type idx = usize - clone Core_Ops_Index_Index_Output as Output1 with type self = Type.creusat_assignments_assignments, type idx = usize + type idx = usize, val index = Index0.index, type Output0.output = Output0.output + clone Core_Ops_Index_Index_Output as Output1 with type self = Type.creusat_assignments_assignments, type idx = usize, + type output = Output0.output end module CreuSat_Lit_Impl1_LitUnsat_Interface use seq.Seq use Type use prelude.Prelude - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 clone CreuSat_Logic_LogicLit_Impl1_Unsat_Interface as Unsat0 clone CreuSat_Logic_LogicLit_Impl1_Invariant_Interface as Invariant0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments, + type ModelTy0.modelTy = ModelTy0.modelTy val lit_unsat [@cfg:stackify] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) : bool requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 62 4 62 43] Invariant0.invariant' self (Seq.length (Model0.model a))} ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 63 4 63 40] result = Unsat0.unsat self a } -end -module CreuSat_Lit_Impl1_LitUnsat - use seq.Seq - use Type - use prelude.Prelude - use mach.int.Int - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = Invariant0.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model0.model, - function Model0.model = Unsat0.model - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat0 - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_assignments_assignments - use mach.int.UInt64 - clone CreuSat_Assignments_Impl0_Index_Interface as Index1 - clone CreuSat_Lit_Impl1_Index_Interface as Index0 - clone CreuSat_Lit_Impl1_IsPositive_Interface as IsPositive0 - let rec cfg lit_unsat [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 64 4 64 51] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) : bool - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 62 4 62 43] Invariant0.invariant' self (Seq.length (Model0.model a))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 63 4 63 40] result = Unsat0.unsat self a } - - = - var _0 : bool; - var self_1 : Type.creusat_lit_lit; - var a_2 : Type.creusat_assignments_assignments; - var _3 : bool; - var _4 : Type.creusat_lit_lit; - var _5 : uint8; - var _6 : uint8; - var _7 : Type.creusat_assignments_assignments; - var _8 : usize; - var _9 : Type.creusat_lit_lit; - var _10 : uint8; - var _11 : uint8; - var _12 : Type.creusat_assignments_assignments; - var _13 : usize; - var _14 : Type.creusat_lit_lit; - { - self_1 <- self; - a_2 <- a; - goto BB0 - } - BB0 { - _4 <- self_1; - _3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 65 14 65 32] IsPositive0.is_positive _4); - goto BB1 - } - BB1 { - switch (_3) - | False -> goto BB2 - | _ -> goto BB3 - end - } - BB2 { - _12 <- a_2; - _14 <- self_1; - _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 67 24 67 36] Index0.index _14); - goto BB6 - } - BB3 { - _7 <- a_2; - _9 <- self_1; - _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 66 23 66 35] Index0.index _9); - goto BB4 - } - BB4 { - _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 66 21 66 36] Index1.index _7 _8); - goto BB5 - } - BB5 { - _5 <- _6; - _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 66 20 66 42] _5 = (0 : uint8)); - goto BB8 - } - BB6 { - _11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 67 22 67 37] Index1.index _12 _13); - goto BB7 - } - BB7 { - _10 <- _11; - _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 67 21 67 43] _10 = (1 : uint8)); - goto BB8 - } - BB8 { - return _0 - } - end module CreuSat_Lit_Impl1_LitUnset_Interface use seq.Seq use Type use prelude.Prelude - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 clone CreuSat_Logic_LogicLit_Impl1_Unset_Interface as Unset0 clone CreuSat_Logic_LogicLit_Impl1_Invariant_Interface as Invariant0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments, + type ModelTy0.modelTy = ModelTy0.modelTy val lit_unset [@cfg:stackify] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) : bool requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 73 4 73 43] Invariant0.invariant' self (Seq.length (Model0.model a))} ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 74 4 74 40] result = Unset0.unset self a } -end -module CreuSat_Lit_Impl1_LitUnset - use seq.Seq - use Type - use prelude.Prelude - use mach.int.Int - use prelude.UInt8 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = Invariant0.index_logic, - function IndexLogic0.index_logic = UnsetInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_UnsetInner as UnsetInner0 with predicate UnsetInner0.unset_inner = Unset0.unset_inner - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model0.model, - function Model0.model = Unset0.model - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicLit_Impl1_Unset as Unset0 - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_assignments_assignments - use mach.int.UInt64 - clone CreuSat_Assignments_Impl0_Index_Interface as Index1 - clone CreuSat_Lit_Impl1_Index_Interface as Index0 - let rec cfg lit_unset [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 75 4 75 51] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) : bool - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 73 4 73 43] Invariant0.invariant' self (Seq.length (Model0.model a))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 74 4 74 40] result = Unset0.unset self a } - - = - var _0 : bool; - var self_1 : Type.creusat_lit_lit; - var a_2 : Type.creusat_assignments_assignments; - var _3 : uint8; - var _4 : uint8; - var _5 : Type.creusat_assignments_assignments; - var _6 : usize; - var _7 : Type.creusat_lit_lit; - { - self_1 <- self; - a_2 <- a; - goto BB0 - } - BB0 { - _5 <- a_2; - _7 <- self_1; - _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 76 10 76 22] Index0.index _7); - goto BB1 - } - BB1 { - _4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 76 8 76 23] Index1.index _5 _6); - goto BB2 - } - BB2 { - _3 <- _4; - _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 76 8 76 28] _3 >= (2 : uint8)); - return _0 - } - end module CreuSat_Clause_Impl3_UnitAndUnset_Interface use mach.int.UInt64 @@ -3363,12 +1830,13 @@ module CreuSat_Clause_Impl3_UnitAndUnset_Interface use mach.int.Int32 use prelude.Prelude use Type - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 clone CreuSat_Logic_LogicLit_Impl1_Unset_Interface as Unset0 clone CreuSat_Logic_LogicClause_Impl2_Unit_Interface as Unit0 clone CreuSat_Logic_LogicAssignments_Impl1_Invariant_Interface as Invariant0 clone CreuSat_Logic_LogicClause_InvariantInternal_Interface as InvariantInternal0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type ModelTy0.modelTy = ModelTy0.modelTy val unit_and_unset [@cfg:stackify] (self : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) (_f : Type.creusat_formula_formula) : bool requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 150 4 150 56] InvariantInternal0.invariant_internal (Model0.model self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 151 4 151 33] Invariant0.invariant' a _f} @@ -3376,162 +1844,6 @@ module CreuSat_Clause_Impl3_UnitAndUnset_Interface ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 153 4 153 40] result -> Unit0.unit self a } ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 154 4 154 47] result -> Unset0.unset (Seq.get (Model0.model self) 0) a } -end -module CreuSat_Clause_Impl3_UnitAndUnset - use mach.int.UInt64 - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use prelude.Prelude - use Type - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = UnsetInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic, function IndexLogic0.index_logic = Invariant1.index_logic, - function IndexLogic0.index_logic = SatInner1.index_logic - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model0.model, - function Model0.model = UnitInner0.model, function Model0.model = VarsInRange0.model, - function Model0.model = SatInner0.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = UnitInner0.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner, - predicate VarsInRangeInner0.vars_in_range_inner = VarsInRange0.vars_in_range_inner - clone CreuSat_Logic_LogicClause_Impl2_VarsInRange as VarsInRange0 with predicate VarsInRange0.vars_in_range = UnitInner0.vars_in_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model2.model, axiom . - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_UnsetInner as UnsetInner0 with predicate UnsetInner0.unset_inner = Unset0.unset_inner, - predicate UnsetInner0.unset_inner = UnitInner0.unset_inner - clone CreuSat_Logic_LogicClause_Impl2_UnitInner as UnitInner0 with predicate UnitInner0.unit_inner = Unit0.unit_inner - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model0.model = Invariant0.model, - function Model0.model = Unit0.model, function Model0.model = Unset0.model, function Model0.model = Unsat0.model - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat0 - clone CreuSat_Logic_LogicLit_Impl1_Unset as Unset0 - clone CreuSat_Logic_LogicClause_Impl2_Unit as Unit0 - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant0 - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_clause_clause - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model5.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model5 with type t = Type.creusat_assignments_assignments, - function Model0.model = LitUnsat0.model, function Model0.model = LitUnset0.model - clone CreuSat_Lit_Impl1_LitUnset_Interface as LitUnset0 - clone CreuSat_Lit_Impl1_LitUnsat_Interface as LitUnsat0 - clone CreuSat_Clause_Impl0_Index_Interface as Index0 - clone CreuSat_Clause_Impl3_Len_Interface as Len0 - let rec cfg unit_and_unset [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 155 4 155 71] (self : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) (_f : Type.creusat_formula_formula) : bool - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 150 4 150 56] InvariantInternal0.invariant_internal (Model0.model self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 151 4 151 33] Invariant0.invariant' a _f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 152 4 152 34] Seq.length (Model0.model self) > 1} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 153 4 153 40] result -> Unit0.unit self a } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 154 4 154 47] result -> Unset0.unset (Seq.get (Model0.model self) 0) a } - - = - var _0 : bool; - var self_1 : Type.creusat_clause_clause; - var a_2 : Type.creusat_assignments_assignments; - var _f_3 : Type.creusat_formula_formula; - var i_4 : usize; - var _5 : (); - var _6 : (); - var _7 : bool; - var _8 : usize; - var _9 : usize; - var _10 : Type.creusat_clause_clause; - var _11 : (); - var _12 : bool; - var _13 : bool; - var _14 : Type.creusat_lit_lit; - var _15 : Type.creusat_lit_lit; - var _16 : Type.creusat_clause_clause; - var _17 : usize; - var _18 : Type.creusat_assignments_assignments; - var _19 : (); - var _20 : (); - var _21 : (); - var _22 : (); - var _23 : Type.creusat_lit_lit; - var _24 : Type.creusat_lit_lit; - var _25 : Type.creusat_clause_clause; - var _26 : Type.creusat_assignments_assignments; - { - self_1 <- self; - a_2 <- a; - _f_3 <- _f; - goto BB0 - } - BB0 { - i_4 <- (1 : usize); - goto BB1 - } - BB1 { - invariant unsat { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 157 8 157 85] forall j : (int) . 1 <= j && j < UInt64.to_int i_4 -> Unsat0.unsat (Seq.get (Model0.model self_1) j) a_2 }; - _8 <- i_4; - _10 <- self_1; - _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 158 18 158 28] Len0.len _10); - goto BB2 - } - BB2 { - _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 158 14 158 28] _8 < _9); - switch (_7) - | False -> goto BB8 - | _ -> goto BB3 - end - } - BB3 { - _16 <- self_1; - _17 <- i_4; - _15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 159 16 159 23] Index0.index _16 _17); - goto BB4 - } - BB4 { - _14 <- _15; - _18 <- a_2; - _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 159 16 159 36] LitUnsat0.lit_unsat _14 _18); - goto BB5 - } - BB5 { - _12 <- not _13; - switch (_12) - | False -> goto BB7 - | _ -> goto BB6 - end - } - BB6 { - _0 <- false; - goto BB11 - } - BB7 { - _11 <- (); - i_4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 162 12 162 18] i_4 + (1 : usize)); - _6 <- (); - goto BB1 - } - BB8 { - _5 <- (); - _25 <- self_1; - _24 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 164 8 164 15] Index0.index _25 (0 : usize)); - goto BB9 - } - BB9 { - _23 <- _24; - _26 <- a_2; - _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 164 8 164 28] LitUnset0.lit_unset _23 _26); - goto BB10 - } - BB10 { - goto BB11 - } - BB11 { - return _0 - } - end module CreuSat_Logic_LogicAssignments_CompleteInner_Interface use seq.Seq @@ -3550,7 +1862,7 @@ module CreuSat_Logic_LogicAssignments_CompleteInner predicate complete_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 33 0 33 52] (a : Seq.seq uint8) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 34 4 36 5] forall i : (int) . 0 <= i && i < Seq.length a -> not Unset0.unset (Seq.get a i) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 34 4 36 5] forall i : (int) . 0 <= i /\ i < Seq.length a -> not Unset0.unset (Seq.get a i) end module CreuSat_Logic_LogicFormula_FormulaSatInner_Interface use seq.Seq @@ -3571,7 +1883,7 @@ module CreuSat_Logic_LogicFormula_FormulaSatInner predicate formula_sat_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 39 0 39 78] (f : (Seq.seq (Type.creusat_clause_clause), int)) (a : Seq.seq uint8) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 40 4 43 5] forall i : (int) . 0 <= i && i < Seq.length (let (a, _) = f in a) -> SatInner0.sat_inner (Seq.get (let (a, _) = f in a) i) a + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 40 4 43 5] forall i : (int) . 0 <= i /\ i < Seq.length (let (a, _) = f in a) -> SatInner0.sat_inner (Seq.get (let (a, _) = f in a) i) a end module CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss_Interface use seq.Seq @@ -3590,7 +1902,7 @@ module CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss predicate eventually_sat_complete_no_ass [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 47 0 47 68] (f : (Seq.seq (Type.creusat_clause_clause), int)) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 48 4 50 5] exists a2 : (Seq.seq uint8) . Seq.length a2 = (let (_, a) = f in a) && CompleteInner0.complete_inner a2 && FormulaSatInner0.formula_sat_inner f a2 + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 48 4 50 5] exists a2 : (Seq.seq uint8) . Seq.length a2 = (let (_, a) = f in a) /\ CompleteInner0.complete_inner a2 /\ FormulaSatInner0.formula_sat_inner f a2 end module CreuSat_Logic_LogicClause_EquisatExtensionInner_Interface use Type @@ -3641,7 +1953,7 @@ module CreuSat_Logic_LogicClause_Impl2_UnsatInner predicate unsat_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 145 4 145 59] (self : Type.creusat_clause_clause) (a : Seq.seq uint8) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 146 8 149 9] forall i : (int) . 0 <= i && i < Seq.length (Model0.model self) -> UnsatInner0.unsat_inner (Seq.get (Model0.model self) i) a + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 146 8 149 9] forall i : (int) . 0 <= i /\ i < Seq.length (Model0.model self) -> UnsatInner0.unsat_inner (Seq.get (Model0.model self) i) a end module CreuSat_Logic_LogicClause_Impl2_Equisat_Interface use Type @@ -3658,7 +1970,7 @@ module CreuSat_Logic_LogicClause_Impl2_Equisat predicate equisat [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 220 4 220 43] (self : Type.creusat_clause_clause) (o : Type.creusat_clause_clause) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 221 8 224 9] (forall a : (Seq.seq uint8) . SatInner0.sat_inner self a = SatInner0.sat_inner o a) && (forall a : (Seq.seq uint8) . UnsatInner0.unsat_inner self a = UnsatInner0.unsat_inner o a) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 221 8 224 9] (forall a : (Seq.seq uint8) . SatInner0.sat_inner self a = SatInner0.sat_inner o a) /\ (forall a : (Seq.seq uint8) . UnsatInner0.unsat_inner self a = UnsatInner0.unsat_inner o a) end module CreuSat_Logic_LogicClause_Impl2_Equisat2_Interface use Type @@ -3678,7 +1990,7 @@ module CreuSat_Logic_LogicClause_Impl2_Equisat2 predicate equisat2 [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 229 4 229 56] (self : Type.creusat_clause_clause) (o : Type.creusat_clause_clause) (f : Type.creusat_formula_formula) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 230 8 233 9] (forall a : (Seq.seq uint8) . Seq.length a = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) && CompleteInner0.complete_inner a -> SatInner0.sat_inner self a = SatInner0.sat_inner o a) && (forall a : (Seq.seq uint8) . Seq.length a = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) && CompleteInner0.complete_inner a -> UnsatInner0.unsat_inner self a = UnsatInner0.unsat_inner o a) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 230 8 233 9] (forall a : (Seq.seq uint8) . Seq.length a = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) /\ CompleteInner0.complete_inner a -> SatInner0.sat_inner self a = SatInner0.sat_inner o a) /\ (forall a : (Seq.seq uint8) . Seq.length a = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) /\ CompleteInner0.complete_inner a -> UnsatInner0.unsat_inner self a = UnsatInner0.unsat_inner o a) end module CreuSat_Clause_Impl3_SwapLitsInClause_Interface use seq.Seq @@ -3686,11 +1998,12 @@ module CreuSat_Clause_Impl3_SwapLitsInClause_Interface use mach.int.Int use prelude.Prelude use Type - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension_Interface as EquisatExtension0 clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant0 - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_clause_clause + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type ModelTy0.modelTy = ModelTy0.modelTy val swap_lits_in_clause [@cfg:stackify] (self : borrowed (Type.creusat_clause_clause)) (_f : Type.creusat_formula_formula) (j : usize) (k : usize) : () requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 169 4 169 35] Seq.length (Model0.model self) > UInt64.to_int j} requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 170 4 170 35] Seq.length (Model0.model self) > UInt64.to_int k} @@ -3700,151 +2013,6 @@ module CreuSat_Clause_Impl3_SwapLitsInClause_Interface ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 172 4 172 51] EquisatExtension0.equisat_extension ( ^ self) _f } ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 173 4 173 49] Seq.length (Model0.model self) = Seq.length (Model1.model ( ^ self)) } -end -module CreuSat_Clause_Impl3_SwapLitsInClause - use seq.Seq - use mach.int.UInt64 - use mach.int.Int - use prelude.Prelude - use Type - use seq.Permut - use mach.int.Int32 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner1.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = SatInner1.index_logic, function IndexLogic0.index_logic = UnsatInner1.index_logic, - function IndexLogic0.index_logic = Invariant1.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner1 with predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = Model3.model, axiom . - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model0.model, - function Model0.model = Invariant0.model, function Model0.model = SatInner0.model, - function Model0.model = UnsatInner0.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = Equisat0.sat_inner, - predicate SatInner0.sat_inner = Equisat20.sat_inner, predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss0.formula_sat_inner - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model2.modelTy - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = Equisat20.complete_inner, - predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner - clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = Equisat0.unsat_inner, - predicate UnsatInner0.unsat_inner = Equisat20.unsat_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtension0.equisat_extension_inner - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model3 with function Model0.model = EquisatExtension0.model, - function Model0.model = Model2.model - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant0.invariant_internal - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model2 with type t = Type.creusat_formula_formula - clone CreuSat_Logic_LogicClause_Impl2_Equisat2 as Equisat20 - clone CreuSat_Logic_LogicClause_Impl2_Equisat as Equisat0 - clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant0 - clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy2 with type t = Type.creusat_lit_lit, - type ModelTy0.modelTy = Model7.modelTy - clone CreusotContracts_Std1_Slice_Impl0_Model as Model6 with type t = Type.creusat_lit_lit, - function Model0.model = DerefMut0.model, function Model1.model = Swap0.model, function Model0.model = Model7.model, - axiom . - clone CreusotContracts_Logic_Model_Impl1_Model as Model7 with type t = seq (Type.creusat_lit_lit), - function Model0.model = Swap0.model - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = seq (Type.creusat_lit_lit) - clone Core_Slice_Impl0_Swap_Interface as Swap0 with type t = Type.creusat_lit_lit - clone Alloc_Vec_Impl11_DerefMut_Interface as DerefMut0 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_clause_clause - let rec cfg swap_lits_in_clause [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 174 4 174 75] (self : borrowed (Type.creusat_clause_clause)) (_f : Type.creusat_formula_formula) (j : usize) (k : usize) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 169 4 169 35] Seq.length (Model0.model self) > UInt64.to_int j} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 170 4 170 35] Seq.length (Model0.model self) > UInt64.to_int k} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 171 4 171 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 172 4 172 51] EquisatExtension0.equisat_extension ( * self) _f} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 171 4 171 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 172 4 172 51] EquisatExtension0.equisat_extension ( ^ self) _f } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 173 4 173 49] Seq.length (Model0.model self) = Seq.length (Model1.model ( ^ self)) } - - = - var _0 : (); - var self_1 : borrowed (Type.creusat_clause_clause); - var _f_2 : Type.creusat_formula_formula; - var j_3 : usize; - var k_4 : usize; - ghost var old_c_5 : borrowed (Type.creusat_clause_clause); - var _6 : (); - var _7 : (); - var _8 : borrowed (seq (Type.creusat_lit_lit)); - var _9 : borrowed (seq (Type.creusat_lit_lit)); - var _10 : borrowed (Type.alloc_vec_vec (Type.creusat_lit_lit) (Type.alloc_alloc_global)); - var _11 : usize; - var _12 : usize; - var _13 : (); - var _14 : (); - var _15 : (); - var _16 : (); - var _17 : (); - var _18 : (); - var _19 : (); - var _20 : (); - var _21 : (); - var _22 : (); - { - self_1 <- self; - _f_2 <- _f; - j_3 <- j; - k_4 <- k; - goto BB0 - } - BB0 { - _6 <- (); - old_c_5 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 175 20 175 35] self_1); - goto BB1 - } - BB1 { - _10 <- borrow_mut (Type.creusat_clause_clause_Clause_lits ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Clause_Clause a b c d = * self_1 in Type.CreuSat_Clause_Clause a b c ( ^ _10)) }; - assume { Resolve0.resolve self_1 }; - _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 176 8 176 28] DerefMut0.deref_mut _10); - goto BB2 - } - BB2 { - _8 <- borrow_mut ( * _9); - _9 <- { _9 with current = ( ^ _8) }; - _11 <- j_3; - _12 <- k_4; - _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 176 8 176 28] Swap0.swap _8 _11 _12); - goto BB3 - } - BB3 { - assume { Resolve1.resolve _9 }; - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 177 8 177 46] ^ old_c_5 = ^ self_1 }; - _13 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 178 8 178 51] EquisatExtension0.equisat_extension ( * old_c_5) _f_2 }; - _14 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 179 8 179 51] Invariant0.invariant' ( * self_1) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f_2)) }; - _15 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 180 8 180 55] Permut.exchange (Model0.model self_1) (Model0.model old_c_5) (UInt64.to_int j_3) (UInt64.to_int k_4) }; - _16 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 181 8 181 63] Permut.permut (Model0.model old_c_5) (Model0.model self_1) 0 (Seq.length (Model0.model self_1)) }; - _17 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 182 8 182 51] Equisat0.equisat ( * self_1) ( * old_c_5) }; - _18 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 183 8 183 57] Equisat20.equisat2 ( * self_1) ( * old_c_5) _f_2 }; - _19 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 184 8 184 46] ^ old_c_5 = ^ self_1 }; - _20 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 186 8 187 96] EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass (Seq.snoc (let (a, _) = Model2.model _f_2 in a) ( * self_1), let (_, a) = Model2.model _f_2 in a) = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass (Seq.snoc (let (a, _) = Model2.model _f_2 in a) ( * old_c_5), let (_, a) = Model2.model _f_2 in a) }; - _21 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 188 8 188 50] EquisatExtension0.equisat_extension ( * self_1) _f_2 }; - _22 <- (); - _0 <- (); - return _0 - } - end module CreuSat_Clause_Impl3_CalcLbd_Interface use seq.Seq @@ -3860,216 +2028,22 @@ module CreuSat_Clause_Impl3_CalcLbd_Interface requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 193 4 193 45] Invariant0.invariant' self (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} end -module CreuSat_Clause_Impl3_CalcLbd +module CreuSat_Logic_LogicLit_IdxInLogic_Interface + use mach.int.Int use seq.Seq - use mach.int.UInt64 - use prelude.Prelude use Type + predicate idx_in_logic [@inline:trivial] (idx : int) (c : Seq.seq (Type.creusat_lit_lit)) +end +module CreuSat_Logic_LogicLit_IdxInLogic use mach.int.Int - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = Invariant1.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant0.invariant_internal - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Invariant0.model - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant0 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = usize, - predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = usize - clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize, type Output0.output = Index2.output, - type Output0.output = IndexMut0.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize, - predicate HasValue0.has_value = Index2.has_value, predicate HasValue0.has_value = IndexMut0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize, - predicate InBounds0.in_bounds = Index2.in_bounds, predicate InBounds0.in_bounds = IndexMut0.in_bounds - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model3.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model3 with type t = Type.creusat_clause_clause, - function Model0.model = Len0.model, function Model0.model = Index0.model - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_solver_solver - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = usize - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = usize, type i = usize, - type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl1_Len_Interface as Len1 with type t = usize, type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl16_Index_Interface as Index2 with type t = usize, type i = usize, type a = Type.alloc_alloc_global - clone CreuSat_Lit_Impl1_Index_Interface as Index1 - clone CreuSat_Clause_Impl0_Index_Interface as Index0 - clone CreuSat_Clause_Impl3_Len_Interface as Len0 - let rec cfg calc_lbd [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 194 4 194 76] (self : Type.creusat_clause_clause) (_f : Type.creusat_formula_formula) (s : borrowed (Type.creusat_solver_solver)) (t : Type.creusat_trail_trail) : usize - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 192 4 192 58] Seq.length (Model0.model (Type.creusat_trail_trail_Trail_lit_to_level t)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 193 4 193 45] Invariant0.invariant' self (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + use seq.Seq + use Type + use mach.int.Int32 + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 + predicate idx_in_logic [@inline:trivial] [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 10 0 10 50] (idx : int) (c : Seq.seq (Type.creusat_lit_lit)) = - var _0 : usize; - var self_1 : Type.creusat_clause_clause; - var _f_2 : Type.creusat_formula_formula; - var s_3 : borrowed (Type.creusat_solver_solver); - var t_4 : Type.creusat_trail_trail; - var i_5 : usize; - var lbd_6 : usize; - var _7 : (); - var _8 : (); - var _9 : bool; - var _10 : usize; - var _11 : usize; - var _12 : Type.creusat_clause_clause; - var level_13 : usize; - var _14 : usize; - var _15 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _16 : usize; - var _17 : Type.creusat_lit_lit; - var _18 : Type.creusat_lit_lit; - var _19 : Type.creusat_clause_clause; - var _20 : usize; - var _21 : (); - var _22 : bool; - var _23 : bool; - var _24 : usize; - var _25 : usize; - var _26 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _27 : bool; - var _28 : usize; - var _29 : usize; - var _30 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _31 : usize; - var _32 : usize; - var _33 : usize; - var _34 : borrowed usize; - var _35 : borrowed (Type.alloc_vec_vec usize (Type.alloc_alloc_global)); - var _36 : usize; - var _37 : (); - var _38 : (); - var _39 : (); - { - self_1 <- self; - _f_2 <- _f; - s_3 <- s; - t_4 <- t; - goto BB0 - } - BB0 { - i_5 <- (0 : usize); - lbd_6 <- (0 : usize); - goto BB1 - } - BB1 { - invariant lbd_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 197 8 197 43] UInt64.to_int lbd_6 <= UInt64.to_int i_5 }; - _10 <- i_5; - _12 <- self_1; - _11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 198 18 198 28] Len0.len _12); - goto BB2 - } - BB2 { - _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 198 14 198 28] _10 < _11); - switch (_9) - | False -> goto BB16 - | _ -> goto BB3 - end - } - BB3 { - _15 <- Type.creusat_trail_trail_Trail_lit_to_level t_4; - _19 <- self_1; - _20 <- i_5; - _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 199 39 199 46] Index0.index _19 _20); - goto BB4 - } - BB4 { - _17 <- _18; - _16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 199 39 199 54] Index1.index _17); - goto BB5 - } - BB5 { - _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 199 24 199 55] Index2.index _15 _16); - goto BB6 - } - BB6 { - level_13 <- _14; - _24 <- level_13; - _26 <- Type.creusat_solver_solver_Solver_perm_diff ( * s_3); - _25 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 200 23 200 40] Len1.len _26); - goto BB10 - } - BB7 { - _22 <- false; - goto BB9 - } - BB8 { - _30 <- Type.creusat_solver_solver_Solver_perm_diff ( * s_3); - _31 <- level_13; - _29 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 201 16 201 34] Index2.index _30 _31); - goto BB11 - } - BB9 { - switch (_22) - | False -> goto BB14 - | _ -> goto BB12 - end - } - BB10 { - _23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 200 15 200 40] _24 < _25); - switch (_23) - | False -> goto BB7 - | _ -> goto BB8 - end - } - BB11 { - _28 <- _29; - _32 <- Type.creusat_solver_solver_Solver_num_conflicts ( * s_3); - _27 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 201 16 201 53] _28 <> _32); - _22 <- _27; - goto BB9 - } - BB12 { - _33 <- Type.creusat_solver_solver_Solver_num_conflicts ( * s_3); - _35 <- borrow_mut (Type.creusat_solver_solver_Solver_perm_diff ( * s_3)); - s_3 <- { s_3 with current = (let Type.CreuSat_Solver_Solver a b c d e f g h = * s_3 in Type.CreuSat_Solver_Solver a b c d e f g ( ^ _35)) }; - _36 <- level_13; - _34 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 203 16 203 34] IndexMut0.index_mut _35 _36); - goto BB13 - } - BB13 { - _34 <- { _34 with current = _33 }; - assume { Resolve0.resolve _34 }; - lbd_6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 204 16 204 24] lbd_6 + (1 : usize)); - _21 <- (); - goto BB15 - } - BB14 { - _21 <- (); - goto BB15 - } - BB15 { - i_5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/clause.rs" 206 12 206 18] i_5 + (1 : usize)); - _8 <- (); - goto BB1 - } - BB16 { - assume { Resolve1.resolve s_3 }; - _7 <- (); - _0 <- lbd_6; - return _0 - } - -end -module CreuSat_Logic_LogicLit_IdxInLogic_Interface - use mach.int.Int - use seq.Seq - use Type - predicate idx_in_logic [@inline:trivial] (idx : int) (c : Seq.seq (Type.creusat_lit_lit)) -end -module CreuSat_Logic_LogicLit_IdxInLogic - use mach.int.Int - use seq.Seq - use Type - use mach.int.Int32 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - predicate idx_in_logic [@inline:trivial] [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 10 0 10 50] (idx : int) (c : Seq.seq (Type.creusat_lit_lit)) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 11 4 14 5] exists i : (int) . 0 <= i && i < Seq.length c && IndexLogic0.index_logic (Seq.get c i) = idx + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 11 4 14 5] exists i : (int) . 0 <= i /\ i < Seq.length c /\ IndexLogic0.index_logic (Seq.get c i) = idx end module CreuSat_ConflictAnalysis_IdxIn_Interface use seq.Seq @@ -4078,82 +2052,22 @@ module CreuSat_ConflictAnalysis_IdxIn_Interface use mach.int.Int32 use prelude.Prelude use Type - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy1 with type t = bool, type a = Type.alloc_alloc_global, - type ModelTy0.modelTy = Model1.modelTy + clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy1 with type t = bool, type a = Type.alloc_alloc_global clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, type ModelTy0.modelTy = Model0.modelTy + type a = Type.alloc_alloc_global clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 clone CreuSat_Logic_LogicLit_IdxInLogic_Interface as IdxInLogic0 clone CreuSat_Logic_LogicClause_VarsInRangeInner_Interface as VarsInRangeInner0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model1 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global) - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.alloc_vec_vec (Type.creusat_lit_lit) (Type.alloc_alloc_global) + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model1 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global), + type ModelTy0.modelTy = ModelTy1.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.alloc_vec_vec (Type.creusat_lit_lit) (Type.alloc_alloc_global), + type ModelTy0.modelTy = ModelTy0.modelTy val idx_in [@cfg:stackify] (c : Type.alloc_vec_vec (Type.creusat_lit_lit) (Type.alloc_alloc_global)) (idx : usize) (seen : Type.alloc_vec_vec bool (Type.alloc_alloc_global)) : bool requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 23 0 23 51] VarsInRangeInner0.vars_in_range_inner (Model0.model c) (Seq.length (Model1.model seen))} requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 24 0 24 33] UInt64.to_int idx < Seq.length (Model1.model seen)} requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 25 0 25 52] Seq.get (Model1.model seen) (UInt64.to_int idx) = IdxInLogic0.idx_in_logic (UInt64.to_int idx) (Model0.model c)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 26 0 26 96] result = (exists i : (int) . 0 <= i && i < Seq.length (Model0.model c) && IndexLogic0.index_logic (Seq.get (Model0.model c) i) = UInt64.to_int idx) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 26 0 26 96] result = (exists i : (int) . 0 <= i /\ i < Seq.length (Model0.model c) /\ IndexLogic0.index_logic (Seq.get (Model0.model c) i) = UInt64.to_int idx) } -end -module CreuSat_ConflictAnalysis_IdxIn - use seq.Seq - use mach.int.UInt64 - use mach.int.Int - use mach.int.Int32 - use prelude.Prelude - use Type - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = IdxInLogic0.index_logic, - function IndexLogic0.index_logic = Invariant0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant0 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = bool, type a = Type.alloc_alloc_global, - function Model0.model = Model1.model, axiom . - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy1 with type t = bool, type a = Type.alloc_alloc_global, - type ModelTy0.modelTy = Model1.modelTy - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model, axiom . - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicLit_IdxInLogic as IdxInLogic0 - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model1 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global) - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.alloc_vec_vec (Type.creusat_lit_lit) (Type.alloc_alloc_global) - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy2 with type t = bool - clone Core_Slice_Index_Impl2_Output as Output0 with type t = bool, type Output0.output = Index0.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = bool, - predicate HasValue0.has_value = Index0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = bool, - predicate InBounds0.in_bounds = Index0.in_bounds - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = bool, type i = usize, type a = Type.alloc_alloc_global - let rec cfg idx_in [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 27 0 27 61] (c : Type.alloc_vec_vec (Type.creusat_lit_lit) (Type.alloc_alloc_global)) (idx : usize) (seen : Type.alloc_vec_vec bool (Type.alloc_alloc_global)) : bool - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 23 0 23 51] VarsInRangeInner0.vars_in_range_inner (Model0.model c) (Seq.length (Model1.model seen))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 24 0 24 33] UInt64.to_int idx < Seq.length (Model1.model seen)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 25 0 25 52] Seq.get (Model1.model seen) (UInt64.to_int idx) = IdxInLogic0.idx_in_logic (UInt64.to_int idx) (Model0.model c)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 26 0 26 96] result = (exists i : (int) . 0 <= i && i < Seq.length (Model0.model c) && IndexLogic0.index_logic (Seq.get (Model0.model c) i) = UInt64.to_int idx) } - - = - var _0 : bool; - var c_1 : Type.alloc_vec_vec (Type.creusat_lit_lit) (Type.alloc_alloc_global); - var idx_2 : usize; - var seen_3 : Type.alloc_vec_vec bool (Type.alloc_alloc_global); - var _4 : bool; - var _5 : Type.alloc_vec_vec bool (Type.alloc_alloc_global); - var _6 : usize; - { - c_1 <- c; - idx_2 <- idx; - seen_3 <- seen; - goto BB0 - } - BB0 { - _5 <- seen_3; - _6 <- idx_2; - _4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 28 4 28 13] Index0.index _5 _6); - goto BB1 - } - BB1 { - _0 <- _4; - return _0 - } - end module CreuSat_Logic_LogicLit_Impl1_LitIdxIn_Interface use Type @@ -4169,7 +2083,7 @@ module CreuSat_Logic_LogicLit_Impl1_LitIdxIn predicate lit_idx_in [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 68 4 68 46] (self : Type.creusat_lit_lit) (c : Type.creusat_clause_clause) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 69 8 72 9] exists i : (int) . 0 <= i && i < Seq.length (Model0.model c) && IndexLogic0.index_logic (Seq.get (Model0.model c) i) = IndexLogic0.index_logic self + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 69 8 72 9] exists i : (int) . 0 <= i /\ i < Seq.length (Model0.model c) /\ IndexLogic0.index_logic (Seq.get (Model0.model c) i) = IndexLogic0.index_logic self end module CreuSat_Logic_LogicTrail_LitIsUniqueInner_Interface use seq.Seq @@ -4185,7 +2099,7 @@ module CreuSat_Logic_LogicTrail_LitIsUniqueInner predicate lit_is_unique_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 210 0 210 48] (trail : Seq.seq (Type.creusat_trail_step)) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 211 4 215 5] forall i : (int) . 0 <= i && i < Seq.length trail -> (forall j : (int) . 0 <= j && j < i -> IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit (Seq.get trail j)) <> IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit (Seq.get trail i))) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 211 4 215 5] forall i : (int) . 0 <= i /\ i < Seq.length trail -> (forall j : (int) . 0 <= j /\ j < i -> IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit (Seq.get trail j)) <> IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit (Seq.get trail i))) end module CreuSat_Logic_LogicUtil_SortedRange_Interface use seq.Seq @@ -4202,7 +2116,7 @@ module CreuSat_Logic_LogicUtil_SortedRange predicate sorted_range [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 20 0 20 58] (s : Seq.seq usize) (l : int) (u : int) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 21 4 23 5] forall j : (int) . forall i : (int) . l <= i && i < j && j < u -> Seq.get s i <= Seq.get s j + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 21 4 23 5] forall j : (int) . forall i : (int) . l <= i /\ i < j /\ j < u -> Seq.get s i <= Seq.get s j end module CreuSat_Logic_LogicUtil_Sorted_Interface use seq.Seq @@ -4240,8 +2154,8 @@ module CreuSat_Logic_LogicTrail_UnitAreSat predicate unit_are_sat [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 241 0 241 69] (trail : Seq.seq (Type.creusat_trail_step)) (f : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 242 4 250 5] forall j : (int) . 0 <= j && j < Seq.length trail -> match (Type.creusat_trail_step_Step_reason (Seq.get trail j)) with - | Type.CreuSat_Trail_Reason_Unit k -> Type.creusat_trail_step_Step_lit (Seq.get trail j) = Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int k))) 0 && Sat0.sat (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int k))) 0) a + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 242 4 250 5] forall j : (int) . 0 <= j /\ j < Seq.length trail -> match (Type.creusat_trail_step_Step_reason (Seq.get trail j)) with + | Type.CreuSat_Trail_Reason_Unit k -> Type.creusat_trail_step_Step_lit (Seq.get trail j) = Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int k))) 0 /\ Sat0.sat (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int k))) 0) a | _ -> true end end @@ -4274,10 +2188,10 @@ module CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror predicate invariant_no_decision_mirror [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 67 4 67 61] (self : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 68 8 83 9] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) = Seq.length (Model0.model (Type.creusat_trail_trail_Trail_assignments self)) && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model (Type.creusat_trail_trail_Trail_assignments self)) -> UInt8.to_int (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments self)) i) <= 3) && (forall i : (int) . 0 <= i && i < Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail self)) -> Invariant0.invariant' (Seq.get (Model1.model (Type.creusat_trail_trail_Trail_trail self)) i) f) && Seq.length (Model2.model (Type.creusat_trail_trail_Trail_lit_to_level self)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) && (forall i : (int) . 0 <= i && i < Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail self)) -> (forall j : (int) . 0 <= j && j < i -> match (Type.creusat_trail_step_Step_reason (Seq.get (Model1.model (Type.creusat_trail_trail_Trail_trail self)) j)) with + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 68 8 83 9] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) = Seq.length (Model0.model (Type.creusat_trail_trail_Trail_assignments self)) /\ (forall i : (int) . 0 <= i /\ i < Seq.length (Model0.model (Type.creusat_trail_trail_Trail_assignments self)) -> UInt8.to_int (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments self)) i) <= 3) /\ (forall i : (int) . 0 <= i /\ i < Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail self)) -> Invariant0.invariant' (Seq.get (Model1.model (Type.creusat_trail_trail_Trail_trail self)) i) f) /\ Seq.length (Model2.model (Type.creusat_trail_trail_Trail_lit_to_level self)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) /\ (forall i : (int) . 0 <= i /\ i < Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail self)) -> (forall j : (int) . 0 <= j /\ j < i -> match (Type.creusat_trail_step_Step_reason (Seq.get (Model1.model (Type.creusat_trail_trail_Trail_trail self)) j)) with | Type.CreuSat_Trail_Reason_Long cref -> not LitIdxIn0.lit_idx_in (Type.creusat_trail_step_Step_lit (Seq.get (Model1.model (Type.creusat_trail_trail_Trail_trail self)) i)) (Seq.get (Model3.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)) | _ -> true - end)) && LitIsUniqueInner0.lit_is_unique_inner (Model1.model (Type.creusat_trail_trail_Trail_trail self)) && LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail self)) f (Model0.model (Type.creusat_trail_trail_Trail_assignments self)) && (forall j : (int) . 0 <= j && j < Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail self)) -> Sat0.sat (Type.creusat_trail_step_Step_lit (Seq.get (Model1.model (Type.creusat_trail_trail_Trail_trail self)) j)) (Type.creusat_trail_trail_Trail_assignments self)) && Sorted0.sorted (Model2.model (Type.creusat_trail_trail_Trail_decisions self)) && UnitAreSat0.unit_are_sat (Model1.model (Type.creusat_trail_trail_Trail_trail self)) f (Type.creusat_trail_trail_Trail_assignments self) + end)) /\ LitIsUniqueInner0.lit_is_unique_inner (Model1.model (Type.creusat_trail_trail_Trail_trail self)) /\ LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail self)) f (Model0.model (Type.creusat_trail_trail_Trail_assignments self)) /\ (forall j : (int) . 0 <= j /\ j < Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail self)) -> Sat0.sat (Type.creusat_trail_step_Step_lit (Seq.get (Model1.model (Type.creusat_trail_trail_Trail_trail self)) j)) (Type.creusat_trail_trail_Trail_assignments self)) /\ Sorted0.sorted (Model2.model (Type.creusat_trail_trail_Trail_decisions self)) /\ UnitAreSat0.unit_are_sat (Model1.model (Type.creusat_trail_trail_Trail_trail self)) f (Type.creusat_trail_trail_Trail_assignments self) end module CreuSat_Logic_LogicTrail_LitToLevelInvariant_Interface use seq.Seq @@ -4315,7 +2229,7 @@ module CreuSat_Logic_LogicTrail_LitNotInLessInner predicate lit_not_in_less_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 144 0 144 62] (t : Seq.seq (Type.creusat_trail_step)) (f : Type.creusat_formula_formula) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 145 4 152 5] forall i : (int) . 0 <= i && i < Seq.length t -> (forall j : (int) . 0 <= j && j < i -> match (Type.creusat_trail_step_Step_reason (Seq.get t j)) with + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 145 4 152 5] forall i : (int) . 0 <= i /\ i < Seq.length t -> (forall j : (int) . 0 <= j /\ j < i -> match (Type.creusat_trail_step_Step_reason (Seq.get t j)) with | Type.CreuSat_Trail_Reason_Long cref -> not LitIdxIn0.lit_idx_in (Type.creusat_trail_step_Step_lit (Seq.get t i)) (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)) | _ -> true end) @@ -4367,7 +2281,7 @@ module CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner predicate trail_entries_are_assigned_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 179 0 179 80] (t : Seq.seq (Type.creusat_trail_step)) (a : Seq.seq uint8) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 180 4 183 5] forall j : (int) . 0 <= j && j < Seq.length t -> SatInner0.sat_inner (Type.creusat_trail_step_Step_lit (Seq.get t j)) a + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 180 4 183 5] forall j : (int) . 0 <= j /\ j < Seq.length t -> SatInner0.sat_inner (Type.creusat_trail_step_Step_lit (Seq.get t j)) a end module CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned_Interface use Type @@ -4429,80 +2343,9 @@ module CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision predicate invariant_no_decision [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 88 4 88 58] (self : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 89 8 101 9] Invariant0.invariant' (Type.creusat_trail_trail_Trail_assignments self) f && TrailInvariant0.trail_invariant (Model0.model (Type.creusat_trail_trail_Trail_trail self)) f && LitToLevelInvariant0.lit_to_level_invariant (Model1.model (Type.creusat_trail_trail_Trail_lit_to_level self)) f && LitNotInLess0.lit_not_in_less self f && LitIsUnique0.lit_is_unique self && LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail self)) f (Model2.model (Type.creusat_trail_trail_Trail_assignments self)) && TrailEntriesAreAssigned0.trail_entries_are_assigned self && DecisionsAreSorted0.decisions_are_sorted self && UnitAreSat0.unit_are_sat (Model0.model (Type.creusat_trail_trail_Trail_trail self)) f (Type.creusat_trail_trail_Trail_assignments self) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 89 8 101 9] Invariant0.invariant' (Type.creusat_trail_trail_Trail_assignments self) f /\ TrailInvariant0.trail_invariant (Model0.model (Type.creusat_trail_trail_Trail_trail self)) f /\ LitToLevelInvariant0.lit_to_level_invariant (Model1.model (Type.creusat_trail_trail_Trail_lit_to_level self)) f /\ LitNotInLess0.lit_not_in_less self f /\ LitIsUnique0.lit_is_unique self /\ LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail self)) f (Model2.model (Type.creusat_trail_trail_Trail_assignments self)) /\ TrailEntriesAreAssigned0.trail_entries_are_assigned self /\ DecisionsAreSorted0.decisions_are_sorted self /\ UnitAreSat0.unit_are_sat (Model0.model (Type.creusat_trail_trail_Trail_trail self)) f (Type.creusat_trail_trail_Trail_assignments self) axiom invariant_no_decision_spec : forall self : Type.creusat_trail_trail, f : Type.creusat_formula_formula . [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 87 4 87 62] invariant_no_decision self f = InvariantNoDecisionMirror0.invariant_no_decision_mirror self f end -module CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision_Impl - use Type - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - use mach.int.UInt64 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model5.model, axiom . - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = Invariant2.index_logic, function IndexLogic0.index_logic = SatInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner - clone CreuSat_Logic_LogicClause_Impl0_Model as Model5 with function Model1.model = UnitAreSat0.model, - function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, - function Model1.model = Invariant3.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model3.model = InvariantNoDecisionMirror0.model, - function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant3.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant3 with predicate Invariant1.invariant' = Invariant1.invariant' - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant2 with predicate Invariant0.invariant' = Invariant1.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model2.model, axiom . - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model0.model = InvariantNoDecisionMirror0.model, - function Model0.model = Invariant0.model, function Model1.model = TrailEntriesAreAssigned0.model, - function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = usize, type a = Type.alloc_alloc_global, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant0 - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 - let rec ghost function invariant_no_decision (self : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) : bool - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 87 4 87 62] result = InvariantNoDecisionMirror0.invariant_no_decision_mirror self f } - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 89 8 101 9] (let a' = Type.creusat_trail_trail_Trail_assignments self in Invariant0.invariant' a' f) && (let a' = let a' = Type.creusat_trail_trail_Trail_trail self in Model0.model a' in TrailInvariant0.trail_invariant a' f) && (let a' = let a' = Type.creusat_trail_trail_Trail_lit_to_level self in Model1.model a' in LitToLevelInvariant0.lit_to_level_invariant a' f) && LitNotInLess0.lit_not_in_less self f && LitIsUnique0.lit_is_unique self && (let a' = let a' = Type.creusat_trail_trail_Trail_trail self in Model0.model a' in let c' = let a' = Type.creusat_trail_trail_Trail_assignments self in Model2.model a' in LongArePostUnitInner0.long_are_post_unit_inner a' f c') && TrailEntriesAreAssigned0.trail_entries_are_assigned self && DecisionsAreSorted0.decisions_are_sorted self && (let a' = let a' = Type.creusat_trail_trail_Trail_trail self in Model0.model a' in let c' = Type.creusat_trail_trail_Trail_assignments self in UnitAreSat0.unit_are_sat a' f c') -end module CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface use Type predicate invariant' (self : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) @@ -4514,16 +2357,17 @@ module CreuSat_Logic_LogicTrail_Impl2_Invariant use seq.Seq use mach.int.UInt64 use prelude.Prelude - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror_Interface as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror_Interface as InvariantNoDecisionMirror0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, axiom . clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision_Interface as InvariantNoDecision0 with axiom . + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision_Interface as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, + axiom . predicate invariant' [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 59 4 59 46] (self : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 60 8 63 9] InvariantNoDecision0.invariant_no_decision self f && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions self)) -> UInt64.to_int (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_decisions self)) i) <= Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail self))) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 60 8 63 9] InvariantNoDecision0.invariant_no_decision self f /\ (forall i : (int) . 0 <= i /\ i < Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions self)) -> UInt64.to_int (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_decisions self)) i) <= Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail self))) end module CreuSat_Logic_LogicClause_Impl2_InFormula_Interface use Type @@ -4539,7 +2383,7 @@ module CreuSat_Logic_LogicClause_Impl2_InFormula predicate in_formula [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 114 4 114 47] (self : Type.creusat_clause_clause) (f : Type.creusat_formula_formula) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 115 8 118 9] exists i : (int) . 0 <= i && i < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) && Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) i = self + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 115 8 118 9] exists i : (int) . 0 <= i /\ i < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) /\ Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) i = self end module CreuSat_Logic_LogicLit_Impl1_IsOpp_Interface use Type @@ -4552,7 +2396,7 @@ module CreuSat_Logic_LogicLit_Impl1_IsOpp predicate is_opp [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 47 4 47 39] (self : Type.creusat_lit_lit) (o : Type.creusat_lit_lit) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 48 8 50 9] IndexLogic0.index_logic self = IndexLogic0.index_logic o && IsPositiveLogic0.is_positive_logic self <> IsPositiveLogic0.is_positive_logic o + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 48 8 50 9] IndexLogic0.index_logic self = IndexLogic0.index_logic o /\ IsPositiveLogic0.is_positive_logic self <> IsPositiveLogic0.is_positive_logic o end module CreuSat_Logic_LogicClause_Impl2_SameIdxSamePolarityExcept_Interface use Type @@ -4571,7 +2415,7 @@ module CreuSat_Logic_LogicClause_Impl2_SameIdxSamePolarityExcept predicate same_idx_same_polarity_except [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 92 4 92 85] (self : Type.creusat_clause_clause) (other : Type.creusat_clause_clause) (exception' : int) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 93 8 98 9] forall j : (int) . forall i : (int) . 0 <= i && i < Seq.length (Model0.model self) && 0 <= j && j < Seq.length (Model0.model other) -> IndexLogic0.index_logic (Seq.get (Model0.model self) i) <> exception' && IndexLogic0.index_logic (Seq.get (Model0.model self) i) = IndexLogic0.index_logic (Seq.get (Model0.model other) j) -> IsPositiveLogic0.is_positive_logic (Seq.get (Model0.model self) i) = IsPositiveLogic0.is_positive_logic (Seq.get (Model0.model other) j) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 93 8 98 9] forall j : (int) . forall i : (int) . 0 <= i /\ i < Seq.length (Model0.model self) /\ 0 <= j /\ j < Seq.length (Model0.model other) -> IndexLogic0.index_logic (Seq.get (Model0.model self) i) <> exception' /\ IndexLogic0.index_logic (Seq.get (Model0.model self) i) = IndexLogic0.index_logic (Seq.get (Model0.model other) j) -> IsPositiveLogic0.is_positive_logic (Seq.get (Model0.model self) i) = IsPositiveLogic0.is_positive_logic (Seq.get (Model0.model other) j) end module CreuSat_Logic_LogicUtil_ElemsLessThan_Interface use seq.Seq @@ -4589,7 +2433,7 @@ module CreuSat_Logic_LogicUtil_ElemsLessThan predicate elems_less_than [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 58 0 58 53] (v : Seq.seq usize) (n : int) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 59 4 59 68] forall i : (int) . 0 <= i && i < Seq.length v -> UInt64.to_int (Seq.get v i) < n + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 59 4 59 68] forall i : (int) . 0 <= i /\ i < Seq.length v -> UInt64.to_int (Seq.get v i) < n end module CreuSat_Logic_LogicClause_Impl2_ClauseIsSeen_Interface use Type @@ -4608,7 +2452,7 @@ module CreuSat_Logic_LogicClause_Impl2_ClauseIsSeen predicate clause_is_seen [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 237 4 237 56] (self : Type.creusat_clause_clause) (seen : Type.alloc_vec_vec bool (Type.alloc_alloc_global)) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 238 8 241 9] forall idx : (int) . 0 <= idx && idx < Seq.length (Model0.model seen) -> Seq.get (Model0.model seen) idx = IdxInLogic0.idx_in_logic idx (Model1.model self) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 238 8 241 9] forall idx : (int) . 0 <= idx /\ idx < Seq.length (Model0.model seen) -> Seq.get (Model0.model seen) idx = IdxInLogic0.idx_in_logic idx (Model1.model self) end module CreuSat_Logic_LogicClause_Impl2_Unsat_Interface use Type @@ -4645,7 +2489,7 @@ module CreuSat_Logic_LogicClause_Impl2_ResolventOf predicate resolvent_of [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 102 4 102 76] (self : Type.creusat_clause_clause) (c : Type.creusat_clause_clause) (c2 : Type.creusat_clause_clause) (k : int) (m : int) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 103 8 110 9] (forall i : (int) . 0 <= i && i < Seq.length (Model0.model c) && i <> m -> LitIn0.lit_in (Seq.get (Model0.model c) i) self) && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model c2) && i <> k -> LitIn0.lit_in (Seq.get (Model0.model c2) i) self) && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model self) -> LitIn0.lit_in (Seq.get (Model0.model self) i) c || LitIn0.lit_in (Seq.get (Model0.model self) i) c2) && not LitIn0.lit_in (Seq.get (Model0.model c) m) self && not LitIn0.lit_in (Seq.get (Model0.model c2) k) self && IsOpp0.is_opp (Seq.get (Model0.model c2) k) (Seq.get (Model0.model c) m) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 103 8 110 9] (forall i : (int) . 0 <= i /\ i < Seq.length (Model0.model c) /\ i <> m -> LitIn0.lit_in (Seq.get (Model0.model c) i) self) /\ (forall i : (int) . 0 <= i /\ i < Seq.length (Model0.model c2) /\ i <> k -> LitIn0.lit_in (Seq.get (Model0.model c2) i) self) /\ (forall i : (int) . 0 <= i /\ i < Seq.length (Model0.model self) -> LitIn0.lit_in (Seq.get (Model0.model self) i) c \/ LitIn0.lit_in (Seq.get (Model0.model self) i) c2) /\ not LitIn0.lit_in (Seq.get (Model0.model c) m) self /\ not LitIn0.lit_in (Seq.get (Model0.model c2) k) self /\ IsOpp0.is_opp (Seq.get (Model0.model c2) k) (Seq.get (Model0.model c) m) end module CreuSat_Logic_LogicClause_Impl2_InFormulaInner_Interface use Type @@ -4661,7 +2505,7 @@ module CreuSat_Logic_LogicClause_Impl2_InFormulaInner predicate in_formula_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 122 4 122 64] (self : Type.creusat_clause_clause) (f : (Seq.seq (Type.creusat_clause_clause), int)) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 123 8 125 9] exists i : (int) . 0 <= i && i < Seq.length (let (a, _) = f in a) && Seq.get (let (a, _) = f in a) i = self + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 123 8 125 9] exists i : (int) . 0 <= i /\ i < Seq.length (let (a, _) = f in a) /\ Seq.get (let (a, _) = f in a) i = self end module CreuSat_Logic_LogicClause_Impl2_Equals_Interface use Type @@ -4676,7 +2520,7 @@ module CreuSat_Logic_LogicClause_Impl2_Equals predicate equals [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 210 4 210 42] (self : Type.creusat_clause_clause) (o : Type.creusat_clause_clause) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 211 8 215 9] Seq.length (Model0.model self) = Seq.length (Model0.model o) && (forall j : (int) . 0 <= j && j < Seq.length (Model0.model self) -> Seq.get (Model0.model self) j = Seq.get (Model0.model o) j) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 211 8 215 9] Seq.length (Model0.model self) = Seq.length (Model0.model o) /\ (forall j : (int) . 0 <= j /\ j < Seq.length (Model0.model self) -> Seq.get (Model0.model self) j = Seq.get (Model0.model o) j) end module CreuSat_Logic_LogicConflictAnalysis_LemmaEqFormulas_Interface use seq.Seq @@ -4701,35 +2545,7 @@ module CreuSat_Logic_LogicConflictAnalysis_LemmaEqFormulas = [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 9 0 9 8] () - axiom lemma_eq_formulas_spec : forall f : (Seq.seq (Type.creusat_clause_clause), int), f2 : (Seq.seq (Type.creusat_clause_clause), int), c : Type.creusat_clause_clause . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 10 0 10 32] (let (a, _) = f2 in a) = Seq.snoc (let (a, _) = f in a) c) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 11 0 11 33] FormulaInvariant0.formula_invariant f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 14 0 14 41] Model0.model (Seq.get (let (a, _) = f2 in a) (Seq.length (let (a, _) = f2 in a) - 1)) = Model0.model c) && ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 13 0 13 85] forall i : (int) . 0 <= i && i < Seq.length (let (a, _) = f in a) -> Equals0.equals (Seq.get (let (a, _) = f in a) i) (Seq.get (let (a, _) = f2 in a) i)) && ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 12 0 12 43] Seq.length (let (a, _) = f in a) + 1 = Seq.length (let (a, _) = f2 in a)) -end -module CreuSat_Logic_LogicConflictAnalysis_LemmaEqFormulas_Impl - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use Type - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = Invariant1.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant0.invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model0 with function Model0.model = FormulaInvariant0.model, - function Model0.model = Equals0.model, function Model0.model = Invariant0.model - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant0 with predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicClause_Impl2_Equals as Equals0 - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 - let rec ghost function lemma_eq_formulas (f : (Seq.seq (Type.creusat_clause_clause), int)) (f2 : (Seq.seq (Type.creusat_clause_clause), int)) (c : Type.creusat_clause_clause) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 10 0 10 32] (let (a, _) = f2 in a) = Seq.snoc (let (a, _) = f in a) c} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 11 0 11 33] FormulaInvariant0.formula_invariant f} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 12 0 12 43] Seq.length (let (a, _) = f in a) + 1 = Seq.length (let (a, _) = f2 in a) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 13 0 13 85] forall i : (int) . 0 <= i && i < Seq.length (let (a, _) = f in a) -> Equals0.equals (Seq.get (let (a, _) = f in a) i) (Seq.get (let (a, _) = f2 in a) i) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 14 0 14 41] Model0.model (Seq.get (let (a, _) = f2 in a) (Seq.length (let (a, _) = f2 in a) - 1)) = Model0.model c } - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 9 0 9 8] () + axiom lemma_eq_formulas_spec : forall f : (Seq.seq (Type.creusat_clause_clause), int), f2 : (Seq.seq (Type.creusat_clause_clause), int), c : Type.creusat_clause_clause . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 10 0 10 32] (let (a, _) = f2 in a) = Seq.snoc (let (a, _) = f in a) c) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 11 0 11 33] FormulaInvariant0.formula_invariant f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 14 0 14 41] Model0.model (Seq.get (let (a, _) = f2 in a) (Seq.length (let (a, _) = f2 in a) - 1)) = Model0.model c) && ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 13 0 13 85] forall i : (int) . 0 <= i /\ i < Seq.length (let (a, _) = f in a) -> Equals0.equals (Seq.get (let (a, _) = f in a) i) (Seq.get (let (a, _) = f2 in a) i)) && ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 12 0 12 43] Seq.length (let (a, _) = f in a) + 1 = Seq.length (let (a, _) = f2 in a)) end module CreuSat_Logic_LogicConflictAnalysis_LemmaResolventOfEquisatExtensionIsEquisat_Interface use seq.Seq @@ -4750,59 +2566,16 @@ module CreuSat_Logic_LogicConflictAnalysis_LemmaResolventOfEquisatExtensionIsEqu clone CreuSat_Logic_LogicClause_Impl2_InFormulaInner_Interface as InFormulaInner0 clone CreuSat_Logic_LogicClause_EquisatExtensionInner_Interface as EquisatExtensionInner0 clone CreuSat_Logic_LogicFormula_FormulaInvariant_Interface as FormulaInvariant0 - clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 with function Model0.model = LemmaEqFormulas0.model - clone CreuSat_Logic_LogicClause_Impl2_Equals_Interface as Equals0 with predicate Equals0.equals = LemmaEqFormulas0.equals - clone CreuSat_Logic_LogicConflictAnalysis_LemmaEqFormulas_Interface as LemmaEqFormulas0 with axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 + clone CreuSat_Logic_LogicClause_Impl2_Equals_Interface as Equals0 + clone CreuSat_Logic_LogicConflictAnalysis_LemmaEqFormulas_Interface as LemmaEqFormulas0 with predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, + predicate Equals0.equals = Equals0.equals, function Model0.model = Model0.model, axiom . function lemma_resolvent_of_equisat_extension_is_equisat [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 26 0 28 1] (f : (Seq.seq (Type.creusat_clause_clause), int)) (c : Type.creusat_clause_clause) (c2 : Type.creusat_clause_clause) (c3 : Type.creusat_clause_clause) (k : int) (m : int) : () = [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 20 0 20 8] let _ = LemmaEqFormulas0.lemma_eq_formulas f (Seq.snoc (let (a, _) = f in a) c3, let (_, a) = f in a) c3 in () axiom lemma_resolvent_of_equisat_extension_is_equisat_spec : forall f : (Seq.seq (Type.creusat_clause_clause), int), c : Type.creusat_clause_clause, c2 : Type.creusat_clause_clause, c3 : Type.creusat_clause_clause, k : int, m : int . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 21 0 21 33] FormulaInvariant0.formula_invariant f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 22 0 22 42] EquisatExtensionInner0.equisat_extension_inner c f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 23 0 23 35] InFormulaInner0.in_formula_inner c2 f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 24 0 24 41] ResolventOf0.resolvent_of c3 c c2 k m) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 25 0 25 42] EquisatExtensionInner0.equisat_extension_inner c3 f) end -module CreuSat_Logic_LogicConflictAnalysis_LemmaResolventOfEquisatExtensionIsEquisat_Impl - use seq.Seq - use Type - use mach.int.Int - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = IsOpp0.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = Invariant1.index_logic, function IndexLogic0.index_logic = SatInner1.index_logic - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = IsOpp0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model0 with function Model0.model = FormulaInvariant0.model, - function Model0.model = ResolventOf0.model, function Model0.model = LemmaEqFormulas0.model, - function Model0.model = Invariant0.model, function Model0.model = LitIn0.model, function Model0.model = Equals0.model, - function Model0.model = SatInner0.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss0.formula_sat_inner - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant0.invariant_internal - clone CreuSat_Logic_LogicClause_Impl2_Equals as Equals0 with predicate Equals0.equals = LemmaEqFormulas0.equals - clone CreuSat_Logic_LogicLit_Impl1_IsOpp as IsOpp0 with predicate IsOpp0.is_opp = ResolventOf0.is_opp - clone CreuSat_Logic_LogicLit_Impl1_LitIn as LitIn0 with predicate LitIn0.lit_in = ResolventOf0.lit_in - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant0 with predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = LemmaEqFormulas0.formula_invariant - clone CreuSat_Logic_LogicConflictAnalysis_LemmaEqFormulas as LemmaEqFormulas0 with axiom . - clone CreuSat_Logic_LogicClause_Impl2_ResolventOf as ResolventOf0 - clone CreuSat_Logic_LogicClause_Impl2_InFormulaInner as InFormulaInner0 - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 - let rec ghost function lemma_resolvent_of_equisat_extension_is_equisat (f : (Seq.seq (Type.creusat_clause_clause), int)) (c : Type.creusat_clause_clause) (c2 : Type.creusat_clause_clause) (c3 : Type.creusat_clause_clause) (k : int) (m : int) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 21 0 21 33] FormulaInvariant0.formula_invariant f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 22 0 22 42] EquisatExtensionInner0.equisat_extension_inner c f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 23 0 23 35] InFormulaInner0.in_formula_inner c2 f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 24 0 24 41] ResolventOf0.resolvent_of c3 c c2 k m} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 25 0 25 42] EquisatExtensionInner0.equisat_extension_inner c3 f } - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_conflict_analysis.rs" 20 0 20 8] let _ = LemmaEqFormulas0.lemma_eq_formulas f (Seq.snoc (let (a, _) = f in a) c3, let (_, a) = f in a) c3 in () -end module CreusotContracts_Logic_Int_Impl18 end @@ -4829,17 +2602,6 @@ module Alloc_Vec_Impl1_Push_Interface val push [@cfg:stackify] (self : borrowed (Type.alloc_vec_vec t a)) (value : t) : () ensures { Model0.model ( ^ self) = Seq.snoc (Model0.model ( * self)) value } -end -module Alloc_Vec_Impl1_Push - type t - type a - use seq.Seq - use prelude.Prelude - use Type - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = t, type a = a, axiom . - val push [@cfg:stackify] (self : borrowed (Type.alloc_vec_vec t a)) (value : t) : () - ensures { Model0.model ( ^ self) = Seq.snoc (Model0.model ( * self)) value } - end module CreuSat_Trail_Impl0_DecisionLevel_Interface use mach.int.UInt64 @@ -4852,35 +2614,6 @@ module CreuSat_Trail_Impl0_DecisionLevel_Interface val decision_level [@cfg:stackify] (self : Type.creusat_trail_trail) : usize ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 36 4 36 50] UInt64.to_int result = Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions self)) } -end -module CreuSat_Trail_Impl0_DecisionLevel - use mach.int.UInt64 - use seq.Seq - use prelude.Prelude - use Type - use mach.int.Int - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = usize, type a = Type.alloc_alloc_global - let rec cfg decision_level [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 37 4 37 41] (self : Type.creusat_trail_trail) : usize - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 36 4 36 50] UInt64.to_int result = Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions self)) } - - = - var _0 : usize; - var self_1 : Type.creusat_trail_trail; - var _2 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - { - self_1 <- self; - goto BB0 - } - BB0 { - _2 <- Type.creusat_trail_trail_Trail_decisions self_1; - _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 38 8 38 28] Len0.len _2); - goto BB1 - } - BB1 { - return _0 - } - end module CreuSat_ConflictAnalysis_Resolve_Interface use mach.int.UInt64 @@ -4889,15 +2622,12 @@ module CreuSat_ConflictAnalysis_Resolve_Interface use mach.int.Int32 use prelude.Prelude use Type - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy4 with type ModelTy0.modelTy = Model6.modelTy - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy3 with type t = usize, type a = Type.alloc_alloc_global, - type ModelTy0.modelTy = Model5.modelTy - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy2 with type t = bool, type a = Type.alloc_alloc_global, - type ModelTy0.modelTy = Model4.modelTy - clone CreusotContracts_Logic_Int_Impl18_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model3.modelTy - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy, - type ModelTy0.modelTy = Model1.modelTy - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy4 + clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy3 with type t = usize, type a = Type.alloc_alloc_global + clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy2 with type t = bool, type a = Type.alloc_alloc_global + clone CreusotContracts_Logic_Int_Impl18_ModelTy as ModelTy1 + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model9 with type t = usize, type a = Type.alloc_alloc_global, axiom . clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model8 with type t = bool, type a = Type.alloc_alloc_global, @@ -4907,32 +2637,39 @@ module CreuSat_ConflictAnalysis_Resolve_Interface clone CreuSat_Logic_LogicClause_Impl2_Unsat_Interface as Unsat0 clone CreuSat_Logic_LogicClause_Impl2_ClauseIsSeen_Interface as ClauseIsSeen0 clone CreuSat_Logic_LogicClause_EquisatExtensionInner_Interface as EquisatExtensionInner0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model6 with type t = Type.creusat_formula_formula + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model6 with type t = Type.creusat_formula_formula, + type ModelTy0.modelTy = ModelTy4.modelTy clone CreuSat_Logic_LogicUtil_ElemsLessThan_Interface as ElemsLessThan0 - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model5 with type t = Type.alloc_vec_vec usize (Type.alloc_alloc_global) - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model4 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global) - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model3 with type t = usize + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model5 with type t = Type.alloc_vec_vec usize (Type.alloc_alloc_global), + type ModelTy0.modelTy = ModelTy3.modelTy + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model4 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global), + type ModelTy0.modelTy = ModelTy2.modelTy + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model3 with type t = usize, + type ModelTy0.modelTy = ModelTy1.modelTy clone CreuSat_Logic_LogicLit_Impl1_SatInner_Interface as SatInner0 clone CreuSat_Logic_LogicLit_Impl1_UnsatInner_Interface as UnsatInner0 clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model2 clone CreuSat_Logic_LogicClause_Impl2_SameIdxSamePolarityExcept_Interface as SameIdxSamePolarityExcept0 clone CreuSat_Logic_LogicLit_Impl1_IsOpp_Interface as IsOpp0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model1 with type t = Type.creusat_clause_clause + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model1 with type t = Type.creusat_clause_clause, + type ModelTy0.modelTy = ModelTy0.modelTy clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_clause_clause + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type ModelTy0.modelTy = ModelTy0.modelTy clone CreuSat_Logic_LogicClause_Impl2_InFormula_Interface as InFormula0 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . val resolve [@cfg:stackify] (_f : Type.creusat_formula_formula) (c : borrowed (Type.creusat_clause_clause)) (o : Type.creusat_clause_clause) (idx : usize) (c_idx : usize) (trail : Type.creusat_trail_trail) (seen : borrowed (Type.alloc_vec_vec bool (Type.alloc_alloc_global))) (path_c : borrowed usize) (to_bump : borrowed (Type.alloc_vec_vec usize (Type.alloc_alloc_global))) : () requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 32 0 32 27] Invariant0.invariant' _f} requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 33 0 33 33] Invariant1.invariant' trail _f} requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 34 0 34 32] UInt64.to_int idx < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 35 0 35 30] InFormula0.in_formula o _f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 36 0 39 2] UInt64.to_int c_idx < Seq.length (Model0.model c) && IndexLogic0.index_logic (Seq.get (Model0.model c) (UInt64.to_int c_idx)) = UInt64.to_int idx && IsOpp0.is_opp (Seq.get (Model1.model o) 0) (Seq.get (Model0.model c) (UInt64.to_int c_idx))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 36 0 39 2] UInt64.to_int c_idx < Seq.length (Model0.model c) /\ IndexLogic0.index_logic (Seq.get (Model0.model c) (UInt64.to_int c_idx)) = UInt64.to_int idx /\ IsOpp0.is_opp (Seq.get (Model1.model o) 0) (Seq.get (Model0.model c) (UInt64.to_int c_idx))} requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 40 0 40 54] SameIdxSamePolarityExcept0.same_idx_same_polarity_except ( * c) o (UInt64.to_int idx)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 42 0 42 96] forall j : (int) . 1 <= j && j < Seq.length (Model1.model o) -> UnsatInner0.unsat_inner (Seq.get (Model1.model o) j) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 42 0 42 96] forall j : (int) . 1 <= j /\ j < Seq.length (Model1.model o) -> UnsatInner0.unsat_inner (Seq.get (Model1.model o) j) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail))} requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 43 0 43 50] SatInner0.sat_inner (Seq.get (Model1.model o) 0) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 44 0 44 49] Model3.model path_c > 0 && Model3.model path_c <= Seq.length (Model0.model c)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 44 0 44 49] Model3.model path_c > 0 /\ Model3.model path_c <= Seq.length (Model0.model c)} requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 47 0 47 42] Seq.length (Model4.model seen) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 49 0 49 52] ElemsLessThan0.elems_less_than (Model5.model to_bump) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 51 0 51 49] EquisatExtensionInner0.equisat_extension_inner ( * c) (Model6.model _f)} @@ -4948,18754 +2685,5516 @@ module CreuSat_ConflictAnalysis_Resolve_Interface ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 54 0 54 45] Invariant2.invariant' ( ^ c) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } end -module CreuSat_ConflictAnalysis_Resolve +module CreuSat_ConflictAnalysis_ChooseLiteral_Interface + use seq.Seq + use mach.int.Int use mach.int.UInt64 + use Type + use prelude.Prelude + use mach.int.Int32 + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy2 + clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy1 with type t = bool, type a = Type.alloc_alloc_global + clone CreusotContracts_Logic_Int_Impl18_ModelTy as ModelTy0 + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 + clone CreuSat_Logic_LogicLit_Impl1_IsOpp_Interface as IsOpp0 + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model3 with type t = Type.creusat_clause_clause, + type ModelTy0.modelTy = ModelTy2.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model2 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global), + type ModelTy0.modelTy = ModelTy1.modelTy + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, axiom . + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = usize, + type ModelTy0.modelTy = ModelTy0.modelTy + clone CreuSat_Logic_LogicClause_Impl2_Unsat_Interface as Unsat0 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant0 + val choose_literal [@cfg:stackify] (c : Type.creusat_clause_clause) (trail : Type.creusat_trail_trail) (i : borrowed usize) (_f : Type.creusat_formula_formula) (seen : Type.alloc_vec_vec bool (Type.alloc_alloc_global)) : Type.core_option_option usize + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 125 0 125 33] Invariant0.invariant' trail _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 126 0 126 39] Unsat0.unsat c (Type.creusat_trail_trail_Trail_assignments trail)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 127 0 127 39] Model0.model i <= Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail trail))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 128 0 128 42] Seq.length (Model2.model seen) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 129 0 137 3] match (result) with + | Type.Core_Option_Option_Some r -> UInt64.to_int r < Seq.length (Model3.model c) /\ IsOpp0.is_opp (Seq.get (Model3.model c) (UInt64.to_int r)) (Type.creusat_trail_step_Step_lit (Seq.get (Model1.model (Type.creusat_trail_trail_Trail_trail trail)) (UInt64.to_int ( ^ i)))) /\ IndexLogic0.index_logic (Seq.get (Model3.model c) (UInt64.to_int r)) = IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit (Seq.get (Model1.model (Type.creusat_trail_trail_Trail_trail trail)) (UInt64.to_int ( ^ i)))) /\ UInt64.to_int ( ^ i) < Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail trail)) + | Type.Core_Option_Option_None -> UInt64.to_int ( ^ i) = 0 + end } + +end +module CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface + use Type + use mach.int.Int + predicate invariant' (self : Type.creusat_decision_decisions) (n : int) +end +module CreuSat_Logic_LogicDecision_Impl0_Invariant + use Type use mach.int.Int use seq.Seq - use mach.int.Int32 + use mach.int.UInt64 use prelude.Prelude + use mach.int.Int32 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_decision_node, + type a = Type.alloc_alloc_global, axiom . + predicate invariant' [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_decision.rs" 9 4 9 42] (self : Type.creusat_decision_decisions) (n : int) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_decision.rs" 10 8 17 9] Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) = n /\ (UInt64.to_int (Type.creusat_decision_decisions_Decisions_search self) < Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) \/ UInt64.to_int (Type.creusat_decision_decisions_Decisions_search self) = 18446744073709551615) /\ UInt64.to_int (Type.creusat_decision_decisions_Decisions_start self) < Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) /\ (forall i : (int) . 0 <= i /\ i < Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) -> (UInt64.to_int (Type.creusat_decision_node_Node_next (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) i)) = 18446744073709551615 \/ UInt64.to_int (Type.creusat_decision_node_Node_next (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) i)) < n) /\ (UInt64.to_int (Type.creusat_decision_node_Node_prev (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) i)) = 18446744073709551615 \/ UInt64.to_int (Type.creusat_decision_node_Node_prev (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) i)) < n)) +end +module CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface use Type - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = IsOpp0.index_logic, - function IndexLogic0.index_logic = SameIdxSamePolarityExcept0.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic, function IndexLogic0.index_logic = SatInner0.index_logic, - function IndexLogic0.index_logic = IdxInLogic0.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = Invariant5.index_logic - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = IsOpp0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = SameIdxSamePolarityExcept0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model15 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model7.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model7 with function Model0.model = Model0.model, - function Model0.model = Model1.model, function Model0.model = SameIdxSamePolarityExcept0.model, - function Model1.model = ClauseIsSeen0.model, function Model0.model = Invariant2.model, - function Model0.model = LitIn0.model, function Model0.model = ResolventOf0.model, - function Model0.model = LemmaResolventOfEquisatExtensionIsEquisat0.model, - function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, - function Model0.model = UnsatInner1.model, function Model0.model = LemmaEqFormulas0.model, - function Model0.model = Equals0.model, function Model1.model = UnitAreSat0.model, - function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, - function Model1.model = Invariant6.model, function Model0.model = SatInner1.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner1 with predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model12 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = InFormula0.model, - function Model0.model = InvariantMirror0.model, function Model0.model = Model10.model, - function Model3.model = InvariantNoDecisionMirror0.model, function Model0.model = LongArePostUnitInner0.model, - function Model0.model = UnitAreSat0.model, function Model0.model = LitNotInLessInner0.model, - function Model0.model = Invariant6.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant6 with predicate Invariant1.invariant' = Invariant4.invariant' - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = Invariant4.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner, - predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss0.formula_sat_inner - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model13 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model2.model, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model0.model = Unsat0.model, - function Model2.model = InvariantNoDecision0.model, function Model0.model = InvariantNoDecisionMirror0.model, - function Model0.model = Invariant3.model, function Model1.model = TrailEntriesAreAssigned0.model, - function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant1.model, function Model0.model = Model5.model, - function Model1.model = InvariantNoDecision0.model, function Model2.model = InvariantNoDecisionMirror0.model, - function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model11 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicClause_Impl2_Equals as Equals0 with predicate Equals0.equals = LemmaResolventOfEquisatExtensionIsEquisat0.equals, - predicate Equals0.equals = LemmaEqFormulas0.equals - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant2.invariant_internal - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant, - predicate FormulaInvariant0.formula_invariant = LemmaResolventOfEquisatExtensionIsEquisat0.formula_invariant, - predicate FormulaInvariant0.formula_invariant = LemmaEqFormulas0.formula_invariant - clone CreuSat_Logic_LogicConflictAnalysis_LemmaEqFormulas as LemmaEqFormulas0 with function LemmaEqFormulas0.lemma_eq_formulas = LemmaResolventOfEquisatExtensionIsEquisat0.lemma_eq_formulas, - axiom . - clone CreuSat_Logic_LogicClause_Impl2_InFormulaInner as InFormulaInner0 with predicate InFormulaInner0.in_formula_inner = LemmaResolventOfEquisatExtensionIsEquisat0.in_formula_inner - clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner1 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner - clone CreuSat_Logic_LogicLit_IdxInLogic as IdxInLogic0 with predicate IdxInLogic0.idx_in_logic = ClauseIsSeen0.idx_in_logic - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy4 with type ModelTy0.modelTy = Model6.modelTy - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy3 with type t = usize, type a = Type.alloc_alloc_global, - type ModelTy0.modelTy = Model5.modelTy - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy2 with type t = bool, type a = Type.alloc_alloc_global, - type ModelTy0.modelTy = Model4.modelTy - clone CreusotContracts_Logic_Int_Impl18_Model as Model14 with function Model0.model = Model3.model - clone CreusotContracts_Logic_Int_Impl18_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model3.modelTy - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy, - type ModelTy0.modelTy = Model1.modelTy - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model10 with function Model0.model = Invariant0.model, - function Model0.model = Model6.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicLit_Impl1_IsOpp as IsOpp0 with predicate IsOpp0.is_opp = ResolventOf0.is_opp - clone CreuSat_Logic_LogicLit_Impl1_LitIn as LitIn0 with predicate LitIn0.lit_in = ResolventOf0.lit_in - clone CreuSat_Logic_LogicClause_Impl2_ResolventOf as ResolventOf0 with predicate ResolventOf0.resolvent_of = LemmaResolventOfEquisatExtensionIsEquisat0.resolvent_of - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EquisatExtensionInner0.equisat_extension_inner = LemmaResolventOfEquisatExtensionIsEquisat0.equisat_extension_inner - clone CreuSat_Logic_LogicConflictAnalysis_LemmaResolventOfEquisatExtensionIsEquisat as LemmaResolventOfEquisatExtensionIsEquisat0 with axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = bool, type a = Type.alloc_alloc_global, - function Model0.model = Model4.model, function Model0.model = ClauseIsSeen0.model, axiom . - clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat0 - clone CreuSat_Logic_LogicClause_Impl2_ClauseIsSeen as ClauseIsSeen0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model6 with type t = Type.creusat_formula_formula - clone CreuSat_Logic_LogicUtil_ElemsLessThan as ElemsLessThan0 - clone CreusotContracts_Logic_Model_Impl1_Model as Model5 with type t = Type.alloc_vec_vec usize (Type.alloc_alloc_global) - clone CreusotContracts_Logic_Model_Impl1_Model as Model4 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global) - clone CreusotContracts_Logic_Model_Impl1_Model as Model3 with type t = usize - clone CreuSat_Logic_LogicClause_Impl2_SameIdxSamePolarityExcept as SameIdxSamePolarityExcept0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model1 with type t = Type.creusat_clause_clause - clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_clause_clause - clone CreuSat_Logic_LogicClause_Impl2_InFormula as InFormula0 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy7 with type t = usize - clone Core_Slice_Index_Impl2_Output as Output1 with type t = usize, type Output0.output = Index2.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = usize, - predicate HasValue0.has_value = Index2.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = usize, - predicate InBounds0.in_bounds = Index2.in_bounds - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy6 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, type ModelTy0.modelTy = Model16.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model17 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global), - function Model1.model = IdxIn0.model - clone CreusotContracts_Logic_Model_Impl0_Model as Model16 with type t = Type.alloc_vec_vec (Type.creusat_lit_lit) (Type.alloc_alloc_global), - function Model0.model = IdxIn0.model - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy5 with type t = bool - clone Core_Slice_Index_Impl2_Output as Output0 with type t = bool, type Output0.output = IndexMut0.output - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = bool, - predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = bool, - predicate HasValue0.has_value = IndexMut0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = bool, - predicate InBounds0.in_bounds = IndexMut0.in_bounds - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve4 with type t = Type.alloc_vec_vec usize (Type.alloc_alloc_global) - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve3 with type t = usize - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global) - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_clause_clause - clone CreuSat_Trail_Impl0_DecisionLevel_Interface as DecisionLevel0 - clone Alloc_Vec_Impl16_Index_Interface as Index2 with type t = usize, type i = usize, type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl1_Push_Interface as Push1 with type t = Type.creusat_lit_lit, type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl1_Push_Interface as Push0 with type t = usize, type a = Type.alloc_alloc_global - clone CreuSat_ConflictAnalysis_IdxIn_Interface as IdxIn0 - clone CreuSat_Lit_Impl1_Index_Interface as Index1 - clone CreuSat_Clause_Impl0_Index_Interface as Index0 - clone CreuSat_Clause_Impl3_Len_Interface as Len0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = bool - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = bool, type i = usize, - type a = Type.alloc_alloc_global - clone CreuSat_Clause_Impl3_RemoveFromClause_Interface as RemoveFromClause0 - let rec cfg resolve [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 55 0 58 1] (_f : Type.creusat_formula_formula) (c : borrowed (Type.creusat_clause_clause)) (o : Type.creusat_clause_clause) (idx : usize) (c_idx : usize) (trail : Type.creusat_trail_trail) (seen : borrowed (Type.alloc_vec_vec bool (Type.alloc_alloc_global))) (path_c : borrowed usize) (to_bump : borrowed (Type.alloc_vec_vec usize (Type.alloc_alloc_global))) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 32 0 32 27] Invariant0.invariant' _f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 33 0 33 33] Invariant1.invariant' trail _f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 34 0 34 32] UInt64.to_int idx < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 35 0 35 30] InFormula0.in_formula o _f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 36 0 39 2] UInt64.to_int c_idx < Seq.length (Model0.model c) && IndexLogic0.index_logic (Seq.get (Model0.model c) (UInt64.to_int c_idx)) = UInt64.to_int idx && IsOpp0.is_opp (Seq.get (Model1.model o) 0) (Seq.get (Model0.model c) (UInt64.to_int c_idx))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 40 0 40 54] SameIdxSamePolarityExcept0.same_idx_same_polarity_except ( * c) o (UInt64.to_int idx)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 42 0 42 96] forall j : (int) . 1 <= j && j < Seq.length (Model1.model o) -> UnsatInner0.unsat_inner (Seq.get (Model1.model o) j) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 43 0 43 50] SatInner0.sat_inner (Seq.get (Model1.model o) 0) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 44 0 44 49] Model3.model path_c > 0 && Model3.model path_c <= Seq.length (Model0.model c)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 47 0 47 42] Seq.length (Model4.model seen) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 49 0 49 52] ElemsLessThan0.elems_less_than (Model5.model to_bump) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 51 0 51 49] EquisatExtensionInner0.equisat_extension_inner ( * c) (Model6.model _f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 52 0 52 46] ClauseIsSeen0.clause_is_seen ( * c) ( * seen)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 53 0 53 46] Unsat0.unsat ( * c) (Type.creusat_trail_trail_Trail_assignments trail)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 54 0 54 45] Invariant2.invariant' ( * c) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 45 0 45 35] UInt64.to_int ( ^ path_c) <= Seq.length (Model7.model ( ^ c)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 48 0 48 42] Seq.length (Model8.model ( ^ seen)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 50 0 50 52] ElemsLessThan0.elems_less_than (Model9.model ( ^ to_bump)) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 51 0 51 49] EquisatExtensionInner0.equisat_extension_inner ( ^ c) (Model6.model _f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 52 0 52 46] ClauseIsSeen0.clause_is_seen ( ^ c) ( ^ seen) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 53 0 53 46] Unsat0.unsat ( ^ c) (Type.creusat_trail_trail_Trail_assignments trail) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 54 0 54 45] Invariant2.invariant' ( ^ c) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } + predicate not_satisfiable (self : Type.creusat_formula_formula) +end +module CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable + use Type + use seq.Seq + use mach.int.Int + use mach.int.Int32 + clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension_Interface as EquisatExtension0 + clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 + predicate not_satisfiable [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 175 4 175 40] (self : Type.creusat_formula_formula) = - var _0 : (); - var _f_1 : Type.creusat_formula_formula; - var c_2 : borrowed (Type.creusat_clause_clause); - var o_3 : Type.creusat_clause_clause; - var idx_4 : usize; - var c_idx_5 : usize; - var trail_6 : Type.creusat_trail_trail; - var seen_7 : borrowed (Type.alloc_vec_vec bool (Type.alloc_alloc_global)); - var path_c_8 : borrowed usize; - var to_bump_9 : borrowed (Type.alloc_vec_vec usize (Type.alloc_alloc_global)); - ghost var old_c_10 : borrowed (Type.creusat_clause_clause); - var _11 : (); - ghost var old_seen_12 : borrowed (Type.alloc_vec_vec bool (Type.alloc_alloc_global)); - var _13 : (); - ghost var old_path_c_14 : borrowed usize; - var _15 : (); - ghost var old_to_bump_16 : borrowed (Type.alloc_vec_vec usize (Type.alloc_alloc_global)); - var _17 : (); - var _18 : (); - var _19 : (); - var _20 : borrowed (Type.creusat_clause_clause); - var _21 : usize; - var _22 : Type.creusat_formula_formula; - var _23 : borrowed bool; - var _24 : borrowed (Type.alloc_vec_vec bool (Type.alloc_alloc_global)); - var _25 : usize; - var _26 : (); - var _27 : (); - ghost var old_c2_28 : borrowed (Type.creusat_clause_clause); - var _29 : (); - var _30 : (); - var _31 : (); - var _32 : (); - var i_33 : usize; - var _34 : (); - var _35 : (); - var _36 : bool; - var _37 : usize; - var _38 : usize; - var _39 : Type.creusat_clause_clause; - ghost var old_c3_40 : borrowed (Type.creusat_clause_clause); - var _41 : (); - var _42 : (); - var _43 : (); - var _44 : bool; - var _45 : Type.alloc_vec_vec (Type.creusat_lit_lit) (Type.alloc_alloc_global); - var _46 : Type.alloc_vec_vec (Type.creusat_lit_lit) (Type.alloc_alloc_global); - var _47 : usize; - var _48 : Type.creusat_lit_lit; - var _49 : Type.creusat_lit_lit; - var _50 : Type.creusat_clause_clause; - var _51 : usize; - var _52 : Type.alloc_vec_vec bool (Type.alloc_alloc_global); - var _53 : borrowed (Type.alloc_vec_vec bool (Type.alloc_alloc_global)); - var _54 : (); - var _55 : (); - var _56 : borrowed bool; - var _57 : borrowed (Type.alloc_vec_vec bool (Type.alloc_alloc_global)); - var _58 : usize; - var _59 : Type.creusat_lit_lit; - var _60 : Type.creusat_lit_lit; - var _61 : Type.creusat_clause_clause; - var _62 : usize; - var _63 : (); - var _64 : borrowed (Type.alloc_vec_vec usize (Type.alloc_alloc_global)); - var _65 : usize; - var _66 : Type.creusat_lit_lit; - var _67 : Type.creusat_lit_lit; - var _68 : Type.creusat_clause_clause; - var _69 : usize; - var _70 : (); - var _71 : borrowed (Type.alloc_vec_vec (Type.creusat_lit_lit) (Type.alloc_alloc_global)); - var _72 : Type.creusat_lit_lit; - var _73 : Type.creusat_lit_lit; - var _74 : Type.creusat_clause_clause; - var _75 : usize; - var _76 : (); - var _77 : bool; - var _78 : usize; - var _79 : usize; - var _80 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _81 : usize; - var _82 : Type.creusat_lit_lit; - var _83 : Type.creusat_lit_lit; - var _84 : Type.creusat_clause_clause; - var _85 : usize; - var _86 : usize; - var _87 : Type.creusat_trail_trail; - var _88 : (); - var _89 : (); - var _90 : (); - var _91 : (); - var _92 : (); - var _93 : (); - var _94 : (); - var _95 : (); - { - _f_1 <- _f; - c_2 <- c; - o_3 <- o; - idx_4 <- idx; - c_idx_5 <- c_idx; - trail_6 <- trail; - seen_7 <- seen; - path_c_8 <- path_c; - to_bump_9 <- to_bump; - goto BB0 - } - BB0 { - _11 <- (); - old_c_10 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 59 16 59 25] c_2); - goto BB1 - } - BB1 { - _13 <- (); - old_seen_12 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 60 19 60 31] seen_7); - goto BB2 - } - BB2 { - _15 <- (); - old_path_c_14 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 61 21 61 35] path_c_8); - goto BB3 - } - BB3 { - _17 <- (); - old_to_bump_16 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 62 22 62 37] to_bump_9); - goto BB4 - } - BB4 { - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 64 4 64 42] ClauseIsSeen0.clause_is_seen ( * c_2) ( * seen_7) }; - _18 <- (); - _20 <- borrow_mut ( * c_2); - c_2 <- { c_2 with current = ( ^ _20) }; - _21 <- c_idx_5; - _22 <- _f_1; - _19 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 66 4 66 35] RemoveFromClause0.remove_from_clause _20 _21 _22); - goto BB5 - } - BB5 { - path_c_8 <- { path_c_8 with current = ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 68 4 68 16] * path_c_8 - (1 : usize)) }; - _24 <- borrow_mut ( * seen_7); - seen_7 <- { seen_7 with current = ( ^ _24) }; - _25 <- idx_4; - _23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 69 4 69 13] IndexMut0.index_mut _24 _25); - goto BB6 - } - BB6 { - _23 <- { _23 with current = false }; - assume { Resolve0.resolve _23 }; - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 71 4 71 45] ^ seen_7 = ^ old_seen_12 }; - _26 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 72 4 72 42] ClauseIsSeen0.clause_is_seen ( * c_2) ( * seen_7) }; - _27 <- (); - _29 <- (); - old_c2_28 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 73 17 73 26] c_2); - goto BB7 - } - BB7 { - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 74 4 74 47] not LitIn0.lit_in (Seq.get (Model0.model old_c_10) (UInt64.to_int c_idx_5)) ( * c_2) }; - _30 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 75 4 75 39] ^ c_2 = ^ old_c_10 }; - _31 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 76 4 77 50] forall j : (int) . 0 <= j && j < Seq.length (Model0.model old_c_10) && j <> UInt64.to_int c_idx_5 -> LitIn0.lit_in (Seq.get (Model0.model old_c_10) j) ( * c_2) }; - _32 <- (); - i_33 <- (1 : usize); - goto BB8 - } - BB8 { - invariant inv { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 81 4 81 48] Invariant2.invariant' ( * c_2) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f_1)) }; - invariant all_unsat { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 82 4 82 55] Unsat0.unsat ( * c_2) (Type.creusat_trail_trail_Trail_assignments trail_6) }; - invariant i_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 83 4 83 54] 1 <= UInt64.to_int i_33 && UInt64.to_int i_33 <= Seq.length (Model1.model o_3) }; - invariant not_in { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 84 4 84 77] not LitIn0.lit_in (Seq.get (Model0.model old_c_10) (UInt64.to_int c_idx_5)) ( * c_2) && not LitIn0.lit_in (Seq.get (Model1.model o_3) 0) ( * c_2) }; - invariant all_in { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 85 4 85 80] forall j : (int) . 1 <= j && j < UInt64.to_int i_33 -> LitIn0.lit_in (Seq.get (Model1.model o_3) j) ( * c_2) }; - invariant all_in2 { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 86 4 87 51] forall j : (int) . 0 <= j && j < Seq.length (Model0.model old_c_10) && j <> UInt64.to_int c_idx_5 -> LitIn0.lit_in (Seq.get (Model0.model old_c_10) j) ( * c_2) }; - invariant from_c_or_o { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 88 4 89 78] forall j : (int) . 0 <= j && j < Seq.length (Model0.model c_2) -> LitIn0.lit_in (Seq.get (Model0.model c_2) j) ( * old_c_10) || LitIn0.lit_in (Seq.get (Model0.model c_2) j) o_3 }; - invariant path_c_less { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 90 4 90 52] Model3.model path_c_8 <= Seq.length (Model0.model c_2) }; - invariant seen_is_clause { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 91 4 91 57] ClauseIsSeen0.clause_is_seen ( * c_2) ( * seen_7) }; - invariant seen_len { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 92 4 92 57] Seq.length (Model4.model seen_7) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f_1) }; - invariant elems_less { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 93 4 93 69] ElemsLessThan0.elems_less_than (Model5.model to_bump_9) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f_1)) }; - invariant proph_c { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 94 4 94 47] ^ c_2 = ^ old_c_10 }; - invariant proph_seen { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 95 4 95 56] ^ seen_7 = ^ old_seen_12 }; - invariant proph_path_c { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 96 4 96 62] ^ path_c_8 = ^ old_path_c_14 }; - invariant proph_to_bump { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 97 4 97 65] ^ to_bump_9 = ^ old_to_bump_16 }; - _37 <- i_33; - _39 <- o_3; - _38 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 98 14 98 21] Len0.len _39); - goto BB9 - } - BB9 { - _36 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 98 10 98 21] _37 < _38); - switch (_36) - | False -> goto BB33 - | _ -> goto BB10 - end - } - BB10 { - _41 <- (); - old_c3_40 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 99 21 99 30] c_2); - goto BB11 - } - BB11 { - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 100 8 100 44] ^ c_2 = ^ old_c3_40 }; - _42 <- (); - _46 <- Type.creusat_clause_clause_Clause_lits ( * c_2); - _45 <- _46; - _50 <- o_3; - _51 <- i_33; - _49 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 101 27 101 31] Index0.index _50 _51); - goto BB12 - } - BB12 { - _48 <- _49; - _47 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 101 27 101 39] Index1.index _48); - goto BB13 - } - BB13 { - _53 <- seen_7; - _52 <- * _53; - _44 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 101 11 101 47] IdxIn0.idx_in _45 _47 _52); - goto BB14 - } - BB14 { - switch (_44) - | False -> goto BB16 - | _ -> goto BB15 - end - } - BB15 { - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 103 12 103 46] LitIn0.lit_in (Seq.get (Model1.model o_3) (UInt64.to_int i_33)) ( * c_2) }; - _54 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 104 12 104 40] Model0.model c_2 = Model0.model old_c3_40 }; - _55 <- (); - _43 <- (); - goto BB32 - } - BB16 { - _57 <- borrow_mut ( * seen_7); - seen_7 <- { seen_7 with current = ( ^ _57) }; - _61 <- o_3; - _62 <- i_33; - _60 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 106 17 106 21] Index0.index _61 _62); - goto BB17 - } - BB17 { - _59 <- _60; - _58 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 106 17 106 29] Index1.index _59); - goto BB18 - } - BB18 { - _56 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 106 12 106 30] IndexMut0.index_mut _57 _58); - goto BB19 - } - BB19 { - _56 <- { _56 with current = true }; - assume { Resolve0.resolve _56 }; - _64 <- borrow_mut ( * to_bump_9); - to_bump_9 <- { to_bump_9 with current = ( ^ _64) }; - _68 <- o_3; - _69 <- i_33; - _67 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 107 25 107 29] Index0.index _68 _69); - goto BB20 - } - BB20 { - _66 <- _67; - _65 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 107 25 107 37] Index1.index _66); - goto BB21 - } - BB21 { - _63 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 107 12 107 38] Push0.push _64 _65); - goto BB22 - } - BB22 { - _71 <- borrow_mut (Type.creusat_clause_clause_Clause_lits ( * c_2)); - c_2 <- { c_2 with current = (let Type.CreuSat_Clause_Clause a b c d = * c_2 in Type.CreuSat_Clause_Clause a b c ( ^ _71)) }; - _74 <- o_3; - _75 <- i_33; - _73 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 108 24 108 28] Index0.index _74 _75); - goto BB23 - } - BB23 { - _72 <- _73; - _70 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 108 12 108 29] Push1.push _71 _72); - goto BB24 - } - BB24 { - _80 <- Type.creusat_trail_trail_Trail_lit_to_level trail_6; - _84 <- o_3; - _85 <- i_33; - _83 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 109 34 109 38] Index0.index _84 _85); - goto BB25 - } - BB25 { - _82 <- _83; - _81 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 109 34 109 46] Index1.index _82); - goto BB26 - } - BB26 { - _79 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 109 15 109 47] Index2.index _80 _81); - goto BB27 - } - BB27 { - _78 <- _79; - _87 <- trail_6; - _86 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 109 51 109 73] DecisionLevel0.decision_level _87); - goto BB28 - } - BB28 { - _77 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 109 15 109 73] _78 >= _86); - switch (_77) - | False -> goto BB30 - | _ -> goto BB29 - end - } - BB29 { - path_c_8 <- { path_c_8 with current = ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 110 16 110 28] * path_c_8 + (1 : usize)) }; - _76 <- (); - goto BB31 - } - BB30 { - _76 <- (); - goto BB31 - } - BB31 { - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 112 12 112 57] Model0.model c_2 = Seq.snoc (Model0.model old_c3_40) (Seq.get (Model1.model o_3) (UInt64.to_int i_33)) }; - _88 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 113 12 113 46] LitIn0.lit_in (Seq.get (Model1.model o_3) (UInt64.to_int i_33)) ( * c_2) }; - _89 <- (); - _43 <- (); - goto BB32 - } - BB32 { - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 115 8 116 38] forall j : (int) . 0 <= j && j < Seq.length (Model0.model old_c3_40) -> Seq.get (Model0.model old_c3_40) j = Seq.get (Model0.model c_2) j }; - _90 <- (); - i_33 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 117 8 117 14] i_33 + (1 : usize)); - _35 <- (); - goto BB8 - } - BB33 { - assume { Resolve1.resolve c_2 }; - assume { Resolve2.resolve seen_7 }; - assume { Resolve3.resolve path_c_8 }; - assume { Resolve4.resolve to_bump_9 }; - _34 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 119 4 119 64] ResolventOf0.resolvent_of ( * c_2) ( * old_c_10) o_3 0 (UInt64.to_int c_idx_5) }; - _94 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 120 4 120 111] let _ = LemmaResolventOfEquisatExtensionIsEquisat0.lemma_resolvent_of_equisat_extension_is_equisat (Model6.model _f_1) ( * old_c_10) o_3 ( * c_2) (UInt64.to_int c_idx_5) 0 in true }; - _95 <- (); - _0 <- (); - return _0 - } - + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 176 8 178 9] exists c : (Type.creusat_clause_clause) . Seq.length (Model0.model c) = 0 /\ EquisatExtension0.equisat_extension c self end -module CreuSat_ConflictAnalysis_ChooseLiteral_Interface +module Alloc_Vec_Impl0_New_Interface + type t use seq.Seq use mach.int.Int + use mach.int.Int32 + use Type + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = t, type a = Type.alloc_alloc_global, + axiom . + val new [@cfg:stackify] (_ : ()) : Type.alloc_vec_vec t (Type.alloc_alloc_global) + ensures { Seq.length (Model0.model result) = 0 } + +end +module CreuSat_Formula_Impl0_Index_Interface use mach.int.UInt64 + use seq.Seq + use mach.int.Int + use prelude.Prelude + use Type + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_formula_formula, + type ModelTy0.modelTy = ModelTy0.modelTy + val index [@cfg:stackify] (self : Type.creusat_formula_formula) (ix : usize) : Type.creusat_clause_clause + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 29 4 29 38] UInt64.to_int ix < Seq.length (let (a, _) = Model0.model self in a)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 30 4 30 41] Seq.get (let (a, _) = Model0.model self in a) (UInt64.to_int ix) = result } + +end +module CreusotContracts_Logic_Resolve_Resolve_Resolve_Interface + type self + predicate resolve (self : self) +end +module CreusotContracts_Logic_Resolve_Resolve_Resolve + type self + predicate resolve (self : self) +end +module CreusotContracts_Std1_Vec_Impl1_Resolve_Interface + type t + use Type + predicate resolve (self : Type.alloc_vec_vec t (Type.alloc_alloc_global)) +end +module CreusotContracts_Std1_Vec_Impl1_Resolve + type t use Type + use mach.int.Int + use mach.int.Int32 + use seq.Seq + clone CreusotContracts_Logic_Resolve_Resolve_Resolve_Interface as Resolve0 with type self = t + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = t, type a = Type.alloc_alloc_global, + axiom . + predicate resolve (self : Type.alloc_vec_vec t (Type.alloc_alloc_global)) = + forall i : (int) . 0 <= i /\ i < Seq.length (Model0.model self) -> Resolve0.resolve (Seq.get (Model0.model self) i) +end +module CreuSat_Logic_LogicUtil_SortedRangeTupleZeroth_Interface + use seq.Seq + use mach.int.Int + use prelude.Prelude + use mach.int.UInt64 + predicate sorted_range_tuple_zeroth (s : Seq.seq (usize, usize)) (l : int) (u : int) +end +module CreuSat_Logic_LogicUtil_SortedRangeTupleZeroth + use seq.Seq + use mach.int.Int + use prelude.Prelude + use mach.int.UInt64 + predicate sorted_range_tuple_zeroth [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 34 0 34 80] (s : Seq.seq (usize, usize)) (l : int) (u : int) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 35 4 37 5] forall j : (int) . forall i : (int) . l <= i /\ i < j /\ j < u -> (let (a, _) = Seq.get s i in a) <= (let (a, _) = Seq.get s j in a) +end +module CreuSat_Logic_LogicUtil_SortedTupleZeroth_Interface + use seq.Seq + use mach.int.Int + use prelude.Prelude + use mach.int.UInt64 + predicate sorted_tuple_zeroth (s : Seq.seq (usize, usize)) +end +module CreuSat_Logic_LogicUtil_SortedTupleZeroth + use seq.Seq + use mach.int.Int use prelude.Prelude + use mach.int.UInt64 use mach.int.Int32 - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy2 with type ModelTy0.modelTy = Model3.modelTy - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy1 with type t = bool, type a = Type.alloc_alloc_global, - type ModelTy0.modelTy = Model2.modelTy - clone CreusotContracts_Logic_Int_Impl18_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - clone CreuSat_Logic_LogicLit_Impl1_IsOpp_Interface as IsOpp0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model3 with type t = Type.creusat_clause_clause - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model2 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global) - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = usize - clone CreuSat_Logic_LogicClause_Impl2_Unsat_Interface as Unsat0 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant0 - val choose_literal [@cfg:stackify] (c : Type.creusat_clause_clause) (trail : Type.creusat_trail_trail) (i : borrowed usize) (_f : Type.creusat_formula_formula) (seen : Type.alloc_vec_vec bool (Type.alloc_alloc_global)) : Type.core_option_option usize - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 125 0 125 33] Invariant0.invariant' trail _f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 126 0 126 39] Unsat0.unsat c (Type.creusat_trail_trail_Trail_assignments trail)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 127 0 127 39] Model0.model i <= Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail trail))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 128 0 128 42] Seq.length (Model2.model seen) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 129 0 137 3] match (result) with - | Type.Core_Option_Option_Some r -> UInt64.to_int r < Seq.length (Model3.model c) && IsOpp0.is_opp (Seq.get (Model3.model c) (UInt64.to_int r)) (Type.creusat_trail_step_Step_lit (Seq.get (Model1.model (Type.creusat_trail_trail_Trail_trail trail)) (UInt64.to_int ( ^ i)))) && IndexLogic0.index_logic (Seq.get (Model3.model c) (UInt64.to_int r)) = IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit (Seq.get (Model1.model (Type.creusat_trail_trail_Trail_trail trail)) (UInt64.to_int ( ^ i)))) && UInt64.to_int ( ^ i) < Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail trail)) - | Type.Core_Option_Option_None -> UInt64.to_int ( ^ i) = 0 - end } + clone CreuSat_Logic_LogicUtil_SortedRangeTupleZeroth_Interface as SortedRangeTupleZeroth0 + predicate sorted_tuple_zeroth [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 41 0 41 58] (s : Seq.seq (usize, usize)) + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 42 4 44 5] SortedRangeTupleZeroth0.sorted_range_tuple_zeroth s 0 (Seq.length s) +end +module CreusotContracts_Logic_Seq_Impl2_PermutationOf_Interface + type t + use seq.Seq + predicate permutation_of (self : Seq.seq t) (o : Seq.seq t) +end +module CreusotContracts_Logic_Seq_Impl2_PermutationOf + type t + use seq.Seq + use mach.int.Int + use mach.int.Int32 + use seq.Permut + predicate permutation_of (self : Seq.seq t) (o : Seq.seq t) = + Permut.permut self o 0 (Seq.length self) end -module CreuSat_ConflictAnalysis_ChooseLiteral +module CreuSat_Logic_LogicUtil_Partition_Interface use seq.Seq use mach.int.Int + use prelude.Prelude use mach.int.UInt64 - use Type + predicate partition (v : Seq.seq (usize, usize)) (i : int) +end +module CreuSat_Logic_LogicUtil_Partition + use seq.Seq + use mach.int.Int use prelude.Prelude + use mach.int.UInt64 use mach.int.Int32 - use prelude.UInt8 - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = IsOpp0.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner1.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = Invariant3.index_logic, function IndexLogic0.index_logic = SatInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = IsOpp0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner1.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model11 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model8.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model8 with function Model0.model = Model3.model, - function Model0.model = UnsatInner0.model, function Model1.model = UnitAreSat0.model, - function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, - function Model1.model = Invariant4.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model3.model = InvariantNoDecisionMirror0.model, - function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant4.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant4 with predicate Invariant1.invariant' = Invariant2.invariant' - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = Invariant2.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner1 with predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner, - predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model5.model, axiom . - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model5 with function Model0.model = Unsat0.model, - function Model2.model = InvariantNoDecision0.model, function Model0.model = InvariantNoDecisionMirror0.model, - function Model0.model = Invariant1.model, function Model1.model = TrailEntriesAreAssigned0.model, - function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant0.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant0.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy2 with type ModelTy0.modelTy = Model3.modelTy - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = bool, type a = Type.alloc_alloc_global, - function Model0.model = Model2.model, axiom . - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy1 with type t = bool, type a = Type.alloc_alloc_global, - type ModelTy0.modelTy = Model2.modelTy - clone CreusotContracts_Logic_Int_Impl18_Model as Model6 with function Model0.model = Model0.model - clone CreusotContracts_Logic_Int_Impl18_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant0.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant0.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicLit_Impl1_IsOpp as IsOpp0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model3 with type t = Type.creusat_clause_clause - clone CreusotContracts_Logic_Model_Impl0_Model as Model2 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global) - clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = usize - clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat0 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant0 - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy4 with type t = bool - clone Core_Slice_Index_Impl2_Output as Output1 with type t = bool, type Output0.output = Index2.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = bool, - predicate HasValue0.has_value = Index2.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = bool, - predicate InBounds0.in_bounds = Index2.in_bounds - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy3 with type t = Type.creusat_trail_step - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_trail_step, - type Output0.output = Index0.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_trail_step, - predicate HasValue0.has_value = Index0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_trail_step, - predicate InBounds0.in_bounds = Index0.in_bounds - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = usize - clone CreuSat_Clause_Impl0_Index_Interface as Index3 - clone CreuSat_Clause_Impl3_Len_Interface as Len0 - clone Alloc_Vec_Impl16_Index_Interface as Index2 with type t = bool, type i = usize, type a = Type.alloc_alloc_global - clone CreuSat_Lit_Impl1_Index_Interface as Index1 - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.creusat_trail_step, type i = usize, - type a = Type.alloc_alloc_global - let rec cfg choose_literal [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 138 0 138 108] (c : Type.creusat_clause_clause) (trail : Type.creusat_trail_trail) (i : borrowed usize) (_f : Type.creusat_formula_formula) (seen : Type.alloc_vec_vec bool (Type.alloc_alloc_global)) : Type.core_option_option usize - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 125 0 125 33] Invariant0.invariant' trail _f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 126 0 126 39] Unsat0.unsat c (Type.creusat_trail_trail_Trail_assignments trail)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 127 0 127 39] Model0.model i <= Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail trail))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 128 0 128 42] Seq.length (Model2.model seen) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 129 0 137 3] match (result) with - | Type.Core_Option_Option_Some r -> UInt64.to_int r < Seq.length (Model3.model c) && IsOpp0.is_opp (Seq.get (Model3.model c) (UInt64.to_int r)) (Type.creusat_trail_step_Step_lit (Seq.get (Model1.model (Type.creusat_trail_trail_Trail_trail trail)) (UInt64.to_int ( ^ i)))) && IndexLogic0.index_logic (Seq.get (Model3.model c) (UInt64.to_int r)) = IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit (Seq.get (Model1.model (Type.creusat_trail_trail_Trail_trail trail)) (UInt64.to_int ( ^ i)))) && UInt64.to_int ( ^ i) < Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail trail)) - | Type.Core_Option_Option_None -> UInt64.to_int ( ^ i) = 0 - end } + predicate partition [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 48 0 48 56] (v : Seq.seq (usize, usize)) (i : int) = - var _0 : Type.core_option_option usize; - var c_1 : Type.creusat_clause_clause; - var trail_2 : Type.creusat_trail_trail; - var i_3 : borrowed usize; - var _f_4 : Type.creusat_formula_formula; - var seen_5 : Type.alloc_vec_vec bool (Type.alloc_alloc_global); - ghost var old_i_6 : borrowed usize; - var _7 : (); - var _8 : (); - var _9 : (); - var _10 : bool; - var _11 : usize; - var _12 : bool; - var _13 : bool; - var _14 : Type.alloc_vec_vec bool (Type.alloc_alloc_global); - var _15 : usize; - var _16 : Type.creusat_lit_lit; - var _17 : Type.creusat_trail_step; - var _18 : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global); - var _19 : usize; - var k_20 : usize; - var _21 : bool; - var _22 : usize; - var _23 : usize; - var _24 : Type.creusat_clause_clause; - var _25 : (); - var _26 : bool; - var _27 : usize; - var _28 : Type.creusat_lit_lit; - var _29 : Type.creusat_trail_step; - var _30 : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global); - var _31 : usize; - var _32 : usize; - var _33 : Type.creusat_lit_lit; - var _34 : Type.creusat_lit_lit; - var _35 : Type.creusat_clause_clause; - var _36 : usize; - var _37 : (); - var _38 : usize; - var _39 : (); - var _40 : (); - var _41 : (); - var _42 : (); - var _43 : (); - var _44 : (); - { - c_1 <- c; - trail_2 <- trail; - i_3 <- i; - _f_4 <- _f; - seen_5 <- seen; - goto BB0 - } - BB0 { - _7 <- (); - old_i_6 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 139 16 139 26] i_3); - goto BB1 - } - BB1 { - goto BB2 - } - BB2 { - invariant i_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 140 4 140 64] 0 <= Model0.model i_3 && Model0.model i_3 <= Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail trail_2)) }; - invariant proph_i { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 141 4 141 47] ^ i_3 = ^ old_i_6 }; - _11 <- * i_3; - _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 142 10 142 16] _11 > (0 : usize)); - switch (_10) - | False -> goto BB20 - | _ -> goto BB3 - end - } - BB3 { - i_3 <- { i_3 with current = ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 143 8 143 15] * i_3 - (1 : usize)) }; - _14 <- seen_5; - _18 <- Type.creusat_trail_trail_Trail_trail trail_2; - _19 <- * i_3; - _17 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 144 16 144 31] Index0.index _18 _19); - goto BB4 - } - BB4 { - _16 <- Type.creusat_trail_step_Step_lit _17; - _15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 144 16 144 43] Index1.index _16); - goto BB5 - } - BB5 { - _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 144 11 144 44] Index2.index _14 _15); - goto BB6 - } - BB6 { - _12 <- _13; - switch (_12) - | False -> goto BB18 - | _ -> goto BB7 - end - } - BB7 { - k_20 <- (0 : usize); - goto BB8 - } - BB8 { - invariant i_bound2 { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 146 12 146 72] 0 <= Model0.model i_3 && Model0.model i_3 < Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail trail_2)) }; - invariant k_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 147 12 147 62] 0 <= UInt64.to_int k_20 && UInt64.to_int k_20 <= Seq.length (Model3.model c_1) }; - invariant proph_i2 { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 148 12 148 56] ^ i_3 = ^ old_i_6 }; - _22 <- k_20; - _24 <- c_1; - _23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 149 22 149 29] Len0.len _24); - goto BB9 - } - BB9 { - _21 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 149 18 149 29] _22 < _23); - switch (_21) - | False -> goto BB17 - | _ -> goto BB10 - end - } - BB10 { - _30 <- Type.creusat_trail_trail_Trail_trail trail_2; - _31 <- * i_3; - _29 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 150 19 150 34] Index0.index _30 _31); - goto BB11 - } - BB11 { - _28 <- Type.creusat_trail_step_Step_lit _29; - _27 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 150 19 150 46] Index1.index _28); - goto BB12 - } - BB12 { - _35 <- c_1; - _36 <- k_20; - _34 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 150 50 150 54] Index3.index _35 _36); - goto BB13 - } - BB13 { - _33 <- _34; - _32 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 150 50 150 62] Index1.index _33); - goto BB14 - } - BB14 { - _26 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 150 19 150 62] _27 = _32); - switch (_26) - | False -> goto BB16 - | _ -> goto BB15 - end - } - BB15 { - assume { Resolve0.resolve i_3 }; - _38 <- k_20; - _0 <- Type.Core_Option_Option_Some _38; - goto BB21 - } - BB16 { - _25 <- (); - k_20 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 153 16 153 22] k_20 + (1 : usize)); - _9 <- (); - goto BB8 - } - BB17 { - _9 <- (); - goto BB19 - } - BB18 { - _9 <- (); - goto BB19 - } - BB19 { - goto BB2 - } - BB20 { - assume { Resolve0.resolve i_3 }; - _8 <- (); - _0 <- Type.Core_Option_Option_None; - goto BB21 - } - BB21 { - return _0 - } - + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 49 4 49 109] forall k2 : (int) . forall k1 : (int) . 0 <= k1 /\ k1 < i /\ i <= k2 /\ k2 < Seq.length v -> (let (a, _) = Seq.get v k1 in a) <= (let (a, _) = Seq.get v k2 in a) end -module CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface - use Type - use mach.int.Int - predicate invariant' (self : Type.creusat_decision_decisions) (n : int) -end -module CreuSat_Logic_LogicDecision_Impl0_Invariant +module CreuSat_Util_Sort_Interface + use prelude.Prelude use Type use mach.int.Int - use seq.Seq use mach.int.UInt64 - use prelude.Prelude - use mach.int.Int32 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_decision_node, + clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy0 with type t = (usize, usize), + type a = Type.alloc_alloc_global + clone CreusotContracts_Logic_Seq_Impl2_PermutationOf_Interface as PermutationOf0 with type t = (usize, usize) + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model1 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global), + type ModelTy0.modelTy = ModelTy0.modelTy + clone CreuSat_Logic_LogicUtil_SortedTupleZeroth_Interface as SortedTupleZeroth0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = (usize, usize), type a = Type.alloc_alloc_global, axiom . - predicate invariant' [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_decision.rs" 9 4 9 42] (self : Type.creusat_decision_decisions) (n : int) + val sort [@cfg:stackify] (v : borrowed (Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global))) : () + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 60 0 60 36] SortedTupleZeroth0.sorted_tuple_zeroth (Model0.model ( ^ v)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 61 0 61 36] PermutationOf0.permutation_of (Model0.model ( ^ v)) (Model1.model v) } - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_decision.rs" 10 8 17 9] Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) = n && (UInt64.to_int (Type.creusat_decision_decisions_Decisions_search self) < Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) || UInt64.to_int (Type.creusat_decision_decisions_Decisions_search self) = 18446744073709551615) && UInt64.to_int (Type.creusat_decision_decisions_Decisions_start self) < Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) -> (UInt64.to_int (Type.creusat_decision_node_Node_next (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) i)) = 18446744073709551615 || UInt64.to_int (Type.creusat_decision_node_Node_next (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) i)) < n) && (UInt64.to_int (Type.creusat_decision_node_Node_prev (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) i)) = 18446744073709551615 || UInt64.to_int (Type.creusat_decision_node_Node_prev (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list self)) i)) < n)) -end -module CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface - use Type - predicate not_satisfiable (self : Type.creusat_formula_formula) end -module CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable - use Type +module CreuSat_Decision_Impl1_Rescore_Interface + use mach.int.UInt64 use seq.Seq use mach.int.Int + use prelude.Prelude use mach.int.Int32 - clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension_Interface as EquisatExtension0 - clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 - predicate not_satisfiable [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 175 4 175 40] (self : Type.creusat_formula_formula) + use Type + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_decision_node, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant0 + val rescore [@cfg:stackify] (self : borrowed (Type.creusat_decision_decisions)) (_f : Type.creusat_formula_formula) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 130 4 130 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 131 4 131 56] Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self))) < 18446744073709551615} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 130 4 130 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 132 4 132 67] UInt64.to_int (Type.creusat_decision_decisions_Decisions_timestamp ( ^ self)) = Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self))) + 1 } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 133 4 133 73] Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( ^ self))) = Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self))) } - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 176 8 178 9] exists c : (Type.creusat_clause_clause) . Seq.length (Model0.model c) = 0 && EquisatExtension0.equisat_extension c self end -module Alloc_Vec_Impl0_New_Interface - type t - use seq.Seq +module CreuSat_Decision_Impl1_MoveToFront_Interface + use mach.int.UInt64 use mach.int.Int - use mach.int.Int32 + use prelude.Prelude + use seq.Seq use Type - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = t, type a = Type.alloc_alloc_global, - axiom . - val new [@cfg:stackify] (_ : ()) : Type.alloc_vec_vec t (Type.alloc_alloc_global) - ensures { Seq.length (Model0.model result) = 0 } + clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_decision_node, + type a = Type.alloc_alloc_global, axiom . + val move_to_front [@cfg:stackify] (self : borrowed (Type.creusat_decision_decisions)) (tomove : usize) (_f : Type.creusat_formula_formula) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 160 4 160 43] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f) < 18446744073709551615} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 161 4 161 52] UInt64.to_int tomove < Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 162 4 162 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 162 4 162 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } end -module Alloc_Vec_Impl0_New +module CreusotContracts_Std1_Vec_Impl1 type t - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use Type - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = t, type a = Type.alloc_alloc_global, - axiom . - val new [@cfg:stackify] (_ : ()) : Type.alloc_vec_vec t (Type.alloc_alloc_global) - ensures { Seq.length (Model0.model result) = 0 } - end -module CreuSat_Formula_Impl0_Index_Interface +module CreusotContracts_Logic_Resolve_Impl0_Resolve_Interface + type t1 + type t2 + predicate resolve (self : (t1, t2)) +end +module CreusotContracts_Logic_Resolve_Impl0_Resolve + type t1 + type t2 + clone CreusotContracts_Logic_Resolve_Resolve_Resolve_Interface as Resolve1 with type self = t2 + clone CreusotContracts_Logic_Resolve_Resolve_Resolve_Interface as Resolve0 with type self = t1 + predicate resolve (self : (t1, t2)) = + Resolve0.resolve (let (a, _) = self in a) /\ Resolve1.resolve (let (_, a) = self in a) +end +module CreusotContracts_Logic_Resolve_Impl0 + type t1 + type t2 +end +module CreusotContracts_Logic_Resolve_Impl2_Resolve_Interface + type t + predicate resolve (self : t) +end +module CreusotContracts_Logic_Resolve_Impl2_Resolve + type t + predicate resolve (self : t) = + true +end +module CreusotContracts_Logic_Resolve_Impl2 + type t +end +module CreuSat_Decision_Impl1_IncrementAndMove_Interface use mach.int.UInt64 - use seq.Seq use mach.int.Int use prelude.Prelude use Type - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_formula_formula - val index [@cfg:stackify] (self : Type.creusat_formula_formula) (ix : usize) : Type.creusat_clause_clause - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 29 4 29 38] UInt64.to_int ix < Seq.length (let (a, _) = Model0.model self in a)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 30 4 30 41] Seq.get (let (a, _) = Model0.model self in a) (UInt64.to_int ix) = result } + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + clone CreuSat_Logic_LogicUtil_ElemsLessThan_Interface as ElemsLessThan0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = usize, type a = Type.alloc_alloc_global, + axiom . + val increment_and_move [@cfg:stackify] (self : borrowed (Type.creusat_decision_decisions)) (f : Type.creusat_formula_formula) (v : Type.alloc_vec_vec usize (Type.alloc_alloc_global)) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 199 4 199 49] ElemsLessThan0.elems_less_than (Model0.model v) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 200 4 200 42] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < 18446744073709551615} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 201 4 201 30] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 202 4 202 51] Invariant1.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 202 4 202 51] Invariant1.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } end -module CreuSat_Formula_Impl0_Index - use mach.int.UInt64 - use seq.Seq +module CreuSat_Formula_Impl0_Output + use Type + type output = + Type.creusat_clause_clause +end +module CreuSat_Formula_Impl0 + use Type use mach.int.Int use prelude.Prelude - use Type + use mach.int.UInt64 clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_formula_formula - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_clause_clause - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause, - type Output0.output = Index0.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause, - predicate HasValue0.has_value = Index0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause, - predicate InBounds0.in_bounds = Index0.in_bounds - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.creusat_clause_clause, type i = usize, - type a = Type.alloc_alloc_global - let rec cfg index [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 31 4 31 41] (self : Type.creusat_formula_formula) (ix : usize) : Type.creusat_clause_clause - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 29 4 29 38] UInt64.to_int ix < Seq.length (let (a, _) = Model0.model self in a)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 30 4 30 41] Seq.get (let (a, _) = Model0.model self in a) (UInt64.to_int ix) = result } - - = - var _0 : Type.creusat_clause_clause; - var self_1 : Type.creusat_formula_formula; - var ix_2 : usize; - var _3 : Type.creusat_clause_clause; - var _4 : Type.creusat_clause_clause; - var _5 : Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global); - var _6 : usize; - { - self_1 <- self; - ix_2 <- ix; - goto BB0 - } - BB0 { - _5 <- Type.creusat_formula_formula_Formula_clauses self_1; - _6 <- ix_2; - _4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 37 9 37 25] Index0.index _5 _6); - goto BB1 - } - BB1 { - _3 <- _4; - _0 <- _3; - return _0 - } - -end -module CreusotContracts_Logic_Resolve_Resolve_Resolve_Interface - type self - predicate resolve (self : self) + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Model2.model + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 + clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_formula_formula, + type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model + clone CreuSat_Formula_Impl0_Output as Output0 + clone CreuSat_Formula_Impl0_Index_Interface as Index0 with function Model0.model = Model0.model + clone Core_Ops_Index_Index_Index_Interface as Index1 with type self = Type.creusat_formula_formula, type idx = usize, + val index = Index0.index, type Output0.output = Output0.output + clone Core_Ops_Index_Index_Output as Output1 with type self = Type.creusat_formula_formula, type idx = usize, + type output = Output0.output end -module CreusotContracts_Logic_Resolve_Resolve_Resolve +module CreusotContracts_Std1_Clone_Clone_Clone_Interface type self - predicate resolve (self : self) + use prelude.Prelude + val clone' [@cfg:stackify] (self : self) : self + ensures { result = self } + end -module CreusotContracts_Std1_Vec_Impl1_Resolve_Interface - type t +module CreuSat_Clause_Impl2 use Type - predicate resolve (self : Type.alloc_vec_vec t (Type.alloc_alloc_global)) + clone CreuSat_Clause_Impl2_Clone_Interface as Clone0 + clone CreusotContracts_Std1_Clone_Clone_Clone_Interface as Clone1 with type self = Type.creusat_clause_clause, + val clone' = Clone0.clone' end -module CreusotContracts_Std1_Vec_Impl1_Resolve - type t - use Type +module CreuSat_ConflictAnalysis_AnalyzeConflict_Interface + use mach.int.UInt64 use mach.int.Int - use mach.int.Int32 + use prelude.Prelude use seq.Seq - clone CreusotContracts_Logic_Resolve_Resolve_Resolve_Interface as Resolve0 with type self = t - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = t, type a = Type.alloc_alloc_global, + use Type + use mach.int.Int32 + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicClause_EquisatExtensionInner_Interface as EquisatExtensionInner0 + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model2 with type t = Type.creusat_formula_formula, + type ModelTy0.modelTy = ModelTy0.modelTy + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner_Interface as NoDuplicateIndexesInner0 + clone CreuSat_Logic_LogicClause_VarsInRangeInner_Interface as VarsInRangeInner0 + clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 + clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant3 + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface as NotSatisfiable0 + clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant2 + clone CreuSat_Logic_LogicClause_Impl2_Unsat_Interface as Unsat0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, axiom . - predicate resolve (self : Type.alloc_vec_vec t (Type.alloc_alloc_global)) = - forall i : (int) . 0 <= i && i < Seq.length (Model0.model self) -> Resolve0.resolve (Seq.get (Model0.model self) i) + val analyze_conflict [@cfg:stackify] (f : Type.creusat_formula_formula) (trail : Type.creusat_trail_trail) (cref : usize) (d : borrowed (Type.creusat_decision_decisions)) : Type.creusat_conflictanalysis_conflict + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 161 0 161 26] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 162 0 162 38] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < 18446744073709551615} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 163 0 163 32] Invariant1.invariant' trail f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 164 0 164 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 165 0 165 57] Unsat0.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)) (Type.creusat_trail_trail_Trail_assignments trail)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 191 0 191 44] Invariant2.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 166 0 190 3] match (result) with + | Type.CreuSat_ConflictAnalysis_Conflict_Ground -> NotSatisfiable0.not_satisfiable f + | Type.CreuSat_ConflictAnalysis_Conflict_Unit clause -> Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) /\ Seq.length (Model1.model clause) = 1 /\ VarsInRangeInner0.vars_in_range_inner (Model1.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) /\ NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model clause) /\ EquisatExtensionInner0.equisat_extension_inner clause (Model2.model f) + | Type.CreuSat_ConflictAnalysis_Conflict_Learned s_idx clause -> Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) /\ Seq.length (Model1.model clause) > 1 /\ VarsInRangeInner0.vars_in_range_inner (Model1.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) /\ NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model clause) /\ EquisatExtensionInner0.equisat_extension_inner clause (Model2.model f) /\ UInt64.to_int s_idx < Seq.length (Model1.model clause) + | Type.CreuSat_ConflictAnalysis_Conflict_Restart clause -> Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) /\ Seq.length (Model1.model clause) > 1 /\ VarsInRangeInner0.vars_in_range_inner (Model1.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) /\ NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model clause) /\ EquisatExtensionInner0.equisat_extension_inner clause (Model2.model f) + end } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 191 0 191 44] Invariant2.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } + end -module CreuSat_Logic_LogicUtil_SortedRangeTupleZeroth_Interface +module CreuSat_ConflictAnalysis_ResolveEmptyClause_Interface + use mach.int.UInt64 use seq.Seq use mach.int.Int use prelude.Prelude - use mach.int.UInt64 - predicate sorted_range_tuple_zeroth (s : Seq.seq (usize, usize)) (l : int) (u : int) + use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface as NotSatisfiable0 + clone CreuSat_Logic_LogicClause_Impl2_Unsat_Interface as Unsat0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + val resolve_empty_clause [@cfg:stackify] (f : Type.creusat_formula_formula) (trail : Type.creusat_trail_trail) (cref : usize) : bool + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 266 0 266 26] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 267 0 267 32] Invariant1.invariant' trail f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 268 0 268 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 269 0 269 57] Unsat0.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)) (Type.creusat_trail_trail_Trail_assignments trail)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 270 0 270 42] result -> NotSatisfiable0.not_satisfiable f } + end -module CreuSat_Logic_LogicUtil_SortedRangeTupleZeroth - use seq.Seq +module CreuSat_Decision_Impl2_Clone_Interface + use prelude.Prelude + use Type + val clone' [@cfg:stackify] (self : Type.creusat_decision_node) : Type.creusat_decision_node +end +module CreuSat_Decision_Impl0_Default_Interface + use mach.int.UInt64 use mach.int.Int use prelude.Prelude + use mach.int.Int32 + use Type + val default [@cfg:stackify] (_ : ()) : Type.creusat_decision_node + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 21 4 21 43] UInt64.to_int (Type.creusat_decision_node_Node_next result) = 18446744073709551615 } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 22 4 22 43] UInt64.to_int (Type.creusat_decision_node_Node_prev result) = 18446744073709551615 } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 23 4 23 33] UInt64.to_int (Type.creusat_decision_node_Node_ts result) = 0 } + +end +module Core_Default_Default_Default_Interface + type self + val default [@cfg:stackify] (_ : ()) : self + requires {false} + +end +module CreuSat_Decision_Impl0 + use Type + clone CreuSat_Decision_Impl0_Default_Interface as Default0 + clone Core_Default_Default_Default_Interface as Default1 with type self = Type.creusat_decision_node, + val default = Default0.default +end +module CreuSat_Decision_Impl1_MakeLinkedList_Interface + use mach.int.Int + use mach.int.Int32 use mach.int.UInt64 - predicate sorted_range_tuple_zeroth [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 34 0 34 80] (s : Seq.seq (usize, usize)) (l : int) (u : int) + use prelude.Prelude + use seq.Seq + use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant1 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = usize, type a = Type.alloc_alloc_global, + axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + val make_linked_list [@cfg:stackify] (f : Type.creusat_formula_formula) (lit_order : Type.alloc_vec_vec usize (Type.alloc_alloc_global)) : Type.creusat_decision_decisions + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 39 4 39 30] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 40 4 40 63] 0 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) /\ UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 41 4 43 48] Seq.length (Model0.model lit_order) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) /\ (forall i : (int) . 0 <= i /\ i < Seq.length (Model0.model lit_order) -> UInt64.to_int (Seq.get (Model0.model lit_order) i) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 44 4 44 45] Invariant1.invariant' result (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 35 4 37 5] forall j : (int) . forall i : (int) . l <= i && i < j && j < u -> (let (a, _) = Seq.get s i in a) <= (let (a, _) = Seq.get s j in a) end -module CreuSat_Logic_LogicUtil_SortedTupleZeroth_Interface +module CreuSat_Logic_LogicUtil_SortedRangeRev_Interface use seq.Seq use mach.int.Int use prelude.Prelude use mach.int.UInt64 - predicate sorted_tuple_zeroth (s : Seq.seq (usize, usize)) + predicate sorted_range_rev (s : Seq.seq (usize, usize)) (l : int) (u : int) end -module CreuSat_Logic_LogicUtil_SortedTupleZeroth +module CreuSat_Logic_LogicUtil_SortedRangeRev use seq.Seq use mach.int.Int use prelude.Prelude use mach.int.UInt64 - use mach.int.Int32 - clone CreuSat_Logic_LogicUtil_SortedRangeTupleZeroth_Interface as SortedRangeTupleZeroth0 - predicate sorted_tuple_zeroth [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 41 0 41 58] (s : Seq.seq (usize, usize)) + predicate sorted_range_rev [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 6 0 6 71] (s : Seq.seq (usize, usize)) (l : int) (u : int) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 42 4 44 5] SortedRangeTupleZeroth0.sorted_range_tuple_zeroth s 0 (Seq.length s) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 7 4 9 5] forall j : (int) . forall i : (int) . l <= i /\ i < j /\ j < u -> (let (a, _) = Seq.get s i in a) >= (let (a, _) = Seq.get s j in a) end -module CreusotContracts_Logic_Seq_Impl2_PermutationOf_Interface - type t +module CreuSat_Logic_LogicUtil_SortedRev_Interface use seq.Seq - predicate permutation_of (self : Seq.seq t) (o : Seq.seq t) + use mach.int.Int + use prelude.Prelude + use mach.int.UInt64 + predicate sorted_rev (s : Seq.seq (usize, usize)) end -module CreusotContracts_Logic_Seq_Impl2_PermutationOf - type t +module CreuSat_Logic_LogicUtil_SortedRev use seq.Seq use mach.int.Int + use prelude.Prelude + use mach.int.UInt64 use mach.int.Int32 - use seq.Permut - predicate permutation_of (self : Seq.seq t) (o : Seq.seq t) = - Permut.permut self o 0 (Seq.length self) + clone CreuSat_Logic_LogicUtil_SortedRangeRev_Interface as SortedRangeRev0 + predicate sorted_rev [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 13 0 13 49] (s : Seq.seq (usize, usize)) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 14 4 16 5] SortedRangeRev0.sorted_range_rev s 0 (Seq.length s) end -module CreuSat_Logic_LogicUtil_Partition_Interface +module CreuSat_Logic_LogicUtil_PartitionRev_Interface use seq.Seq use mach.int.Int use prelude.Prelude use mach.int.UInt64 - predicate partition (v : Seq.seq (usize, usize)) (i : int) + predicate partition_rev (v : Seq.seq (usize, usize)) (i : int) end -module CreuSat_Logic_LogicUtil_Partition +module CreuSat_Logic_LogicUtil_PartitionRev use seq.Seq use mach.int.Int use prelude.Prelude use mach.int.UInt64 use mach.int.Int32 - predicate partition [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 48 0 48 56] (v : Seq.seq (usize, usize)) (i : int) + predicate partition_rev [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 53 0 53 60] (v : Seq.seq (usize, usize)) (i : int) = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 49 4 49 109] forall k2 : (int) . forall k1 : (int) . 0 <= k1 && k1 < i && i <= k2 && k2 < Seq.length v -> (let (a, _) = Seq.get v k1 in a) <= (let (a, _) = Seq.get v k2 in a) + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 54 4 54 110] forall k2 : (int) . forall k1 : (int) . 0 <= k1 /\ k1 < i /\ i <= k2 /\ k2 < Seq.length v -> (let (a, _) = Seq.get v k1 in a) >= (let (a, _) = Seq.get v k2 in a) end -module CreuSat_Util_Sort_Interface +module CreuSat_Util_SortReverse_Interface use prelude.Prelude use Type use mach.int.Int use mach.int.UInt64 clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy0 with type t = (usize, usize), - type a = Type.alloc_alloc_global, type ModelTy0.modelTy = Model1.modelTy + type a = Type.alloc_alloc_global clone CreusotContracts_Logic_Seq_Impl2_PermutationOf_Interface as PermutationOf0 with type t = (usize, usize) - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model1 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global) - clone CreuSat_Logic_LogicUtil_SortedTupleZeroth_Interface as SortedTupleZeroth0 + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model1 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global), + type ModelTy0.modelTy = ModelTy0.modelTy + clone CreuSat_Logic_LogicUtil_SortedRev_Interface as SortedRev0 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = (usize, usize), type a = Type.alloc_alloc_global, axiom . - val sort [@cfg:stackify] (v : borrowed (Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global))) : () - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 60 0 60 36] SortedTupleZeroth0.sorted_tuple_zeroth (Model0.model ( ^ v)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 61 0 61 36] PermutationOf0.permutation_of (Model0.model ( ^ v)) (Model1.model v) } + val sort_reverse [@cfg:stackify] (v : borrowed (Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global))) : () + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 11 0 11 27] SortedRev0.sorted_rev (Model0.model ( ^ v)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 12 0 12 36] PermutationOf0.permutation_of (Model0.model ( ^ v)) (Model1.model v) } end -module CreuSat_Util_Sort +module CreuSat_Decision_Impl1_New_Interface + use mach.int.Int + use mach.int.Int32 + use mach.int.UInt64 use prelude.Prelude + use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + val new [@cfg:stackify] (f : Type.creusat_formula_formula) : Type.creusat_decision_decisions + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 79 4 79 30] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 80 4 80 63] 0 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) /\ UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 81 4 81 45] Invariant1.invariant' result (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } + +end +module CreuSat_Logic_LogicAssignments_Impl1_Complete_Interface + use Type + predicate complete (self : Type.creusat_assignments_assignments) +end +module CreuSat_Logic_LogicAssignments_Impl1_Complete use Type use mach.int.Int - use mach.int.UInt64 - use seq.Seq use mach.int.Int32 - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy0 with type t = (usize, usize), - type a = Type.alloc_alloc_global, type ModelTy0.modelTy = Model1.modelTy - clone CreuSat_Logic_LogicUtil_Partition as Partition0 - clone CreuSat_Logic_LogicUtil_SortedRangeTupleZeroth as SortedRangeTupleZeroth0 with predicate SortedRangeTupleZeroth0.sorted_range_tuple_zeroth = SortedTupleZeroth0.sorted_range_tuple_zeroth - clone CreusotContracts_Logic_Seq_Impl2_PermutationOf as PermutationOf0 with type t = (usize, usize) - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = (usize, usize), type a = Type.alloc_alloc_global, - function Model0.model = Model1.model, axiom . - clone CreusotContracts_Logic_Model_Impl1_Model as Model1 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global) - clone CreuSat_Logic_LogicUtil_SortedTupleZeroth as SortedTupleZeroth0 - clone CreusotContracts_Std1_Slice_Impl0_Model as Model2 with type t = (usize, usize), - function Model0.model = DerefMut0.model, function Model1.model = Swap0.model, function Model0.model = Model3.model, - axiom . - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = (usize, usize), - type ModelTy0.modelTy = Model3.modelTy - clone CreusotContracts_Logic_Model_Impl1_Model as Model3 with type t = seq (usize, usize), - function Model0.model = Swap0.model - clone Core_Slice_Index_Impl2_Output as Output0 with type t = (usize, usize), type Output0.output = Index0.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = (usize, usize), - predicate HasValue0.has_value = Index0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = (usize, usize), - predicate InBounds0.in_bounds = Index0.in_bounds - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global) - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = seq (usize, usize) - clone Core_Slice_Impl0_Swap_Interface as Swap0 with type t = (usize, usize) - clone Alloc_Vec_Impl11_DerefMut_Interface as DerefMut0 with type t = (usize, usize), type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = (usize, usize), type i = usize, - type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = (usize, usize), type a = Type.alloc_alloc_global - let rec cfg sort [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 62 0 62 40] (v : borrowed (Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global))) : () - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 60 0 60 36] SortedTupleZeroth0.sorted_tuple_zeroth (Model0.model ( ^ v)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 61 0 61 36] PermutationOf0.permutation_of (Model0.model ( ^ v)) (Model1.model v) } + use seq.Seq + clone CreuSat_Logic_Logic_Unset_Interface as Unset0 + clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 + predicate complete [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 55 4 55 33] (self : Type.creusat_assignments_assignments) = - var _0 : (); - var v_1 : borrowed (Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global)); - var i_2 : usize; - ghost var old_v_3 : borrowed (Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global)); - var _4 : (); - var _5 : (); - var _6 : bool; - var _7 : usize; - var _8 : usize; - var _9 : Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global); - var max_10 : usize; - var j_11 : usize; - var _12 : usize; - var _13 : (); - var _14 : bool; - var _15 : usize; - var _16 : usize; - var _17 : Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global); - var _18 : (); - var _19 : bool; - var _20 : usize; - var _21 : (usize, usize); - var _22 : Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global); - var _23 : usize; - var _24 : usize; - var _25 : (usize, usize); - var _26 : Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global); - var _27 : usize; - var _28 : usize; - var _29 : (); - var _30 : (); - var _31 : (); - var _32 : (); - var _33 : borrowed (seq (usize, usize)); - var _34 : borrowed (seq (usize, usize)); - var _35 : borrowed (Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global)); - var _36 : usize; - var _37 : usize; - var _38 : (); - var _39 : (); - var _40 : (); - { - v_1 <- v; - goto BB0 - } - BB0 { - i_2 <- (0 : usize); - _4 <- (); - old_v_3 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 64 16 64 28] v_1); - goto BB1 - } - BB1 { - goto BB2 - } - BB2 { - invariant proph_const { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 65 4 65 51] ^ v_1 = ^ old_v_3 }; - invariant permutation { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 66 4 66 67] PermutationOf0.permutation_of (Model1.model v_1) (Model0.model ( * old_v_3)) }; - invariant i_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 67 4 67 43] UInt64.to_int i_2 <= Seq.length (Model1.model v_1) }; - invariant sorted { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 68 4 68 62] SortedRangeTupleZeroth0.sorted_range_tuple_zeroth (Model1.model v_1) 0 (UInt64.to_int i_2) }; - invariant partition { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 69 4 69 46] Partition0.partition (Model1.model v_1) (UInt64.to_int i_2) }; - _7 <- i_2; - _9 <- * v_1; - _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 70 14 70 21] Len0.len _9); - goto BB3 - } - BB3 { - _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 70 10 70 21] _7 < _8); - switch (_6) - | False -> goto BB16 - | _ -> goto BB4 - end - } - BB4 { - max_10 <- i_2; - _12 <- i_2; - j_11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 72 20 72 25] _12 + (1 : usize)); - goto BB5 - } - BB5 { - invariant max_is_max { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 73 8 73 96] forall k : (int) . UInt64.to_int i_2 <= k && k < UInt64.to_int j_11 -> (let (a, _) = Seq.get (Model1.model v_1) (UInt64.to_int max_10) in a) <= (let (a, _) = Seq.get (Model1.model v_1) k in a) }; - invariant j_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 74 8 74 59] UInt64.to_int i_2 <= UInt64.to_int j_11 && UInt64.to_int j_11 <= Seq.length (Model1.model v_1) }; - invariant max_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 75 8 75 56] UInt64.to_int i_2 <= UInt64.to_int max_10 && UInt64.to_int max_10 < UInt64.to_int j_11 }; - _15 <- j_11; - _17 <- * v_1; - _16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 76 18 76 25] Len0.len _17); - goto BB6 - } - BB6 { - _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 76 14 76 25] _15 < _16); - switch (_14) - | False -> goto BB13 - | _ -> goto BB7 - end - } - BB7 { - _22 <- * v_1; - _23 <- j_11; - _21 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 77 15 77 19] Index0.index _22 _23); - goto BB8 - } - BB8 { - _20 <- (let (a, _) = _21 in a); - _26 <- * v_1; - _27 <- max_10; - _25 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 77 24 77 30] Index0.index _26 _27); - goto BB9 - } - BB9 { - _24 <- (let (a, _) = _25 in a); - _19 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 77 15 77 32] _20 < _24); - switch (_19) - | False -> goto BB11 - | _ -> goto BB10 - end - } - BB10 { - _28 <- j_11; - max_10 <- _28; - _18 <- (); - goto BB12 - } - BB11 { - _18 <- (); - goto BB12 - } - BB12 { - j_11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 80 12 80 18] j_11 + (1 : usize)); - _5 <- (); - goto BB5 - } - BB13 { - _13 <- (); - _35 <- borrow_mut ( * v_1); - v_1 <- { v_1 with current = ( ^ _35) }; - _34 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 82 8 82 22] DerefMut0.deref_mut _35); - goto BB14 - } - BB14 { - _33 <- borrow_mut ( * _34); - _34 <- { _34 with current = ( ^ _33) }; - _36 <- i_2; - _37 <- max_10; - _32 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 82 8 82 22] Swap0.swap _33 _36 _37); - goto BB15 - } - BB15 { - assume { Resolve0.resolve _34 }; - i_2 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 83 8 83 14] i_2 + (1 : usize)); - _5 <- (); - goto BB2 - } - BB16 { - assume { Resolve1.resolve v_1 }; - _0 <- (); - return _0 - } - + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 56 8 58 9] forall i : (int) . 0 <= i /\ i < Seq.length (Model0.model self) -> not Unset0.unset (Seq.get (Model0.model self) i) end -module CreuSat_Decision_Impl1_Rescore_Interface +module CreuSat_Decision_Impl1_GetNext_Interface use mach.int.UInt64 - use seq.Seq + use Type use mach.int.Int use prelude.Prelude - use mach.int.Int32 - use Type - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, axiom . + use seq.Seq + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 + clone CreuSat_Logic_LogicAssignments_Impl1_Complete_Interface as Complete0 + clone CreuSat_Logic_Logic_Unset_Interface as Unset0 + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments, + type ModelTy0.modelTy = ModelTy0.modelTy + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant_Interface as Invariant1 clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant0 - val rescore [@cfg:stackify] (self : borrowed (Type.creusat_decision_decisions)) (_f : Type.creusat_formula_formula) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 130 4 130 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 131 4 131 56] Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self))) < 18446744073709551615} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 130 4 130 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 132 4 132 67] UInt64.to_int (Type.creusat_decision_decisions_Decisions_timestamp ( ^ self)) = Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self))) + 1 } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 133 4 133 73] Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( ^ self))) = Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self))) } + val get_next [@cfg:stackify] (self : borrowed (Type.creusat_decision_decisions)) (a : Type.creusat_assignments_assignments) (_f : Type.creusat_formula_formula) : Type.core_option_option usize + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 232 4 232 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 233 4 233 33] Invariant1.invariant' a _f} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 232 4 232 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 234 4 237 7] match (result) with + | Type.Core_Option_Option_Some k -> UInt64.to_int k < Seq.length (Model0.model a) /\ Unset0.unset (Seq.get (Model0.model a) (UInt64.to_int k)) + | Type.Core_Option_Option_None -> Complete0.complete a + end } end -module CreuSat_Decision_Impl1_Rescore +module CreuSat_Formula_Impl1_IndexMut_Interface use mach.int.UInt64 use seq.Seq use mach.int.Int + use mach.int.Int32 use prelude.Prelude + use Type + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 + clone CreuSat_Logic_LogicFormula_Impl0_Model_Interface as Model1 + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_formula_formula, + type ModelTy0.modelTy = ModelTy0.modelTy + val index_mut [@cfg:stackify] (self : borrowed (Type.creusat_formula_formula)) (ix : usize) : borrowed (Type.creusat_clause_clause) + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 43 4 43 38] UInt64.to_int ix < Seq.length (let (a, _) = Model0.model self in a)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 44 4 44 42] Seq.get (let (a, _) = Model1.model ( * self) in a) (UInt64.to_int ix) = * result } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 45 4 45 42] Seq.get (let (a, _) = Model1.model ( ^ self) in a) (UInt64.to_int ix) = ^ result } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 46 4 46 107] forall i : (int) . 0 <= i /\ i <> UInt64.to_int ix /\ i < Seq.length (let (a, _) = Model0.model self in a) -> Seq.get (let (a, _) = Model0.model self in a) i = Seq.get (let (a, _) = Model1.model ( ^ self) in a) i } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 47 4 47 52] Seq.length (let (a, _) = Model1.model ( ^ self) in a) = Seq.length (let (a, _) = Model1.model ( * self) in a) } + +end +module CreuSat_Formula_Impl2_CheckFormulaInvariant_Interface + use Type + use mach.int.Int use mach.int.Int32 + use mach.int.UInt64 + use prelude.Prelude + use prelude.UInt8 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface as NotSatisfiable0 + clone CreuSat_Logic_LogicFormula_FormulaSatInner_Interface as FormulaSatInner0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = uint8, type a = Type.alloc_alloc_global, + axiom . + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_formula_formula, + type ModelTy0.modelTy = ModelTy0.modelTy + val check_formula_invariant [@cfg:stackify] (self : Type.creusat_formula_formula) : Type.creusat_solver_satresult + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 60 4 65 7] match (result) with + | Type.CreuSat_Solver_SatResult_Sat assn -> FormulaSatInner0.formula_sat_inner (Model0.model self) (Model1.model assn) + | Type.CreuSat_Solver_SatResult_Unsat -> NotSatisfiable0.not_satisfiable self + | Type.CreuSat_Solver_SatResult_Unknown -> Invariant0.invariant' self /\ 0 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self) /\ UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self) < div 18446744073709551615 2 + | Type.CreuSat_Solver_SatResult_Err -> true + end } + +end +module CreuSat_Logic_LogicClause_Impl2_Sat_Interface use Type - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, function Model0.model = Invariant0.model, axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant0 - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_decision_node - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_decision_node, - type Output0.output = IndexMut0.output, type Output0.output = Index0.output - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.creusat_decision_node, - predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_decision_node, - predicate HasValue0.has_value = IndexMut0.has_value, predicate HasValue0.has_value = Index0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_decision_node, - predicate InBounds0.in_bounds = IndexMut0.in_bounds, predicate InBounds0.in_bounds = Index0.in_bounds - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_decision_decisions - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.creusat_decision_node, type i = usize, - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_decision_node - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.creusat_decision_node, type i = usize, - type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_decision_node, type a = Type.alloc_alloc_global - let rec cfg rescore [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 134 4 134 39] (self : borrowed (Type.creusat_decision_decisions)) (_f : Type.creusat_formula_formula) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 130 4 130 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 131 4 131 56] Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self))) < 18446744073709551615} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 130 4 130 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 132 4 132 67] UInt64.to_int (Type.creusat_decision_decisions_Decisions_timestamp ( ^ self)) = Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self))) + 1 } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 133 4 133 73] Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( ^ self))) = Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self))) } + predicate sat (self : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) +end +module CreuSat_Logic_LogicClause_Impl2_Sat + use Type + clone CreuSat_Logic_LogicClause_Impl2_SatInner_Interface as SatInner0 + clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 + predicate sat [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 166 4 166 44] (self : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) = - var _0 : (); - var self_1 : borrowed (Type.creusat_decision_decisions); - var _f_2 : Type.creusat_formula_formula; - var iNVALID'_3 : usize; - ghost var old_self_4 : borrowed (Type.creusat_decision_decisions); - var _5 : (); - var curr_score_6 : usize; - var _7 : Type.alloc_vec_vec (Type.creusat_decision_node) (Type.alloc_alloc_global); - var i_8 : usize; - var curr_9 : usize; - var _10 : (); - var _11 : (); - var _12 : bool; - var _13 : usize; - var _14 : usize; - var _15 : usize; - var _16 : borrowed (Type.creusat_decision_node); - var _17 : borrowed (Type.alloc_vec_vec (Type.creusat_decision_node) (Type.alloc_alloc_global)); - var _18 : usize; - var _19 : (); - var _20 : bool; - var _21 : usize; - var _22 : (); - var _23 : usize; - var _24 : Type.creusat_decision_node; - var _25 : Type.alloc_vec_vec (Type.creusat_decision_node) (Type.alloc_alloc_global); - var _26 : usize; - var _27 : (); - var _28 : (); - var _29 : (); - var _30 : usize; - var _31 : Type.alloc_vec_vec (Type.creusat_decision_node) (Type.alloc_alloc_global); - { - self_1 <- self; - _f_2 <- _f; - goto BB0 - } - BB0 { - iNVALID'_3 <- (18446744073709551615 : usize); - _5 <- (); - old_self_4 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 136 23 136 38] self_1); - goto BB1 - } - BB1 { - _7 <- Type.creusat_decision_decisions_Decisions_linked_list ( * self_1); - curr_score_6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 137 29 137 51] Len0.len _7); - goto BB2 - } - BB2 { - i_8 <- (0 : usize); - curr_9 <- Type.creusat_decision_decisions_Decisions_start ( * self_1); - goto BB3 - } - BB3 { - invariant curr_ok { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 140 8 140 86] curr_9 = (18446744073709551615 : usize) || UInt64.to_int curr_9 < Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self_1))) }; - invariant proph { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 141 8 141 55] ^ old_self_4 = ^ self_1 }; - invariant unch { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 142 8 145 10] forall j : (int) . 0 <= j && j < Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self_1))) -> Type.creusat_decision_node_Node_next (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self_1))) j) = Type.creusat_decision_node_Node_next (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * old_self_4))) j) && Type.creusat_decision_node_Node_prev (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self_1))) j) = Type.creusat_decision_node_Node_prev (Seq.get (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * old_self_4))) j) }; - invariant inv { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 146 8 146 55] Invariant0.invariant' ( * self_1) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f_2)) }; - _13 <- curr_9; - _14 <- iNVALID'_3; - _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 147 14 147 29] _13 <> _14); - switch (_12) - | False -> goto BB9 - | _ -> goto BB4 - end - } - BB4 { - _15 <- curr_score_6; - _17 <- borrow_mut (Type.creusat_decision_decisions_Decisions_linked_list ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Decision_Decisions a b c d = * self_1 in Type.CreuSat_Decision_Decisions ( ^ _17) b c d) }; - _18 <- curr_9; - _16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 148 12 148 34] IndexMut0.index_mut _17 _18); - goto BB5 - } - BB5 { - _16 <- { _16 with current = (let Type.CreuSat_Decision_Node a b c = * _16 in Type.CreuSat_Decision_Node a b _15) }; - assume { Resolve0.resolve _16 }; - _21 <- curr_score_6; - _20 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 149 15 149 29] _21 > (0 : usize)); - switch (_20) - | False -> goto BB7 - | _ -> goto BB6 - end - } - BB6 { - curr_score_6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 150 16 150 31] curr_score_6 - (1 : usize)); - _19 <- (); - _25 <- Type.creusat_decision_decisions_Decisions_linked_list ( * self_1); - _26 <- curr_9; - _24 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 154 19 154 41] Index0.index _25 _26); - goto BB8 - } - BB7 { - _10 <- (); - goto BB10 - } - BB8 { - _23 <- Type.creusat_decision_node_Node_next _24; - curr_9 <- _23; - _11 <- (); - goto BB3 - } - BB9 { - _10 <- (); - goto BB10 - } - BB10 { - _31 <- Type.creusat_decision_decisions_Decisions_linked_list ( * self_1); - _30 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 156 25 156 47] Len0.len _31); - goto BB11 - } - BB11 { - self_1 <- { self_1 with current = (let Type.CreuSat_Decision_Decisions a b c d = * self_1 in Type.CreuSat_Decision_Decisions a ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 156 8 156 51] _30 + (1 : usize)) c d) }; - assume { Resolve1.resolve self_1 }; - _0 <- (); - return _0 - } - + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 167 8 169 9] SatInner0.sat_inner self (Model0.model a) end -module CreuSat_Decision_Impl1_MoveToFront_Interface +module CreuSat_Lit_Impl1_LitSat_Interface + use seq.Seq + use Type + use prelude.Prelude + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 + clone CreuSat_Logic_LogicLit_Impl1_Sat_Interface as Sat0 + clone CreuSat_Logic_LogicLit_Impl1_Invariant_Interface as Invariant0 + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments, + type ModelTy0.modelTy = ModelTy0.modelTy + val lit_sat [@cfg:stackify] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) : bool + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 51 4 51 43] Invariant0.invariant' self (Seq.length (Model0.model a))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 52 4 52 38] result = Sat0.sat self a } + +end +module CreuSat_Formula_Impl2_IsClauseSat_Interface use mach.int.UInt64 + use seq.Seq use mach.int.Int use prelude.Prelude + use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicClause_Impl2_Sat_Interface as Sat0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + val is_clause_sat [@cfg:stackify] (self : Type.creusat_formula_formula) (idx : usize) (a : Type.creusat_assignments_assignments) : bool + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 92 4 92 33] Invariant0.invariant' self} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 93 4 93 35] Invariant1.invariant' a self} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 94 4 94 45] UInt64.to_int idx < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 95 4 95 55] result = Sat0.sat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) (UInt64.to_int idx)) a } + +end +module CreuSat_Logic_LogicWatches_WatchesInvariantInternal_Interface use seq.Seq use Type - clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_decision_node, + use mach.int.Int + predicate watches_invariant_internal (w : Seq.seq (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global))) (n : int) (f : Type.creusat_formula_formula) + +end +module CreuSat_Logic_LogicWatches_WatchesInvariantInternal + use seq.Seq + use Type + use mach.int.Int + use mach.int.Int32 + use mach.int.UInt64 + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 + clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model2 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . - val move_to_front [@cfg:stackify] (self : borrowed (Type.creusat_decision_decisions)) (tomove : usize) (_f : Type.creusat_formula_formula) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 160 4 160 43] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f) < 18446744073709551615} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 161 4 161 52] UInt64.to_int tomove < Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 162 4 162 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 162 4 162 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, axiom . + predicate watches_invariant_internal [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 11 0 11 83] (w : Seq.seq (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global))) (n : int) (f : Type.creusat_formula_formula) + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 12 4 20 5] 2 * n = Seq.length w /\ (forall i : (int) . 0 <= i /\ i < Seq.length w -> (forall j : (int) . 0 <= j /\ j < Seq.length (Model0.model (Seq.get w i)) -> UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref (Seq.get (Model0.model (Seq.get w i)) j)) < Seq.length (Model1.model (Type.creusat_formula_formula_Formula_clauses f)) /\ Seq.length (Model2.model (Seq.get (Model1.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref (Seq.get (Model0.model (Seq.get w i)) j))))) > 1 /\ IndexLogic0.index_logic (Type.creusat_watches_watcher_Watcher_blocker (Seq.get (Model0.model (Seq.get w i)) j)) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))) +end +module CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface + use Type + predicate invariant' (self : Type.creusat_watches_watches) (f : Type.creusat_formula_formula) end -module CreuSat_Decision_Impl1_MoveToFront +module CreuSat_Logic_LogicWatches_Impl0_Invariant + use Type use mach.int.UInt64 + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal_Interface as WatchesInvariantInternal0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + type a = Type.alloc_alloc_global, axiom . + predicate invariant' [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 67 4 67 46] (self : Type.creusat_watches_watches) (f : Type.creusat_formula_formula) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 68 8 83 9] WatchesInvariantInternal0.watches_invariant_internal (Model0.model (Type.creusat_watches_watches_Watches_watches self)) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) f +end +module CreuSat_Logic_LogicFormula_Impl2_SatInner_Interface + use Type + use seq.Seq use mach.int.Int use prelude.Prelude + use prelude.UInt8 + predicate sat_inner (self : Type.creusat_formula_formula) (a : Seq.seq uint8) +end +module CreuSat_Logic_LogicFormula_Impl2_SatInner + use Type use seq.Seq + use mach.int.Int + use prelude.Prelude + use prelude.UInt8 + use mach.int.Int32 + clone CreuSat_Logic_LogicClause_Impl2_SatInner_Interface as SatInner0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + predicate sat_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 149 4 149 57] (self : Type.creusat_formula_formula) (a : Seq.seq uint8) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 150 8 153 9] forall i : (int) . 0 <= i /\ i < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) -> SatInner0.sat_inner (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) i) a +end +module CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss_Interface use Type - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, function Model0.model = Invariant0.model, axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant0 - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_decision_node - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_decision_node, - type Output0.output = IndexMut0.output - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.creusat_decision_node, - predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_decision_node, - predicate HasValue0.has_value = IndexMut0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_decision_node, - predicate InBounds0.in_bounds = IndexMut0.in_bounds - clone CreuSat_Decision_Impl1_Rescore_Interface as Rescore0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_decision_node - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.creusat_decision_node, type i = usize, - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_decision_decisions - let rec cfg move_to_front [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 163 4 163 60] (self : borrowed (Type.creusat_decision_decisions)) (tomove : usize) (_f : Type.creusat_formula_formula) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 160 4 160 43] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f) < 18446744073709551615} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 161 4 161 52] UInt64.to_int tomove < Seq.length (Model0.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 162 4 162 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 162 4 162 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } + predicate eventually_sat_complete_no_ass (self : Type.creusat_formula_formula) +end +module CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss + use Type + use seq.Seq + use mach.int.Int + use prelude.Prelude + use prelude.UInt8 + use mach.int.UInt64 + clone CreuSat_Logic_LogicFormula_Impl2_SatInner_Interface as SatInner0 + clone CreuSat_Logic_LogicAssignments_CompleteInner_Interface as CompleteInner0 + predicate eventually_sat_complete_no_ass [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 80 4 80 55] (self : Type.creusat_formula_formula) = - var _0 : (); - var self_1 : borrowed (Type.creusat_decision_decisions); - var tomove_2 : usize; - var _f_3 : Type.creusat_formula_formula; - var iNVALID'_4 : usize; - var _5 : (); - var _6 : bool; - var _7 : usize; - var _8 : usize; - var _9 : (); - var moving_10 : borrowed (Type.creusat_decision_node); - var _11 : borrowed (Type.creusat_decision_node); - var _12 : borrowed (Type.alloc_vec_vec (Type.creusat_decision_node) (Type.alloc_alloc_global)); - var _13 : usize; - var prev_14 : usize; - var old_next_15 : usize; - var _16 : usize; - var _17 : usize; - var _18 : usize; - var _19 : (); - var _20 : bool; - var _21 : usize; - var _22 : (); - var _23 : borrowed (Type.creusat_decision_decisions); - var _24 : Type.creusat_formula_formula; - var _25 : (); - var _26 : usize; - var _27 : borrowed (Type.creusat_decision_node); - var _28 : borrowed (Type.alloc_vec_vec (Type.creusat_decision_node) (Type.alloc_alloc_global)); - var _29 : usize; - var _30 : usize; - var _31 : (); - var _32 : bool; - var _33 : usize; - var _34 : usize; - var _35 : usize; - var _36 : borrowed (Type.creusat_decision_node); - var _37 : borrowed (Type.alloc_vec_vec (Type.creusat_decision_node) (Type.alloc_alloc_global)); - var _38 : usize; - var _39 : bool; - var _40 : usize; - var _41 : usize; - var _42 : usize; - var _43 : borrowed (Type.creusat_decision_node); - var _44 : borrowed (Type.alloc_vec_vec (Type.creusat_decision_node) (Type.alloc_alloc_global)); - var _45 : usize; - { - self_1 <- self; - tomove_2 <- tomove; - _f_3 <- _f; - goto BB0 - } - BB0 { - iNVALID'_4 <- (18446744073709551615 : usize); - _7 <- tomove_2; - _8 <- Type.creusat_decision_decisions_Decisions_start ( * self_1); - _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 165 11 165 31] _7 = _8); - switch (_6) - | False -> goto BB2 - | _ -> goto BB1 - end - } - BB1 { - assume { Resolve0.resolve self_1 }; - _0 <- (); - goto BB17 - } - BB2 { - _5 <- (); - _12 <- borrow_mut (Type.creusat_decision_decisions_Decisions_linked_list ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Decision_Decisions a b c d = * self_1 in Type.CreuSat_Decision_Decisions ( ^ _12) b c d) }; - _13 <- tomove_2; - _11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 168 30 168 54] IndexMut0.index_mut _12 _13); - goto BB3 - } - BB3 { - moving_10 <- borrow_mut ( * _11); - _11 <- { _11 with current = ( ^ moving_10) }; - assume { Resolve1.resolve _11 }; - prev_14 <- Type.creusat_decision_node_Node_prev ( * moving_10); - old_next_15 <- Type.creusat_decision_node_Node_next ( * moving_10); - _16 <- iNVALID'_4; - moving_10 <- { moving_10 with current = (let Type.CreuSat_Decision_Node a b c = * moving_10 in Type.CreuSat_Decision_Node a _16 c) }; - _17 <- Type.creusat_decision_decisions_Decisions_start ( * self_1); - moving_10 <- { moving_10 with current = (let Type.CreuSat_Decision_Node a b c = * moving_10 in Type.CreuSat_Decision_Node _17 b c) }; - _18 <- Type.creusat_decision_decisions_Decisions_timestamp ( * self_1); - moving_10 <- { moving_10 with current = (let Type.CreuSat_Decision_Node a b c = * moving_10 in Type.CreuSat_Decision_Node a b _18) }; - assume { Resolve1.resolve moving_10 }; - _21 <- Type.creusat_decision_decisions_Decisions_timestamp ( * self_1); - _20 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 174 11 174 39] _21 = (18446744073709551615 : usize)); - switch (_20) - | False -> goto BB6 - | _ -> goto BB4 - end - } - BB4 { - _23 <- borrow_mut ( * self_1); - self_1 <- { self_1 with current = ( ^ _23) }; - _24 <- _f_3; - _22 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 175 12 175 28] Rescore0.rescore _23 _24); - goto BB5 - } - BB5 { - _19 <- (); - goto BB7 - } - BB6 { - self_1 <- { self_1 with current = (let Type.CreuSat_Decision_Decisions a b c d = * self_1 in Type.CreuSat_Decision_Decisions a ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 177 12 177 31] Type.creusat_decision_decisions_Decisions_timestamp ( * self_1) + (1 : usize)) c d) }; - _19 <- (); - goto BB7 - } - BB7 { - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 179 8 179 51] UInt64.to_int (Type.creusat_decision_decisions_Decisions_start ( * self_1)) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f_3) }; - _25 <- (); - _26 <- tomove_2; - _28 <- borrow_mut (Type.creusat_decision_decisions_Decisions_linked_list ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Decision_Decisions a b c d = * self_1 in Type.CreuSat_Decision_Decisions ( ^ _28) b c d) }; - _29 <- Type.creusat_decision_decisions_Decisions_start ( * self_1); - _27 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 180 8 180 36] IndexMut0.index_mut _28 _29); - goto BB8 - } - BB8 { - _27 <- { _27 with current = (let Type.CreuSat_Decision_Node a b c = * _27 in Type.CreuSat_Decision_Node a _26 c) }; - assume { Resolve1.resolve _27 }; - _30 <- tomove_2; - self_1 <- { self_1 with current = (let Type.CreuSat_Decision_Decisions a b c d = * self_1 in Type.CreuSat_Decision_Decisions a b _30 d) }; - _33 <- prev_14; - _34 <- iNVALID'_4; - _32 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 182 11 182 26] _33 <> _34); - switch (_32) - | False -> goto BB11 - | _ -> goto BB9 - end - } - BB9 { - _35 <- old_next_15; - _37 <- borrow_mut (Type.creusat_decision_decisions_Decisions_linked_list ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Decision_Decisions a b c d = * self_1 in Type.CreuSat_Decision_Decisions ( ^ _37) b c d) }; - _38 <- prev_14; - _36 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 184 12 184 34] IndexMut0.index_mut _37 _38); - goto BB10 - } - BB10 { - _36 <- { _36 with current = (let Type.CreuSat_Decision_Node a b c = * _36 in Type.CreuSat_Decision_Node _35 b c) }; - assume { Resolve1.resolve _36 }; - _31 <- (); - goto BB12 - } - BB11 { - _31 <- (); - goto BB12 - } - BB12 { - _40 <- old_next_15; - _41 <- iNVALID'_4; - _39 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 186 11 186 30] _40 <> _41); - switch (_39) - | False -> goto BB15 - | _ -> goto BB13 - end - } - BB13 { - _42 <- prev_14; - _44 <- borrow_mut (Type.creusat_decision_decisions_Decisions_linked_list ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Decision_Decisions a b c d = * self_1 in Type.CreuSat_Decision_Decisions ( ^ _44) b c d) }; - assume { Resolve0.resolve self_1 }; - _45 <- old_next_15; - _43 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 187 12 187 38] IndexMut0.index_mut _44 _45); - goto BB14 - } - BB14 { - _43 <- { _43 with current = (let Type.CreuSat_Decision_Node a b c = * _43 in Type.CreuSat_Decision_Node a _42 c) }; - assume { Resolve1.resolve _43 }; - _0 <- (); - goto BB16 - } - BB15 { - assume { Resolve0.resolve self_1 }; - _0 <- (); - goto BB16 - } - BB16 { - goto BB17 - } - BB17 { - return _0 - } - + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 81 8 83 9] exists a2 : (Seq.seq uint8) . Seq.length a2 = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self) /\ CompleteInner0.complete_inner a2 /\ SatInner0.sat_inner self a2 end -module CreusotContracts_Std1_Vec_Impl1 - type t +module CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface + use Type + predicate equisat (self : Type.creusat_formula_formula) (o : Type.creusat_formula_formula) end -module CreusotContracts_Logic_Resolve_Impl0_Resolve_Interface - type t1 - type t2 - predicate resolve (self : (t1, t2)) +module CreuSat_Logic_LogicFormula_Impl2_Equisat + use Type + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss_Interface as EventuallySatCompleteNoAss0 + predicate equisat [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 86 4 86 44] (self : Type.creusat_formula_formula) (o : Type.creusat_formula_formula) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 85 4 85 16] EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass self = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass o end -module CreusotContracts_Logic_Resolve_Impl0_Resolve - type t1 - type t2 - clone CreusotContracts_Logic_Resolve_Resolve_Resolve_Interface as Resolve1 with type self = t2 - clone CreusotContracts_Logic_Resolve_Resolve_Resolve_Interface as Resolve0 with type self = t1 - predicate resolve (self : (t1, t2)) = - Resolve0.resolve (let (a, _) = self in a) && Resolve1.resolve (let (_, a) = self in a) +module CreuSat_Logic_LogicFormula_Compatible_Interface + use seq.Seq + use Type + use mach.int.Int + predicate compatible (f : (Seq.seq (Type.creusat_clause_clause), int)) (o : (Seq.seq (Type.creusat_clause_clause), int)) + end -module CreusotContracts_Logic_Resolve_Impl0 - type t1 - type t2 +module CreuSat_Logic_LogicFormula_Compatible + use seq.Seq + use Type + use mach.int.Int + use mach.int.Int32 + clone CreuSat_Logic_LogicClause_Impl2_Equals_Interface as Equals0 + predicate compatible [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 61 0 61 67] (f : (Seq.seq (Type.creusat_clause_clause), int)) (o : (Seq.seq (Type.creusat_clause_clause), int)) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 62 4 67 5] (let (_, a) = f in a) = (let (_, a) = o in a) /\ Seq.length (let (a, _) = o in a) >= Seq.length (let (a, _) = f in a) /\ (forall i : (int) . 0 <= i /\ i < Seq.length (let (a, _) = f in a) -> Equals0.equals (Seq.get (let (a, _) = f in a) i) (Seq.get (let (a, _) = o in a) i)) end -module CreusotContracts_Logic_Resolve_Impl2_Resolve_Interface - type t - predicate resolve (self : t) +module CreuSat_Logic_LogicFormula_Equisat_Interface + use seq.Seq + use Type + use mach.int.Int + predicate equisat (f : (Seq.seq (Type.creusat_clause_clause), int)) (o : (Seq.seq (Type.creusat_clause_clause), int)) end -module CreusotContracts_Logic_Resolve_Impl2_Resolve - type t - predicate resolve (self : t) = - true +module CreuSat_Logic_LogicFormula_Equisat + use seq.Seq + use Type + use mach.int.Int + clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss_Interface as EventuallySatCompleteNoAss0 + predicate equisat [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 54 0 54 64] (f : (Seq.seq (Type.creusat_clause_clause), int)) (o : (Seq.seq (Type.creusat_clause_clause), int)) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 55 4 57 5] EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass f = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass o end -module CreusotContracts_Logic_Resolve_Impl2 - type t +module CreuSat_Logic_LogicFormula_EquisatCompatibleInner_Interface + use seq.Seq + use Type + use mach.int.Int + predicate equisat_compatible_inner (f : (Seq.seq (Type.creusat_clause_clause), int)) (o : (Seq.seq (Type.creusat_clause_clause), int)) + end -module CreuSat_Decision_Impl1_IncrementAndMove_Interface - use mach.int.UInt64 +module CreuSat_Logic_LogicFormula_EquisatCompatibleInner + use seq.Seq + use Type + use mach.int.Int + clone CreuSat_Logic_LogicFormula_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicFormula_Compatible_Interface as Compatible0 + predicate equisat_compatible_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 71 0 71 81] (f : (Seq.seq (Type.creusat_clause_clause), int)) (o : (Seq.seq (Type.creusat_clause_clause), int)) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 72 4 74 5] Compatible0.compatible f o /\ Equisat0.equisat f o +end +module CreuSat_Logic_LogicFormula_Impl2_EquisatCompatible_Interface + use Type + predicate equisat_compatible (self : Type.creusat_formula_formula) (o : Type.creusat_formula_formula) +end +module CreuSat_Logic_LogicFormula_Impl2_EquisatCompatible + use Type + clone CreuSat_Logic_LogicFormula_EquisatCompatibleInner_Interface as EquisatCompatibleInner0 + clone CreuSat_Logic_LogicFormula_Impl0_Model_Interface as Model0 + predicate equisat_compatible [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 101 4 101 55] (self : Type.creusat_formula_formula) (o : Type.creusat_formula_formula) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 102 8 102 57] EquisatCompatibleInner0.equisat_compatible_inner (Model0.model self) (Model0.model o) +end +module CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic_Interface + use Type + use mach.int.Int + function to_neg_watchidx_logic [@inline:trivial] (self : Type.creusat_lit_lit) : int +end +module CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic + use Type + use mach.int.Int + use mach.int.Int32 + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic_Interface as IsPositiveLogic0 + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 + function to_neg_watchidx_logic [@inline:trivial] [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 39 4 39 45] (self : Type.creusat_lit_lit) : int + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 40 8 40 91] IndexLogic0.index_logic self * 2 + (if IsPositiveLogic0.is_positive_logic self then + 1 + else + 0 + ) +end +module CreuSat_Lit_Impl1_ToNegWatchidx_Interface use mach.int.Int use prelude.Prelude + use mach.int.UInt64 + use mach.int.Int32 use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - clone CreuSat_Logic_LogicUtil_ElemsLessThan_Interface as ElemsLessThan0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = usize, type a = Type.alloc_alloc_global, - axiom . - val increment_and_move [@cfg:stackify] (self : borrowed (Type.creusat_decision_decisions)) (f : Type.creusat_formula_formula) (v : Type.alloc_vec_vec usize (Type.alloc_alloc_global)) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 199 4 199 49] ElemsLessThan0.elems_less_than (Model0.model v) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 200 4 200 42] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < 18446744073709551615} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 201 4 201 30] Invariant0.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 202 4 202 51] Invariant1.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 202 4 202 51] Invariant1.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic_Interface as IsPositiveLogic0 + clone CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic_Interface as ToNegWatchidxLogic0 + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 + val to_neg_watchidx [@cfg:stackify] (self : Type.creusat_lit_lit) : usize + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 97 4 97 51] IndexLogic0.index_logic self < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 98 4 98 55] UInt64.to_int result = ToNegWatchidxLogic0.to_neg_watchidx_logic self } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 99 4 99 96] UInt64.to_int result = IndexLogic0.index_logic self * 2 + (if IsPositiveLogic0.is_positive_logic self then + 1 + else + 0 + ) } end -module CreuSat_Decision_Impl1_IncrementAndMove +module CreuSat_Watches_Impl0_AddWatcher_Interface use mach.int.UInt64 + use seq.Seq use mach.int.Int use prelude.Prelude + use mach.int.Int32 use Type + clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model2 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic_Interface as ToNegWatchidxLogic0 + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant0 + val add_watcher [@cfg:stackify] (self : borrowed (Type.creusat_watches_watches)) (lit : Type.creusat_lit_lit) (cref : usize) (_f : Type.creusat_formula_formula) (blocker : Type.creusat_lit_lit) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 105 4 105 43] Invariant0.invariant' ( * self) _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 106 4 106 44] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses _f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 107 4 107 50] IndexLogic0.index_logic lit < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 108 4 108 53] IndexLogic0.index_logic blocker < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 109 4 109 68] ToNegWatchidxLogic0.to_neg_watchidx_logic lit < Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * self)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 110 4 110 50] Seq.length (Model2.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) > 1} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 105 4 105 43] Invariant0.invariant' ( ^ self) _f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 111 4 111 65] Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * self))) = Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( ^ self))) } + +end +module CreuSat_Formula_Impl2_AddClause_Interface use seq.Seq + use mach.int.Int use mach.int.Int32 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = Invariant3.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model5.model, axiom . - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant2.invariant_internal - clone CreuSat_Logic_LogicClause_Impl0_Model as Model5 with function Model1.model = InvariantMirror0.model, - function Model0.model = FormulaInvariant0.model, function Model0.model = Invariant2.model - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, - function Model0.model = Model3.model, axiom . - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model3 with function Model0.model = Invariant0.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, function Model0.model = Invariant1.model, axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = (usize, usize), type a = Type.alloc_alloc_global, + use mach.int.UInt64 + use prelude.Prelude + use Type + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model2 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicClause_EquisatExtensionInner_Interface as EquisatExtensionInner0 + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model1 with type t = Type.creusat_formula_formula, + type ModelTy0.modelTy = ModelTy0.modelTy + clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant3 + clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - clone CreuSat_Logic_LogicUtil_ElemsLessThan as ElemsLessThan0 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicUtil_SortedRangeTupleZeroth as SortedRangeTupleZeroth0 with predicate SortedRangeTupleZeroth0.sorted_range_tuple_zeroth = SortedTupleZeroth0.sorted_range_tuple_zeroth - clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve6 with type t = usize, - predicate Resolve0.resolve = Resolve4.resolve, predicate Resolve0.resolve = Resolve5.resolve, - predicate Resolve1.resolve = Resolve5.resolve - clone CreusotContracts_Logic_Resolve_Impl0_Resolve as Resolve5 with type t1 = usize, type t2 = usize, - predicate Resolve0.resolve = Resolve3.resolve - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy3 with type t = (usize, usize), - type a = Type.alloc_alloc_global, type ModelTy0.modelTy = Model7.modelTy - clone CreusotContracts_Logic_Seq_Impl2_PermutationOf as PermutationOf0 with type t = (usize, usize), - predicate PermutationOf0.permutation_of = Sort0.permutation_of - clone CreusotContracts_Logic_Model_Impl1_Model as Model7 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global), - function Model1.model = Sort0.model - clone CreuSat_Logic_LogicUtil_SortedTupleZeroth as SortedTupleZeroth0 with predicate SortedTupleZeroth0.sorted_tuple_zeroth = Sort0.sorted_tuple_zeroth - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy2 with type t = (usize, usize) - clone Core_Slice_Index_Impl2_Output as Output2 with type t = (usize, usize), type Output0.output = IndexMut0.output, - type Output0.output = Index2.output - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = (usize, usize), - predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue2 with type t = (usize, usize), - predicate HasValue0.has_value = IndexMut0.has_value, predicate HasValue0.has_value = Index2.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds2 with type t = (usize, usize), - predicate InBounds0.in_bounds = IndexMut0.in_bounds, predicate InBounds0.in_bounds = Index2.in_bounds - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_decision_node - clone Core_Slice_Index_Impl2_Output as Output1 with type t = Type.creusat_decision_node, - type Output0.output = Index1.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = Type.creusat_decision_node, - predicate HasValue0.has_value = Index1.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = Type.creusat_decision_node, - predicate InBounds0.in_bounds = Index1.in_bounds - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = usize - clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize, type Output0.output = Index0.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize, - predicate HasValue0.has_value = Index0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize, - predicate InBounds0.in_bounds = Index0.in_bounds - clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve4 with type t = usize - clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve3 with type t = (usize, usize) - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_decision_decisions - clone CreuSat_Decision_Impl1_MoveToFront_Interface as MoveToFront0 - clone Alloc_Vec_Impl16_Index_Interface as Index2 with type t = (usize, usize), type i = usize, - type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl1_Len_Interface as Len1 with type t = (usize, usize), type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global) - clone CreuSat_Util_Sort_Interface as Sort0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = (usize, usize) - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = (usize, usize), type i = usize, - type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl16_Index_Interface as Index1 with type t = Type.creusat_decision_node, type i = usize, - type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = usize, type i = usize, type a = Type.alloc_alloc_global - clone Alloc_Vec_FromElem_Interface as FromElem0 with type t = (usize, usize) - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = usize, type a = Type.alloc_alloc_global - let rec cfg increment_and_move [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 203 4 203 68] (self : borrowed (Type.creusat_decision_decisions)) (f : Type.creusat_formula_formula) (v : Type.alloc_vec_vec usize (Type.alloc_alloc_global)) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 199 4 199 49] ElemsLessThan0.elems_less_than (Model0.model v) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 200 4 200 42] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < 18446744073709551615} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 201 4 201 30] Invariant0.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 202 4 202 51] Invariant1.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 202 4 202 51] Invariant1.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } - - = - var _0 : (); - var self_1 : borrowed (Type.creusat_decision_decisions); - var f_2 : Type.creusat_formula_formula; - var v_3 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var counts_with_index_4 : Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global); - var _5 : (usize, usize); - var _6 : usize; - var _7 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - ghost var old_self_8 : borrowed (Type.creusat_decision_decisions); - var _9 : (); - var i_10 : usize; - var _11 : (); - var _12 : (); - var _13 : bool; - var _14 : usize; - var _15 : usize; - var _16 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _17 : usize; - var _18 : Type.creusat_decision_node; - var _19 : Type.alloc_vec_vec (Type.creusat_decision_node) (Type.alloc_alloc_global); - var _20 : usize; - var _21 : usize; - var _22 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _23 : usize; - var _24 : usize; - var _25 : usize; - var _26 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _27 : usize; - var _28 : borrowed (usize, usize); - var _29 : borrowed (Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global)); - var _30 : usize; - var _31 : (); - var _32 : (); - var _33 : (); - var _34 : (); - var _35 : borrowed (Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global)); - var _36 : borrowed (Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global)); - var _37 : bool; - var _38 : usize; - var _39 : usize; - var _40 : Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global); - var _41 : (); - var _42 : borrowed (Type.creusat_decision_decisions); - var _43 : usize; - var _44 : (usize, usize); - var _45 : Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global); - var _46 : usize; - var _47 : Type.creusat_formula_formula; - var _48 : (); - var _49 : (); - var _50 : (); - { - self_1 <- self; - f_2 <- f; - v_3 <- v; - goto BB0 - } - BB0 { - goto BB1 - } - BB1 { - _5 <- ((0 : usize), (0 : usize)); - _7 <- v_3; - _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 204 70 204 77] Len0.len _7); - goto BB2 - } - BB2 { - counts_with_index_4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 204 57 204 78] FromElem0.from_elem _5 _6); - goto BB3 - } - BB3 { - _9 <- (); - old_self_8 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 205 23 205 38] self_1); - goto BB4 - } - BB4 { - i_10 <- (0 : usize); - goto BB5 - } - BB5 { - goto BB6 - } - BB6 { - goto BB7 - } - BB7 { - invariant unch { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 207 8 207 52] old_self_8 = self_1 }; - invariant proph { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 208 8 208 55] ^ old_self_8 = ^ self_1 }; - invariant len_same { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 209 8 209 72] Seq.length (Model0.model v_3) = Seq.length (Model1.model counts_with_index_4) }; - invariant all_less { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 210 8 211 68] forall j : (int) . 0 <= j && j < UInt64.to_int i_10 -> UInt64.to_int (let (_, a) = Seq.get (Model1.model counts_with_index_4) j in a) < Seq.length (Model2.model (Type.creusat_decision_decisions_Decisions_linked_list ( * self_1))) }; - _14 <- i_10; - _16 <- v_3; - _15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 212 18 212 25] Len0.len _16); - goto BB8 - } - BB8 { - _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 212 14 212 25] _14 < _15); - switch (_13) - | False -> goto BB14 - | _ -> goto BB9 - end - } - BB9 { - _19 <- Type.creusat_decision_decisions_Decisions_linked_list ( * self_1); - _22 <- v_3; - _23 <- i_10; - _21 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 213 53 213 57] Index0.index _22 _23); - goto BB10 - } - BB10 { - _20 <- _21; - _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 213 36 213 58] Index1.index _19 _20); - goto BB11 - } - BB11 { - _17 <- Type.creusat_decision_node_Node_ts _18; - _26 <- v_3; - _27 <- i_10; - _25 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 213 63 213 67] Index0.index _26 _27); - goto BB12 - } - BB12 { - _24 <- _25; - _29 <- borrow_mut counts_with_index_4; - counts_with_index_4 <- ^ _29; - _30 <- i_10; - _28 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 213 12 213 32] IndexMut0.index_mut _29 _30); - goto BB13 - } - BB13 { - _28 <- { _28 with current = (_17, _24) }; - assume { Resolve0.resolve _28 }; - i_10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 214 12 214 18] i_10 + (1 : usize)); - _12 <- (); - goto BB7 - } - BB14 { - _11 <- (); - _36 <- borrow_mut counts_with_index_4; - counts_with_index_4 <- ^ _36; - _35 <- borrow_mut ( * _36); - _36 <- { _36 with current = ( ^ _35) }; - _34 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 218 8 218 36] Sort0.sort _35); - goto BB15 - } - BB15 { - assume { Resolve1.resolve _36 }; - i_10 <- (0 : usize); - goto BB16 - } - BB16 { - goto BB17 - } - BB17 { - invariant proph { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 222 8 222 55] ^ old_self_8 = ^ self_1 }; - invariant inv { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 223 8 223 54] Invariant1.invariant' ( * self_1) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_2)) }; - invariant len_same { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 224 8 224 72] Seq.length (Model0.model v_3) = Seq.length (Model1.model counts_with_index_4) }; - _38 <- i_10; - _40 <- counts_with_index_4; - _39 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 225 18 225 41] Len1.len _40); - goto BB18 - } - BB18 { - _37 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 225 14 225 41] _38 < _39); - switch (_37) - | False -> goto BB22 - | _ -> goto BB19 - end - } - BB19 { - _42 <- borrow_mut ( * self_1); - self_1 <- { self_1 with current = ( ^ _42) }; - _45 <- counts_with_index_4; - _46 <- i_10; - _44 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 226 31 226 51] Index2.index _45 _46); - goto BB20 - } - BB20 { - _43 <- (let (_, a) = _44 in a); - _47 <- f_2; - _41 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 226 12 226 57] MoveToFront0.move_to_front _42 _43 _47); - goto BB21 - } - BB21 { - i_10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 227 12 227 18] i_10 + (1 : usize)); - _12 <- (); - goto BB17 - } - BB22 { - assume { Resolve2.resolve self_1 }; - _0 <- (); - goto BB23 - } - BB23 { - assume { Resolve3.resolve counts_with_index_4 }; - goto BB24 - } - BB24 { - assume { Resolve4.resolve v_3 }; - return _0 - } - + val add_clause [@cfg:stackify] (self : borrowed (Type.creusat_formula_formula)) (clause : Type.creusat_clause_clause) (watches : borrowed (Type.creusat_watches_watches)) (_t : Type.creusat_trail_trail) : usize + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 110 4 110 40] Invariant0.invariant' ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 111 4 111 40] Invariant1.invariant' _t ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 112 4 112 51] Invariant2.invariant' ( * watches) ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 113 4 113 37] Seq.length (Model0.model clause) >= 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 114 4 114 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 117 4 117 49] Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 118 4 118 55] EquisatExtensionInner0.equisat_extension_inner clause (Model1.model self)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 110 4 110 40] Invariant0.invariant' ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 111 4 111 40] Invariant1.invariant' _t ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 112 4 112 51] Invariant2.invariant' ( ^ watches) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 119 4 119 51] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ self)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 120 4 120 35] Equisat0.equisat ( * self) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 121 4 121 48] UInt64.to_int result = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 122 4 122 53] Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) (UInt64.to_int result) = clause } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 123 4 123 69] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) + 1 = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) } + end -module CreuSat_Formula_Impl0_Output +module CreuSat_Formula_Impl2_AddUnwatchedClause_Interface + use seq.Seq + use mach.int.Int + use mach.int.Int32 + use mach.int.UInt64 + use prelude.Prelude use Type - type output = - Type.creusat_clause_clause + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model2 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicClause_EquisatExtensionInner_Interface as EquisatExtensionInner0 + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model1 with type t = Type.creusat_formula_formula, + type ModelTy0.modelTy = ModelTy0.modelTy + clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant3 + clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + val add_unwatched_clause [@cfg:stackify] (self : borrowed (Type.creusat_formula_formula)) (clause : Type.creusat_clause_clause) (watches : borrowed (Type.creusat_watches_watches)) (_t : Type.creusat_trail_trail) : usize + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 144 4 144 40] Invariant0.invariant' ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 145 4 145 40] Invariant1.invariant' _t ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 146 4 146 51] Invariant2.invariant' ( * watches) ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 147 4 147 37] Seq.length (Model0.model clause) >= 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 148 4 148 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 151 4 151 49] Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 152 4 152 55] EquisatExtensionInner0.equisat_extension_inner clause (Model1.model self)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 144 4 144 40] Invariant0.invariant' ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 145 4 145 40] Invariant1.invariant' _t ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 146 4 146 51] Invariant2.invariant' ( ^ watches) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 153 4 153 51] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ self)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 154 4 154 35] Equisat0.equisat ( * self) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 155 4 155 48] UInt64.to_int result = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 156 4 156 53] Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) (UInt64.to_int result) = clause } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 157 4 157 69] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) + 1 = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) } + end -module CreuSat_Formula_Impl0 - use Type +module CreuSat_Formula_Impl2_AddUnit_Interface + use seq.Seq use mach.int.Int - use prelude.Prelude + use mach.int.Int32 use mach.int.UInt64 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_formula_formula, - function Model0.model = Index0.model - clone CreuSat_Formula_Impl0_Output as Output0 with type output = Output1.output, type Output0.output = Index1.output - clone CreuSat_Formula_Impl0_Index_Interface as Index0 with val index = Index1.index - clone Core_Ops_Index_Index_Index_Interface as Index1 with type self = Type.creusat_formula_formula, type idx = usize - clone Core_Ops_Index_Index_Output as Output1 with type self = Type.creusat_formula_formula, type idx = usize -end -module CreusotContracts_Std1_Clone_Clone_Clone_Interface - type self use prelude.Prelude - val clone' [@cfg:stackify] (self : self) : self - ensures { result = self } + use Type + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model2 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicFormula_Impl2_EquisatCompatible_Interface as EquisatCompatible0 + clone CreuSat_Logic_LogicClause_EquisatExtensionInner_Interface as EquisatExtensionInner0 + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model1 with type t = Type.creusat_formula_formula, + type ModelTy0.modelTy = ModelTy0.modelTy + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner_Interface as NoDuplicateIndexesInner0 + clone CreuSat_Logic_LogicClause_VarsInRangeInner_Interface as VarsInRangeInner0 + clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant2 + clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + val add_unit [@cfg:stackify] (self : borrowed (Type.creusat_formula_formula)) (clause : Type.creusat_clause_clause) (_t : Type.creusat_trail_trail) : usize + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 168 4 168 40] Invariant0.invariant' ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 169 4 169 40] Invariant1.invariant' _t ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 170 4 170 37] Seq.length (Model0.model clause) = 1} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 171 4 171 49] Invariant2.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 172 4 172 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 173 4 173 61] VarsInRangeInner0.vars_in_range_inner (Model0.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 174 4 174 52] NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model0.model clause)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 175 4 175 55] EquisatExtensionInner0.equisat_extension_inner clause (Model1.model self)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 168 4 168 40] Invariant0.invariant' ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 169 4 169 40] Invariant1.invariant' _t ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 176 4 176 51] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ self)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 177 4 177 46] EquisatCompatible0.equisat_compatible ( * self) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 178 4 178 35] Equisat0.equisat ( * self) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 179 4 179 48] UInt64.to_int result = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 180 4 180 57] Seq.length (Model0.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) (UInt64.to_int result))) = 1 } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 181 4 181 69] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) + 1 = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) } end -module CreusotContracts_Std1_Clone_Clone_Clone - type self +module CreuSat_Logic_LogicFormula_Impl2_Sat_Interface + use Type + predicate sat (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) +end +module CreuSat_Logic_LogicFormula_Impl2_Sat + use Type + clone CreuSat_Logic_LogicFormula_FormulaSatInner_Interface as FormulaSatInner0 + clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model1 + clone CreuSat_Logic_LogicFormula_Impl0_Model_Interface as Model0 + predicate sat [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 157 4 157 44] (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 158 8 158 50] FormulaSatInner0.formula_sat_inner (Model0.model self) (Model1.model a) +end +module CreuSat_Formula_Impl2_IsSat_Interface use prelude.Prelude - val clone' [@cfg:stackify] (self : self) : self - ensures { result = self } + use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicFormula_Impl2_Sat_Interface as Sat0 + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + val is_sat [@cfg:stackify] (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) : bool + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 192 4 192 33] Invariant0.invariant' self} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 193 4 193 35] Invariant1.invariant' a self} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 194 4 194 38] result = Sat0.sat self a } end -module CreuSat_Clause_Impl2 +module CreuSat_Logic_LogicWatches_WatcherCrefsInRange_Interface + use seq.Seq use Type - clone CreuSat_Clause_Impl2_Clone_Interface as Clone0 with val clone' = Clone1.clone' - clone CreusotContracts_Std1_Clone_Clone_Clone_Interface as Clone1 with type self = Type.creusat_clause_clause + predicate watcher_crefs_in_range (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) end -module CreuSat_ConflictAnalysis_AnalyzeConflict_Interface - use mach.int.UInt64 - use mach.int.Int - use prelude.Prelude +module CreuSat_Logic_LogicWatches_WatcherCrefsInRange use seq.Seq use Type + use mach.int.Int use mach.int.Int32 - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model2.modelTy - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicClause_EquisatExtensionInner_Interface as EquisatExtensionInner0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model2 with type t = Type.creusat_formula_formula - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner_Interface as NoDuplicateIndexesInner0 - clone CreuSat_Logic_LogicClause_VarsInRangeInner_Interface as VarsInRangeInner0 - clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 - clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant3 - clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface as NotSatisfiable0 - clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicClause_Impl2_Unsat_Interface as Unsat0 + use mach.int.UInt64 clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val analyze_conflict [@cfg:stackify] (f : Type.creusat_formula_formula) (trail : Type.creusat_trail_trail) (cref : usize) (d : borrowed (Type.creusat_decision_decisions)) : Type.creusat_conflictanalysis_conflict - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 161 0 161 26] Invariant0.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 162 0 162 38] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < 18446744073709551615} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 163 0 163 32] Invariant1.invariant' trail f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 164 0 164 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 165 0 165 57] Unsat0.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)) (Type.creusat_trail_trail_Trail_assignments trail)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 191 0 191 44] Invariant2.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 166 0 190 3] match (result) with - | Type.CreuSat_ConflictAnalysis_Conflict_Ground -> NotSatisfiable0.not_satisfiable f - | Type.CreuSat_ConflictAnalysis_Conflict_Unit clause -> Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) && Seq.length (Model1.model clause) = 1 && VarsInRangeInner0.vars_in_range_inner (Model1.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) && NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model clause) && EquisatExtensionInner0.equisat_extension_inner clause (Model2.model f) - | Type.CreuSat_ConflictAnalysis_Conflict_Learned s_idx clause -> Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) && Seq.length (Model1.model clause) > 1 && VarsInRangeInner0.vars_in_range_inner (Model1.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) && NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model clause) && EquisatExtensionInner0.equisat_extension_inner clause (Model2.model f) && UInt64.to_int s_idx < Seq.length (Model1.model clause) - | Type.CreuSat_ConflictAnalysis_Conflict_Restart clause -> Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) && Seq.length (Model1.model clause) > 1 && VarsInRangeInner0.vars_in_range_inner (Model1.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) && NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model clause) && EquisatExtensionInner0.equisat_extension_inner clause (Model2.model f) - end } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 191 0 191 44] Invariant2.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } + predicate watcher_crefs_in_range [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 35 0 35 66] (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 36 4 39 5] forall j : (int) . 0 <= j /\ j < Seq.length w -> UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref (Seq.get w j)) < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) end -module CreuSat_ConflictAnalysis_AnalyzeConflict - use mach.int.UInt64 +module CreuSat_Logic_LogicUtil_Pop_Interface + type t + use seq.Seq use mach.int.Int - use prelude.Prelude + use mach.int.Int32 + use seq_ext.SeqExt + function pop (s : Seq.seq t) : Seq.seq t +end +module CreuSat_Logic_LogicUtil_Pop + type t use seq.Seq - use Type + use mach.int.Int use mach.int.Int32 - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = IdxInLogic0.index_logic, - function IndexLogic0.index_logic = SameIdxSamePolarityExcept0.index_logic, - function IndexLogic0.index_logic = Invariant4.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner1.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = SatInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SameIdxSamePolarityExcept0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner1.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = NotSatisfiable0.model, - function Model0.model = Invariant3.model, function Model0.model = SameIdxSamePolarityExcept0.model, - function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, - function Model0.model = UnsatInner0.model, function Model1.model = UnitAreSat0.model, - function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, - function Model1.model = Invariant7.model, function Model0.model = SatInner1.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner1 with predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, - function Model0.model = Model6.model, function Model3.model = InvariantNoDecisionMirror0.model, - function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner1 with predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner, - predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant', - predicate Invariant0.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss0.formula_sat_inner - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model7.model, axiom . - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model7 with function Model0.model = Unsat0.model, - function Model2.model = InvariantNoDecision0.model, function Model0.model = InvariantNoDecisionMirror0.model, - function Model0.model = Invariant5.model, function Model1.model = TrailEntriesAreAssigned0.model, - function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model2.modelTy - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtension0.equisat_extension_inner - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model6 with function Model0.model = Invariant0.model, - function Model0.model = Model2.model, function Model0.model = EquisatExtension0.model - clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with predicate EquisatExtension0.equisat_extension = NotSatisfiable0.equisat_extension - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . - clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicClause_Impl2_SameIdxSamePolarityExcept as SameIdxSamePolarityExcept0 - clone CreuSat_Logic_LogicLit_IdxInLogic as IdxInLogic0 - clone CreuSat_Logic_LogicUtil_ElemsLessThan as ElemsLessThan0 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = bool, type a = Type.alloc_alloc_global, axiom . - clone CreusotContracts_Logic_Model_Impl0_Model as Model2 with type t = Type.creusat_formula_formula - clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable as NotSatisfiable0 - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant2 - clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat0 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - use mach.int.Int64 - clone CreusotContracts_Logic_Int_Impl18_Model as Model17 with function Model0.model = Model12.model - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy7 with type t = usize, type a = Type.alloc_alloc_global, - type ModelTy0.modelTy = Model16.modelTy - clone CreuSat_Logic_LogicClause_Impl2_ClauseIsSeen as ClauseIsSeen0 with predicate ClauseIsSeen0.clause_is_seen = Resolve5.clause_is_seen - clone CreusotContracts_Logic_Model_Impl1_Model as Model16 with type t = Type.alloc_vec_vec usize (Type.alloc_alloc_global), - function Model5.model = Resolve5.model - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy5 with type t = bool, type a = Type.alloc_alloc_global, - type ModelTy0.modelTy = Model13.modelTy, type ModelTy0.modelTy = Model15.modelTy - clone CreusotContracts_Logic_Model_Impl1_Model as Model15 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global), - function Model4.model = Resolve5.model - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model11.modelTy, - type ModelTy0.modelTy = Model14.modelTy - clone CreusotContracts_Logic_Model_Impl1_Model as Model14 with type t = Type.creusat_clause_clause, - function Model0.model = Resolve5.model - clone CreuSat_Logic_LogicClause_Impl2_InFormula as InFormula0 with predicate InFormula0.in_formula = Resolve5.in_formula - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy6 with type t = Type.creusat_trail_step - clone Core_Slice_Index_Impl2_Output as Output2 with type t = Type.creusat_trail_step, - type Output0.output = Index4.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue2 with type t = Type.creusat_trail_step, - predicate HasValue0.has_value = Index4.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds2 with type t = Type.creusat_trail_step, - predicate InBounds0.in_bounds = Index4.in_bounds - clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve10 with type t = bool, - predicate Resolve0.resolve = Resolve4.resolve - clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve9 with type t = usize, - predicate Resolve0.resolve = Resolve3.resolve - clone CreusotContracts_Logic_Int_Impl18_ModelTy as ModelTy4 with type ModelTy0.modelTy = Model12.modelTy - clone CreuSat_Logic_LogicLit_Impl1_IsOpp as IsOpp0 with predicate IsOpp0.is_opp = ChooseLiteral0.is_opp, - predicate IsOpp0.is_opp = Resolve5.is_opp - clone CreusotContracts_Logic_Model_Impl0_Model as Model13 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global), - function Model2.model = ChooseLiteral0.model - clone CreusotContracts_Logic_Model_Impl1_Model as Model12 with type t = usize, - function Model0.model = ChooseLiteral0.model, function Model3.model = Resolve5.model - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy3 with type t = usize - clone Core_Slice_Index_Impl2_Output as Output1 with type t = usize, type Output0.output = Index3.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = usize, - predicate HasValue0.has_value = Index3.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = usize, - predicate InBounds0.in_bounds = Index3.in_bounds - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy2 with type t = bool - clone Core_Slice_Index_Impl2_Output as Output0 with type t = bool, type Output0.output = IndexMut0.output - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = bool, - predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = bool, - predicate HasValue0.has_value = IndexMut0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = bool, - predicate InBounds0.in_bounds = IndexMut0.in_bounds - clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_clause_clause, - function Model0.model = Len1.model, function Model0.model = Index1.model, - function Model3.model = ChooseLiteral0.model, function Model1.model = Resolve5.model - clone CreuSat_Decision_Impl1_IncrementAndMove_Interface as IncrementAndMove0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve8 with type t = Type.alloc_vec_vec usize (Type.alloc_alloc_global) - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve7 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global) - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve6 with type t = Type.creusat_clause_clause - clone CreuSat_ConflictAnalysis_Resolve_Interface as Resolve5 - clone Alloc_Vec_Impl16_Index_Interface as Index4 with type t = Type.creusat_trail_step, type i = usize, - type a = Type.alloc_alloc_global - clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve4 with type t = bool - clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve3 with type t = usize - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_decision_decisions - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = usize - clone CreuSat_ConflictAnalysis_ChooseLiteral_Interface as ChooseLiteral0 - clone Alloc_Vec_Impl16_Index_Interface as Index3 with type t = usize, type i = usize, type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl1_Push_Interface as Push0 with type t = usize, type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = bool - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = bool, type i = usize, - type a = Type.alloc_alloc_global - clone CreuSat_Lit_Impl1_Index_Interface as Index2 - clone CreuSat_Clause_Impl0_Index_Interface as Index1 - clone CreuSat_Clause_Impl3_Len_Interface as Len1 - clone CreuSat_Clause_Impl2_Clone_Interface as Clone0 - clone CreuSat_Formula_Impl0_Index_Interface as Index0 - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global - clone Alloc_Vec_FromElem_Interface as FromElem0 with type t = bool - clone Alloc_Vec_Impl0_New_Interface as New0 with type t = usize - clone CreuSat_Trail_Impl0_DecisionLevel_Interface as DecisionLevel0 - let rec cfg analyze_conflict [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 192 0 192 95] (f : Type.creusat_formula_formula) (trail : Type.creusat_trail_trail) (cref : usize) (d : borrowed (Type.creusat_decision_decisions)) : Type.creusat_conflictanalysis_conflict - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 161 0 161 26] Invariant0.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 162 0 162 38] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < 18446744073709551615} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 163 0 163 32] Invariant1.invariant' trail f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 164 0 164 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 165 0 165 57] Unsat0.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)) (Type.creusat_trail_trail_Trail_assignments trail)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 191 0 191 44] Invariant2.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 166 0 190 3] match (result) with - | Type.CreuSat_ConflictAnalysis_Conflict_Ground -> NotSatisfiable0.not_satisfiable f - | Type.CreuSat_ConflictAnalysis_Conflict_Unit clause -> Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) && Seq.length (Model1.model clause) = 1 && VarsInRangeInner0.vars_in_range_inner (Model1.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) && NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model clause) && EquisatExtensionInner0.equisat_extension_inner clause (Model2.model f) - | Type.CreuSat_ConflictAnalysis_Conflict_Learned s_idx clause -> Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) && Seq.length (Model1.model clause) > 1 && VarsInRangeInner0.vars_in_range_inner (Model1.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) && NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model clause) && EquisatExtensionInner0.equisat_extension_inner clause (Model2.model f) && UInt64.to_int s_idx < Seq.length (Model1.model clause) - | Type.CreuSat_ConflictAnalysis_Conflict_Restart clause -> Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) && Seq.length (Model1.model clause) > 1 && VarsInRangeInner0.vars_in_range_inner (Model1.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) && NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model clause) && EquisatExtensionInner0.equisat_extension_inner clause (Model2.model f) - end } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 191 0 191 44] Invariant2.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } + use seq_ext.SeqExt + function pop [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 68 0 68 34] (s : Seq.seq t) : Seq.seq t = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 69 4 71 5] SeqExt.subsequence s 0 (Seq.length s - 1) + axiom pop_spec : forall s : Seq.seq t . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 64 0 64 24] Seq.length s > 0) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 67 0 67 75] forall i : (int) . 0 <= i /\ i < Seq.length (pop s) -> Seq.get (pop s) i = Seq.get s i) && ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 66 0 66 39] Seq.length (pop s) = Seq.length s - 1) && ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 65 0 65 51] pop s = SeqExt.subsequence s 0 (Seq.length s - 1)) +end +module CreuSat_Logic_LogicWatches_LemmaPopWatchMaintainsWatcherInvariant_Interface + use seq.Seq + use mach.int.Int + use mach.int.Int32 + use Type + clone CreuSat_Logic_LogicUtil_Pop_Interface as Pop0 with type t = Type.creusat_watches_watcher, axiom . + clone CreuSat_Logic_LogicWatches_WatcherCrefsInRange_Interface as WatcherCrefsInRange0 + function lemma_pop_watch_maintains_watcher_invariant (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) : () - = - var _0 : Type.creusat_conflictanalysis_conflict; - var f_1 : Type.creusat_formula_formula; - var trail_2 : Type.creusat_trail_trail; - var cref_3 : usize; - var d_4 : borrowed (Type.creusat_decision_decisions); - var decisionlevel_5 : usize; - var _6 : Type.creusat_trail_trail; - var to_bump_7 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var break_cond_8 : usize; - var _9 : bool; - var _10 : usize; - var path_c_11 : usize; - var seen_12 : Type.alloc_vec_vec bool (Type.alloc_alloc_global); - var _13 : usize; - var i_14 : usize; - var _15 : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global); - var clause_16 : Type.creusat_clause_clause; - var _17 : Type.creusat_clause_clause; - var _18 : Type.creusat_clause_clause; - var _19 : Type.creusat_formula_formula; - var _20 : usize; - var j_21 : usize; - var _22 : (); - var _23 : (); - var _24 : bool; - var _25 : usize; - var _26 : usize; - var _27 : Type.creusat_clause_clause; - var _28 : borrowed bool; - var _29 : borrowed (Type.alloc_vec_vec bool (Type.alloc_alloc_global)); - var _30 : usize; - var _31 : Type.creusat_lit_lit; - var _32 : Type.creusat_lit_lit; - var _33 : Type.creusat_clause_clause; - var _34 : usize; - var _35 : (); - var _36 : borrowed (Type.alloc_vec_vec usize (Type.alloc_alloc_global)); - var _37 : usize; - var _38 : Type.creusat_lit_lit; - var _39 : Type.creusat_lit_lit; - var _40 : Type.creusat_clause_clause; - var _41 : usize; - var _42 : (); - var _43 : bool; - var _44 : usize; - var _45 : usize; - var _46 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _47 : usize; - var _48 : Type.creusat_lit_lit; - var _49 : Type.creusat_lit_lit; - var _50 : Type.creusat_clause_clause; - var _51 : usize; - var _52 : usize; - var _53 : (); - var _54 : (); - var _55 : (); - var clause_56 : Type.creusat_clause_clause; - var _57 : (); - var _58 : bool; - var _59 : usize; - var _60 : usize; - var c_idx_61 : usize; - var _62 : Type.core_option_option usize; - var _63 : Type.creusat_clause_clause; - var _64 : Type.creusat_clause_clause; - var _65 : Type.creusat_trail_trail; - var _66 : borrowed usize; - var _67 : borrowed usize; - var _68 : Type.creusat_formula_formula; - var _69 : Type.alloc_vec_vec bool (Type.alloc_alloc_global); - var _70 : Type.alloc_vec_vec bool (Type.alloc_alloc_global); - var _71 : isize; - var c_idx_72 : usize; - var _73 : (); - var ante_74 : Type.creusat_clause_clause; - var _75 : Type.creusat_trail_reason; - var _76 : Type.creusat_trail_step; - var _77 : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global); - var _78 : usize; - var _79 : isize; - var c_80 : usize; - var _81 : Type.creusat_clause_clause; - var _82 : Type.creusat_formula_formula; - var _83 : usize; - var c_84 : usize; - var _85 : Type.creusat_clause_clause; - var _86 : Type.creusat_clause_clause; - var _87 : Type.creusat_formula_formula; - var _88 : usize; - var _89 : (); - var idx_90 : usize; - var _91 : Type.creusat_lit_lit; - var _92 : Type.creusat_trail_step; - var _93 : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global); - var _94 : usize; - var _95 : (); - var _96 : (); - var _97 : Type.creusat_formula_formula; - var _98 : borrowed (Type.creusat_clause_clause); - var _99 : borrowed (Type.creusat_clause_clause); - var _100 : Type.creusat_clause_clause; - var _101 : usize; - var _102 : usize; - var _103 : Type.creusat_trail_trail; - var _104 : Type.creusat_trail_trail; - var _105 : borrowed (Type.alloc_vec_vec bool (Type.alloc_alloc_global)); - var _106 : borrowed (Type.alloc_vec_vec bool (Type.alloc_alloc_global)); - var _107 : borrowed usize; - var _108 : borrowed usize; - var _109 : borrowed (Type.alloc_vec_vec usize (Type.alloc_alloc_global)); - var _110 : borrowed (Type.alloc_vec_vec usize (Type.alloc_alloc_global)); - var _111 : (); - var _112 : (); - var _113 : (); - var _114 : (); - var _115 : borrowed (Type.creusat_decision_decisions); - var _116 : Type.creusat_formula_formula; - var _117 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _118 : bool; - var _119 : usize; - var _120 : Type.creusat_clause_clause; - var _121 : bool; - var _122 : usize; - var _123 : Type.creusat_clause_clause; - var _124 : Type.creusat_clause_clause; - var _125 : (); - var _126 : bool; - var _127 : usize; - var _128 : usize; - var _129 : (); - var _130 : Type.creusat_clause_clause; - var k_131 : usize; - var s_idx_132 : usize; - var _133 : (); - var _134 : bool; - var _135 : usize; - var _136 : usize; - var _137 : Type.creusat_clause_clause; - var _138 : (); - var _139 : bool; - var _140 : usize; - var _141 : usize; - var _142 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _143 : usize; - var _144 : Type.creusat_lit_lit; - var _145 : Type.creusat_lit_lit; - var _146 : Type.creusat_clause_clause; - var _147 : usize; - var _148 : usize; - var _149 : (); - var _150 : usize; - var _151 : (); - var _152 : (); - var _153 : (); - var _154 : usize; - var _155 : Type.creusat_clause_clause; - { - f_1 <- f; - trail_2 <- trail; - cref_3 <- cref; - d_4 <- d; - goto BB0 - } - BB0 { - _6 <- trail_2; - decisionlevel_5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 193 24 193 46] DecisionLevel0.decision_level _6); - goto BB1 - } - BB1 { - to_bump_7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 194 22 194 32] New0.new ()); - goto BB2 - } - BB2 { - _10 <- decisionlevel_5; - _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 195 24 195 42] _10 = (0 : usize)); - switch (_9) - | False -> goto BB4 - | _ -> goto BB3 - end - } - BB3 { - break_cond_8 <- (0 : usize); - goto BB5 - } - BB4 { - break_cond_8 <- (1 : usize); - goto BB5 - } - BB5 { - path_c_11 <- (0 : usize); - _13 <- Type.creusat_formula_formula_Formula_num_vars f_1; - seen_12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 197 19 197 42] FromElem0.from_elem false _13); - goto BB6 - } - BB6 { - _15 <- Type.creusat_trail_trail_Trail_trail trail_2; - i_14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 198 16 198 33] Len0.len _15); - goto BB7 - } - BB7 { - _19 <- f_1; - _20 <- cref_3; - _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 199 17 199 24] Index0.index _19 _20); - goto BB8 - } - BB8 { - _17 <- _18; - clause_16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 199 17 199 32] Clone0.clone' _17); - goto BB9 - } - BB9 { - j_21 <- (0 : usize); - goto BB10 - } - BB10 { - goto BB11 - } - BB11 { - goto BB12 - } - BB12 { - goto BB13 - } - BB13 { - goto BB14 - } - BB14 { - invariant seen_is_clause { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 201 4 202 98] forall idx : (int) . 0 <= idx && idx < Seq.length (Model3.model seen_12) -> Seq.get (Model3.model seen_12) idx = (exists i : (int) . 0 <= i && i < UInt64.to_int j_21 && IndexLogic0.index_logic (Seq.get (Model1.model clause_16) i) = idx) }; - invariant seen_len { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 203 4 203 56] Seq.length (Model3.model seen_12) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; - invariant path_c_less { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 204 4 204 44] UInt64.to_int path_c_11 <= UInt64.to_int j_21 }; - invariant j_is_len { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 205 4 205 49] UInt64.to_int j_21 <= Seq.length (Model1.model clause_16) }; - invariant elems_less { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 206 4 206 68] ElemsLessThan0.elems_less_than (Model4.model to_bump_7) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1)) }; - _25 <- j_21; - _27 <- clause_16; - _26 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 207 14 207 26] Len1.len _27); - goto BB15 - } - BB15 { - _24 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 207 10 207 26] _25 < _26); - switch (_24) - | False -> goto BB29 - | _ -> goto BB16 - end - } - BB16 { - _29 <- borrow_mut seen_12; - seen_12 <- ^ _29; - _33 <- clause_16; - _34 <- j_21; - _32 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 208 13 208 22] Index1.index _33 _34); - goto BB17 - } - BB17 { - _31 <- _32; - _30 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 208 13 208 30] Index2.index _31); - goto BB18 - } - BB18 { - _28 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 208 8 208 31] IndexMut0.index_mut _29 _30); - goto BB19 - } - BB19 { - _28 <- { _28 with current = true }; - assume { Resolve0.resolve _28 }; - _36 <- borrow_mut to_bump_7; - to_bump_7 <- ^ _36; - _40 <- clause_16; - _41 <- j_21; - _39 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 209 21 209 30] Index1.index _40 _41); - goto BB20 - } - BB20 { - _38 <- _39; - _37 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 209 21 209 38] Index2.index _38); - goto BB21 - } - BB21 { - _35 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 209 8 209 39] Push0.push _36 _37); - goto BB22 - } - BB22 { - _46 <- Type.creusat_trail_trail_Trail_lit_to_level trail_2; - _50 <- clause_16; - _51 <- j_21; - _49 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 210 30 210 39] Index1.index _50 _51); - goto BB23 - } - BB23 { - _48 <- _49; - _47 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 210 30 210 47] Index2.index _48); - goto BB24 - } - BB24 { - _45 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 210 11 210 48] Index3.index _46 _47); - goto BB25 - } - BB25 { - _44 <- _45; - _52 <- decisionlevel_5; - _43 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 210 11 210 65] _44 >= _52); - switch (_43) - | False -> goto BB27 - | _ -> goto BB26 - end - } - BB26 { - path_c_11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 211 12 211 23] path_c_11 + (1 : usize)); - _42 <- (); - goto BB28 - } - BB27 { - _42 <- (); - goto BB28 - } - BB28 { - j_21 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 213 8 213 14] j_21 + (1 : usize)); - _23 <- (); - goto BB14 - } - BB29 { - _22 <- (); - clause_56 <- clause_16; - goto BB30 - } - BB30 { - goto BB31 - } - BB31 { - goto BB32 - } - BB32 { - goto BB33 - } - BB33 { - goto BB34 - } - BB34 { - goto BB35 - } - BB35 { - goto BB36 - } - BB36 { - goto BB37 - } - BB37 { - invariant seen_len { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 216 4 216 56] Seq.length (Model3.model seen_12) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; - invariant seen_is_clause { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 217 4 218 54] forall idx : (int) . 0 <= idx && idx < Seq.length (Model3.model seen_12) -> Seq.get (Model3.model seen_12) idx = IdxInLogic0.idx_in_logic idx (Model1.model clause_56) }; - invariant clause_vars { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 219 4 219 60] Invariant3.invariant' clause_56 (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1)) }; - invariant clause_equi { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 220 4 220 66] EquisatExtensionInner0.equisat_extension_inner clause_56 (Model2.model f_1) }; - invariant clause_unsat { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 221 4 221 63] Unsat0.unsat clause_56 (Type.creusat_trail_trail_Trail_assignments trail_2) }; - invariant i_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 222 4 222 64] 0 <= UInt64.to_int i_14 && UInt64.to_int i_14 <= Seq.length (Model5.model (Type.creusat_trail_trail_Trail_trail trail_2)) }; - invariant path_c_less { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 223 4 223 57] UInt64.to_int path_c_11 <= Seq.length (Model1.model clause_56) }; - invariant elems_less { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 224 4 224 68] ElemsLessThan0.elems_less_than (Model4.model to_bump_7) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1)) }; - _59 <- path_c_11; - _60 <- break_cond_8; - _58 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 225 10 225 29] _59 > _60); - switch (_58) - | False -> goto BB54 - | _ -> goto BB38 - end - } - BB38 { - _64 <- clause_56; - _63 <- _64; - _65 <- trail_2; - _67 <- borrow_mut i_14; - i_14 <- ^ _67; - _66 <- borrow_mut ( * _67); - _67 <- { _67 with current = ( ^ _66) }; - _68 <- f_1; - _70 <- seen_12; - _69 <- _70; - _62 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 226 26 226 74] ChooseLiteral0.choose_literal _63 _65 _66 _68 _69); - goto BB39 - } - BB39 { - assume { Resolve1.resolve _67 }; - switch (_62) - | Type.Core_Option_Option_None -> goto BB40 - | Type.Core_Option_Option_Some _ -> goto BB42 - end - } - BB40 { - _57 <- (); - goto BB55 - } - BB41 { - assume { Resolve2.resolve d_4 }; - assume { Resolve3.resolve to_bump_7 }; - assume { Resolve4.resolve seen_12 }; - absurd - } - BB42 { - c_idx_72 <- Type.core_option_option_Some_0 _62; - c_idx_61 <- c_idx_72; - _77 <- Type.creusat_trail_trail_Trail_trail trail_2; - _78 <- i_14; - _76 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 230 26 230 40] Index4.index _77 _78); - goto BB43 - } - BB43 { - _75 <- Type.creusat_trail_step_Step_reason _76; - switch (_75) - | Type.CreuSat_Trail_Reason_Unit _ -> goto BB47 - | Type.CreuSat_Trail_Reason_Long _ -> goto BB45 - | _ -> goto BB44 - end - } - BB44 { - _57 <- (); - goto BB55 - } - BB45 { - c_80 <- Type.creusat_trail_reason_Long_0 _75; - _82 <- f_1; - _83 <- c_80; - _81 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 231 32 231 37] Index0.index _82 _83); - goto BB46 - } - BB46 { - ante_74 <- _81; - goto BB49 - } - BB47 { - c_84 <- Type.creusat_trail_reason_Unit_0 _75; - _87 <- f_1; - _88 <- c_84; - _86 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 232 32 232 37] Index0.index _87 _88); - goto BB48 - } - BB48 { - _85 <- _86; - ante_74 <- _85; - goto BB49 - } - BB49 { - _93 <- Type.creusat_trail_trail_Trail_trail trail_2; - _94 <- i_14; - _92 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 235 18 235 32] Index4.index _93 _94); - goto BB50 - } - BB50 { - _91 <- Type.creusat_trail_step_Step_lit _92; - idx_90 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 235 18 235 44] Index2.index _91); - goto BB51 - } - BB51 { - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 236 8 236 72] SameIdxSamePolarityExcept0.same_idx_same_polarity_except clause_56 ante_74 (UInt64.to_int idx_90) }; - goto BB52 - } - BB52 { - _95 <- (); - _97 <- f_1; - _99 <- borrow_mut clause_56; - clause_56 <- ^ _99; - _98 <- borrow_mut ( * _99); - _99 <- { _99 with current = ( ^ _98) }; - _100 <- ante_74; - _101 <- idx_90; - _102 <- c_idx_61; - _104 <- trail_2; - _103 <- _104; - _106 <- borrow_mut seen_12; - seen_12 <- ^ _106; - _105 <- borrow_mut ( * _106); - _106 <- { _106 with current = ( ^ _105) }; - _108 <- borrow_mut path_c_11; - path_c_11 <- ^ _108; - _107 <- borrow_mut ( * _108); - _108 <- { _108 with current = ( ^ _107) }; - _110 <- borrow_mut to_bump_7; - to_bump_7 <- ^ _110; - _109 <- borrow_mut ( * _110); - _110 <- { _110 with current = ( ^ _109) }; - _96 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 237 8 237 95] Resolve5.resolve _97 _98 _100 _101 _102 _103 _105 _107 _109); - goto BB53 - } - BB53 { - assume { Resolve6.resolve _99 }; - assume { Resolve7.resolve _106 }; - assume { Resolve1.resolve _108 }; - assume { Resolve8.resolve _110 }; - _23 <- (); - goto BB37 - } - BB54 { - _57 <- (); - goto BB56 - } - BB55 { - goto BB56 - } - BB56 { - _115 <- borrow_mut ( * d_4); - d_4 <- { d_4 with current = ( ^ _115) }; - _116 <- f_1; - assume { Resolve3.resolve _117 }; - _117 <- to_bump_7; - _114 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 240 4 240 36] IncrementAndMove0.increment_and_move _115 _116 _117); - goto BB57 - } - BB57 { - assume { Resolve2.resolve d_4 }; - _120 <- clause_56; - _119 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 241 7 241 19] Len1.len _120); - goto BB58 - } - BB58 { - _118 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 241 7 241 24] _119 = (0 : usize)); - switch (_118) - | False -> goto BB60 - | _ -> goto BB59 - end - } - BB59 { - _0 <- Type.CreuSat_ConflictAnalysis_Conflict_Ground; - goto BB82 - } - BB60 { - _123 <- clause_56; - _122 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 243 14 243 26] Len1.len _123); - goto BB61 - } - BB61 { - _121 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 243 14 243 31] _122 = (1 : usize)); - switch (_121) - | False -> goto BB64 - | _ -> goto BB62 - end - } - BB62 { - _124 <- clause_56; - _0 <- Type.CreuSat_ConflictAnalysis_Conflict_Unit _124; - goto BB63 - } - BB63 { - goto BB81 - } - BB64 { - _127 <- path_c_11; - _128 <- break_cond_8; - _126 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 247 11 247 30] _127 > _128); - switch (_126) - | False -> goto BB67 - | _ -> goto BB65 - end - } - BB65 { - _130 <- clause_56; - _0 <- Type.CreuSat_ConflictAnalysis_Conflict_Restart _130; - goto BB66 - } - BB66 { - goto BB87 - } - BB67 { - _125 <- (); - k_131 <- (0 : usize); - s_idx_132 <- (0 : usize); - goto BB68 - } - BB68 { - goto BB69 - } - BB69 { - goto BB70 - } - BB70 { - invariant k_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 252 8 252 52] UInt64.to_int k_131 <= Seq.length (Model1.model clause_56) }; - invariant s_idx_ok { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 253 8 253 56] UInt64.to_int s_idx_132 < Seq.length (Model1.model clause_56) }; - _135 <- k_131; - _137 <- clause_56; - _136 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 254 18 254 30] Len1.len _137); - goto BB71 - } - BB71 { - _134 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 254 14 254 30] _135 < _136); - switch (_134) - | False -> goto BB78 - | _ -> goto BB72 - end - } - BB72 { - _142 <- Type.creusat_trail_trail_Trail_lit_to_level trail_2; - _146 <- clause_56; - _147 <- k_131; - _145 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 255 34 255 43] Index1.index _146 _147); - goto BB73 - } - BB73 { - _144 <- _145; - _143 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 255 34 255 51] Index2.index _144); - goto BB74 - } - BB74 { - _141 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 255 15 255 52] Index3.index _142 _143); - goto BB75 - } - BB75 { - _140 <- _141; - _148 <- decisionlevel_5; - _139 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 255 15 255 69] _140 = _148); - switch (_139) - | False -> goto BB77 - | _ -> goto BB76 - end - } - BB76 { - _150 <- k_131; - s_idx_132 <- _150; - _133 <- (); - goto BB79 - } - BB77 { - _138 <- (); - k_131 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 259 12 259 18] k_131 + (1 : usize)); - _23 <- (); - goto BB70 - } - BB78 { - _133 <- (); - goto BB79 - } - BB79 { - _154 <- s_idx_132; - _155 <- clause_56; - _0 <- Type.CreuSat_ConflictAnalysis_Conflict_Learned _154 _155; - goto BB80 - } - BB80 { - goto BB81 - } - BB81 { - goto BB82 - } - BB82 { - goto BB83 - } - BB83 { - goto BB84 - } - BB84 { - goto BB85 - } - BB85 { - assume { Resolve4.resolve seen_12 }; - goto BB86 - } - BB86 { - goto BB91 - } - BB87 { - goto BB88 - } - BB88 { - goto BB89 - } - BB89 { - assume { Resolve4.resolve seen_12 }; - goto BB90 - } - BB90 { - goto BB91 - } - BB91 { - return _0 - } - end -module CreuSat_ConflictAnalysis_ResolveEmptyClause_Interface - use mach.int.UInt64 +module CreuSat_Logic_LogicWatches_LemmaPopWatchMaintainsWatcherInvariant use seq.Seq use mach.int.Int - use prelude.Prelude + use mach.int.Int32 use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface as NotSatisfiable0 - clone CreuSat_Logic_LogicClause_Impl2_Unsat_Interface as Unsat0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val resolve_empty_clause [@cfg:stackify] (f : Type.creusat_formula_formula) (trail : Type.creusat_trail_trail) (cref : usize) : bool - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 266 0 266 26] Invariant0.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 267 0 267 32] Invariant1.invariant' trail f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 268 0 268 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 269 0 269 57] Unsat0.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)) (Type.creusat_trail_trail_Trail_assignments trail)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 270 0 270 42] result -> NotSatisfiable0.not_satisfiable f } + clone CreuSat_Logic_LogicUtil_Pop_Interface as Pop0 with type t = Type.creusat_watches_watcher, axiom . + clone CreuSat_Logic_LogicWatches_WatcherCrefsInRange_Interface as WatcherCrefsInRange0 + function lemma_pop_watch_maintains_watcher_invariant [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 55 0 55 79] (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) : () + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 50 0 50 8] () + axiom lemma_pop_watch_maintains_watcher_invariant_spec : forall w : Seq.seq (Type.creusat_watches_watcher), f : Type.creusat_formula_formula . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 52 0 52 24] Seq.length w > 0) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 53 0 53 41] WatcherCrefsInRange0.watcher_crefs_in_range w f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 54 0 54 45] WatcherCrefsInRange0.watcher_crefs_in_range (Pop0.pop w) f) end -module CreuSat_ConflictAnalysis_ResolveEmptyClause +module CreuSat_Watches_Impl0_Unwatch_Interface use mach.int.UInt64 - use seq.Seq use mach.int.Int use prelude.Prelude - use Type use mach.int.Int32 - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = IdxInLogic0.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner1.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = Invariant5.index_logic, function IndexLogic0.index_logic = SatInner0.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = UnsatInner1.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model2.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model2 with function Model0.model = NotSatisfiable0.model, - function Model1.model = ClauseIsSeen0.model, function Model1.model = InvariantMirror0.model, - function Model0.model = FormulaInvariant0.model, function Model0.model = UnsatInner0.model, - function Model0.model = Invariant2.model, function Model1.model = UnitAreSat0.model, - function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, - function Model1.model = Invariant6.model, function Model0.model = SatInner1.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner1 with predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss0.formula_sat_inner - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = Invariant4.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, - function Model0.model = Model3.model, function Model3.model = InvariantNoDecisionMirror0.model, - function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant6.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant6 with predicate Invariant1.invariant' = Invariant4.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner1 with predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner, - predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant2.invariant_internal - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtension0.equisat_extension_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model6.model, axiom . - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model6 with function Model0.model = Unsat0.model, - function Model2.model = InvariantNoDecision0.model, function Model0.model = InvariantNoDecisionMirror0.model, - function Model0.model = Invariant3.model, function Model1.model = TrailEntriesAreAssigned0.model, - function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicLit_IdxInLogic as IdxInLogic0 with predicate IdxInLogic0.idx_in_logic = ClauseIsSeen0.idx_in_logic - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model3 with function Model0.model = Invariant0.model, - function Model0.model = EquisatExtension0.model - clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with predicate EquisatExtension0.equisat_extension = NotSatisfiable0.equisat_extension - clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, + use seq.Seq + use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant2 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant1 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, axiom . - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = bool, type a = Type.alloc_alloc_global, - function Model0.model = ClauseIsSeen0.model, axiom . - clone CreuSat_Logic_LogicClause_Impl2_ClauseIsSeen as ClauseIsSeen0 - clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable as NotSatisfiable0 - clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat0 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - use mach.int.Int64 - clone CreusotContracts_Logic_Int_Impl18_Model as Model16 with function Model0.model = Model11.model - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy6 with type t = usize, type a = Type.alloc_alloc_global, - type ModelTy0.modelTy = Model15.modelTy - clone CreuSat_Logic_LogicUtil_ElemsLessThan as ElemsLessThan0 with predicate ElemsLessThan0.elems_less_than = Resolve4.elems_less_than - clone CreusotContracts_Logic_Model_Impl1_Model as Model15 with type t = Type.alloc_vec_vec usize (Type.alloc_alloc_global), - function Model5.model = Resolve4.model - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy4 with type t = bool, type a = Type.alloc_alloc_global, - type ModelTy0.modelTy = Model12.modelTy, type ModelTy0.modelTy = Model14.modelTy - clone CreusotContracts_Logic_Model_Impl1_Model as Model14 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global), - function Model4.model = Resolve4.model - clone CreuSat_Logic_LogicClause_Impl2_SameIdxSamePolarityExcept as SameIdxSamePolarityExcept0 with predicate SameIdxSamePolarityExcept0.same_idx_same_polarity_except = Resolve4.same_idx_same_polarity_except - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model10.modelTy, - type ModelTy0.modelTy = Model13.modelTy - clone CreusotContracts_Logic_Model_Impl1_Model as Model13 with type t = Type.creusat_clause_clause, - function Model0.model = Resolve4.model - clone CreuSat_Logic_LogicClause_Impl2_InFormula as InFormula0 with predicate InFormula0.in_formula = Resolve4.in_formula - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy5 with type t = Type.creusat_trail_step - clone Core_Slice_Index_Impl2_Output as Output1 with type t = Type.creusat_trail_step, - type Output0.output = Index3.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = Type.creusat_trail_step, - predicate HasValue0.has_value = Index3.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = Type.creusat_trail_step, - predicate InBounds0.in_bounds = Index3.in_bounds - clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve9 with type t = usize, - predicate Resolve0.resolve = Resolve3.resolve - clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve8 with type t = bool, - predicate Resolve0.resolve = Resolve2.resolve - clone CreusotContracts_Logic_Int_Impl18_ModelTy as ModelTy3 with type ModelTy0.modelTy = Model11.modelTy - clone CreuSat_Logic_LogicLit_Impl1_IsOpp as IsOpp0 with predicate IsOpp0.is_opp = ChooseLiteral0.is_opp, - predicate IsOpp0.is_opp = Resolve4.is_opp - clone CreusotContracts_Logic_Model_Impl0_Model as Model12 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global), - function Model2.model = ChooseLiteral0.model - clone CreusotContracts_Logic_Model_Impl1_Model as Model11 with type t = usize, - function Model0.model = ChooseLiteral0.model, function Model3.model = Resolve4.model - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy2 with type t = bool - clone Core_Slice_Index_Impl2_Output as Output0 with type t = bool, type Output0.output = IndexMut0.output - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = bool, - predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = bool, - predicate HasValue0.has_value = IndexMut0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = bool, - predicate InBounds0.in_bounds = IndexMut0.in_bounds - clone CreusotContracts_Logic_Model_Impl0_Model as Model10 with type t = Type.creusat_clause_clause, - function Model0.model = Len1.model, function Model0.model = Index1.model, - function Model3.model = ChooseLiteral0.model, function Model1.model = Resolve4.model - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model9.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model9 with type t = Type.creusat_formula_formula, - function Model0.model = Index0.model, function Model6.model = Resolve4.model - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve7 with type t = Type.alloc_vec_vec usize (Type.alloc_alloc_global) - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve6 with type t = Type.alloc_vec_vec bool (Type.alloc_alloc_global) - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve5 with type t = Type.creusat_clause_clause - clone CreuSat_ConflictAnalysis_Resolve_Interface as Resolve4 - clone Alloc_Vec_Impl16_Index_Interface as Index3 with type t = Type.creusat_trail_step, type i = usize, - type a = Type.alloc_alloc_global - clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve3 with type t = usize - clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve2 with type t = bool - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = usize - clone CreuSat_ConflictAnalysis_ChooseLiteral_Interface as ChooseLiteral0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = bool - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = bool, type i = usize, - type a = Type.alloc_alloc_global - clone CreuSat_Lit_Impl1_Index_Interface as Index2 - clone CreuSat_Clause_Impl0_Index_Interface as Index1 - clone CreuSat_Clause_Impl3_Len_Interface as Len1 - clone Alloc_Vec_Impl0_New_Interface as New0 with type t = usize - clone CreuSat_Clause_Impl2_Clone_Interface as Clone0 - clone CreuSat_Formula_Impl0_Index_Interface as Index0 - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global - clone Alloc_Vec_FromElem_Interface as FromElem0 with type t = bool - clone CreuSat_Trail_Impl0_DecisionLevel_Interface as DecisionLevel0 - let rec cfg resolve_empty_clause [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 271 0 271 76] (f : Type.creusat_formula_formula) (trail : Type.creusat_trail_trail) (cref : usize) : bool - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 266 0 266 26] Invariant0.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 267 0 267 32] Invariant1.invariant' trail f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 268 0 268 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 269 0 269 57] Unsat0.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)) (Type.creusat_trail_trail_Trail_assignments trail)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 270 0 270 42] result -> NotSatisfiable0.not_satisfiable f } + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant0 + val unwatch [@cfg:stackify] (self : borrowed (Type.creusat_watches_watches)) (f : Type.creusat_formula_formula) (trail : Type.creusat_trail_trail) (cref : usize) (lit : Type.creusat_lit_lit) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 155 4 155 42] Invariant0.invariant' ( * self) f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 156 4 156 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 157 4 157 48] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 158 4 158 30] Invariant1.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 159 4 159 36] Invariant2.invariant' trail f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 160 4 160 43] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 161 4 161 50] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) >= 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 155 4 155 42] Invariant0.invariant' ( ^ self) f } - = - var _0 : bool; - var f_1 : Type.creusat_formula_formula; - var trail_2 : Type.creusat_trail_trail; - var cref_3 : usize; - var decisionlevel_4 : usize; - var _5 : Type.creusat_trail_trail; - var seen_6 : Type.alloc_vec_vec bool (Type.alloc_alloc_global); - var _7 : usize; - var i_8 : usize; - var _9 : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global); - var clause_10 : Type.creusat_clause_clause; - var _11 : Type.creusat_clause_clause; - var _12 : Type.creusat_clause_clause; - var _13 : Type.creusat_formula_formula; - var _14 : usize; - var to_bump_15 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var j_16 : usize; - var _17 : (); - var _18 : (); - var _19 : bool; - var _20 : usize; - var _21 : usize; - var _22 : Type.creusat_clause_clause; - var _23 : borrowed bool; - var _24 : borrowed (Type.alloc_vec_vec bool (Type.alloc_alloc_global)); - var _25 : usize; - var _26 : Type.creusat_lit_lit; - var _27 : Type.creusat_lit_lit; - var _28 : Type.creusat_clause_clause; - var _29 : usize; - var _30 : (); - var _31 : (); - var _32 : (); - var clause_33 : Type.creusat_clause_clause; - var _34 : (); - var c_idx_35 : usize; - var _36 : Type.core_option_option usize; - var _37 : Type.creusat_clause_clause; - var _38 : Type.creusat_clause_clause; - var _39 : Type.creusat_trail_trail; - var _40 : borrowed usize; - var _41 : borrowed usize; - var _42 : Type.creusat_formula_formula; - var _43 : Type.alloc_vec_vec bool (Type.alloc_alloc_global); - var _44 : Type.alloc_vec_vec bool (Type.alloc_alloc_global); - var _45 : isize; - var c_idx_46 : usize; - var _47 : (); - var ante_48 : Type.creusat_clause_clause; - var _49 : Type.creusat_trail_reason; - var _50 : Type.creusat_trail_step; - var _51 : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global); - var _52 : usize; - var _53 : isize; - var c_54 : usize; - var _55 : Type.creusat_clause_clause; - var _56 : Type.creusat_formula_formula; - var _57 : usize; - var _58 : (); - var path_c_59 : usize; - var _60 : (); - var _61 : Type.creusat_formula_formula; - var _62 : borrowed (Type.creusat_clause_clause); - var _63 : borrowed (Type.creusat_clause_clause); - var _64 : Type.creusat_clause_clause; - var _65 : usize; - var _66 : Type.creusat_lit_lit; - var _67 : Type.creusat_trail_step; - var _68 : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global); - var _69 : usize; - var _70 : usize; - var _71 : Type.creusat_trail_trail; - var _72 : Type.creusat_trail_trail; - var _73 : borrowed (Type.alloc_vec_vec bool (Type.alloc_alloc_global)); - var _74 : borrowed (Type.alloc_vec_vec bool (Type.alloc_alloc_global)); - var _75 : borrowed usize; - var _76 : borrowed usize; - var _77 : borrowed (Type.alloc_vec_vec usize (Type.alloc_alloc_global)); - var _78 : borrowed (Type.alloc_vec_vec usize (Type.alloc_alloc_global)); - var _79 : bool; - var _80 : usize; - var _81 : Type.creusat_clause_clause; - var _82 : (); - var _83 : (); - { - f_1 <- f; - trail_2 <- trail; - cref_3 <- cref; - goto BB0 - } - BB0 { - _5 <- trail_2; - decisionlevel_4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 272 24 272 46] DecisionLevel0.decision_level _5); - goto BB1 - } - BB1 { - _7 <- Type.creusat_formula_formula_Formula_num_vars f_1; - seen_6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 273 19 273 42] FromElem0.from_elem false _7); - goto BB2 - } - BB2 { - _9 <- Type.creusat_trail_trail_Trail_trail trail_2; - i_8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 274 16 274 33] Len0.len _9); - goto BB3 - } - BB3 { - _13 <- f_1; - _14 <- cref_3; - _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 275 17 275 24] Index0.index _13 _14); - goto BB4 - } - BB4 { - _11 <- _12; - clause_10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 275 17 275 32] Clone0.clone' _11); - goto BB5 - } - BB5 { - to_bump_15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 276 22 276 32] New0.new ()); - goto BB6 - } - BB6 { - j_16 <- (0 : usize); - goto BB7 - } - BB7 { - goto BB8 - } - BB8 { - goto BB9 - } - BB9 { - goto BB10 - } - BB10 { - invariant seen_is_clause { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 278 4 279 98] forall idx : (int) . 0 <= idx && idx < Seq.length (Model1.model seen_6) -> Seq.get (Model1.model seen_6) idx = (exists i : (int) . 0 <= i && i < UInt64.to_int j_16 && IndexLogic0.index_logic (Seq.get (Model2.model clause_10) i) = idx) }; - invariant seen_len { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 280 4 280 56] Seq.length (Model1.model seen_6) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; - invariant j_is_len { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 281 4 281 49] UInt64.to_int j_16 <= Seq.length (Model2.model clause_10) }; - _20 <- j_16; - _22 <- clause_10; - _21 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 283 14 283 26] Len1.len _22); - goto BB11 - } - BB11 { - _19 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 283 10 283 26] _20 < _21); - switch (_19) - | False -> goto BB16 - | _ -> goto BB12 - end - } - BB12 { - _24 <- borrow_mut seen_6; - seen_6 <- ^ _24; - _28 <- clause_10; - _29 <- j_16; - _27 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 284 13 284 22] Index1.index _28 _29); - goto BB13 - } - BB13 { - _26 <- _27; - _25 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 284 13 284 30] Index2.index _26); - goto BB14 - } - BB14 { - _23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 284 8 284 31] IndexMut0.index_mut _24 _25); - goto BB15 - } - BB15 { - _23 <- { _23 with current = true }; - assume { Resolve0.resolve _23 }; - j_16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 285 8 285 14] j_16 + (1 : usize)); - _18 <- (); - goto BB10 - } - BB16 { - _17 <- (); - clause_33 <- clause_10; - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 288 4 288 46] ClauseIsSeen0.clause_is_seen clause_33 seen_6 }; - goto BB17 - } - BB17 { - _34 <- (); - _38 <- clause_33; - _37 <- _38; - _39 <- trail_2; - _41 <- borrow_mut i_8; - i_8 <- ^ _41; - _40 <- borrow_mut ( * _41); - _41 <- { _41 with current = ( ^ _40) }; - _42 <- f_1; - _44 <- seen_6; - _43 <- _44; - _36 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 289 22 289 70] ChooseLiteral0.choose_literal _37 _39 _40 _42 _43); - goto BB18 - } - BB18 { - assume { Resolve1.resolve _41 }; - switch (_36) - | Type.Core_Option_Option_None -> goto BB19 - | Type.Core_Option_Option_Some _ -> goto BB21 - end - } - BB19 { - _0 <- false; - goto BB34 - } - BB20 { - assume { Resolve2.resolve seen_6 }; - assume { Resolve3.resolve to_bump_15 }; - absurd - } - BB21 { - c_idx_46 <- Type.core_option_option_Some_0 _36; - c_idx_35 <- c_idx_46; - _51 <- Type.creusat_trail_trail_Trail_trail trail_2; - _52 <- i_8; - _50 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 293 22 293 36] Index3.index _51 _52); - goto BB22 - } - BB22 { - _49 <- Type.creusat_trail_step_Step_reason _50; - switch (_49) - | Type.CreuSat_Trail_Reason_Unit _ -> goto BB24 - | _ -> goto BB23 - end - } - BB23 { - _0 <- false; - goto BB33 - } - BB24 { - c_54 <- Type.creusat_trail_reason_Unit_0 _49; - _56 <- f_1; - _57 <- c_54; - _55 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 295 28 295 33] Index0.index _56 _57); - goto BB25 - } - BB25 { - ante_48 <- _55; - path_c_59 <- (1 : usize); - _61 <- f_1; - _63 <- borrow_mut clause_33; - clause_33 <- ^ _63; - _62 <- borrow_mut ( * _63); - _63 <- { _63 with current = ( ^ _62) }; - _64 <- ante_48; - _68 <- Type.creusat_trail_trail_Trail_trail trail_2; - _69 <- i_8; - _67 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 299 34 299 48] Index3.index _68 _69); - goto BB26 - } - BB26 { - _66 <- Type.creusat_trail_step_Step_lit _67; - _65 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 299 34 299 60] Index2.index _66); - goto BB27 - } - BB27 { - _70 <- c_idx_35; - _72 <- trail_2; - _71 <- _72; - _74 <- borrow_mut seen_6; - seen_6 <- ^ _74; - _73 <- borrow_mut ( * _74); - _74 <- { _74 with current = ( ^ _73) }; - _76 <- borrow_mut path_c_59; - path_c_59 <- ^ _76; - _75 <- borrow_mut ( * _76); - _76 <- { _76 with current = ( ^ _75) }; - _78 <- borrow_mut to_bump_15; - to_bump_15 <- ^ _78; - _77 <- borrow_mut ( * _78); - _78 <- { _78 with current = ( ^ _77) }; - _60 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 299 4 299 114] Resolve4.resolve _61 _62 _64 _65 _70 _71 _73 _75 _77); - goto BB28 - } - BB28 { - assume { Resolve5.resolve _63 }; - assume { Resolve6.resolve _74 }; - assume { Resolve1.resolve _76 }; - assume { Resolve7.resolve _78 }; - _81 <- clause_33; - _80 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 300 7 300 19] Len1.len _81); - goto BB29 - } - BB29 { - _79 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/conflict_analysis.rs" 300 7 300 24] _80 = (0 : usize)); - switch (_79) - | False -> goto BB31 - | _ -> goto BB30 - end - } - BB30 { - _0 <- true; - goto BB32 - } - BB31 { - _0 <- false; - goto BB32 - } - BB32 { - goto BB33 - } - BB33 { - goto BB34 - } - BB34 { - goto BB35 - } - BB35 { - goto BB36 - } - BB36 { - assume { Resolve3.resolve to_bump_15 }; - goto BB37 - } - BB37 { - goto BB38 - } - BB38 { - assume { Resolve2.resolve seen_6 }; - return _0 - } - end -module CreuSat_Decision_Impl2_Clone_Interface +module CreuSat_Formula_Impl2_DeleteClause_Interface + use mach.int.UInt64 + use mach.int.Int use prelude.Prelude + use mach.int.Int32 + use seq.Seq use Type - val clone' [@cfg:stackify] (self : Type.creusat_decision_node) : Type.creusat_decision_node + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant2 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant1 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant0 + val delete_clause [@cfg:stackify] (self : borrowed (Type.creusat_formula_formula)) (cref : usize) (watches : borrowed (Type.creusat_watches_watches)) (t : Type.creusat_trail_trail) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 208 4 208 51] Invariant0.invariant' ( * watches) ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 209 4 209 40] Invariant1.invariant' ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 210 4 210 42] Invariant2.invariant' t ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 211 4 211 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 212 4 212 52] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * self))) (UInt64.to_int cref))) > 1} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 213 4 213 46] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * self)))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 208 4 208 51] Invariant0.invariant' ( ^ watches) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 209 4 209 40] Invariant1.invariant' ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 210 4 210 42] Invariant2.invariant' t ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 214 4 214 35] Equisat0.equisat ( * self) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 215 4 215 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } + end -module CreuSat_Decision_Impl2_Clone +module CreuSat_Formula_Impl2_DeleteClauses_Interface + use mach.int.UInt64 + use mach.int.Int use prelude.Prelude + use mach.int.Int32 use Type - let rec cfg clone' [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 11 9 11 14] (self : Type.creusat_decision_node) : Type.creusat_decision_node + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant2 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + val delete_clauses [@cfg:stackify] (self : borrowed (Type.creusat_formula_formula)) (watches : borrowed (Type.creusat_watches_watches)) (t : Type.creusat_trail_trail) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 229 4 229 40] Invariant0.invariant' ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 230 4 230 51] Invariant1.invariant' ( * watches) ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 231 4 231 42] Invariant2.invariant' t ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 232 4 232 35] Invariant2.invariant' t ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 233 4 233 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 229 4 229 40] Invariant0.invariant' ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 230 4 230 51] Invariant1.invariant' ( ^ watches) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 231 4 231 42] Invariant2.invariant' t ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 234 4 234 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 235 4 235 35] Equisat0.equisat ( * self) ( ^ self) } - = - var _0 : Type.creusat_decision_node; - var self_1 : Type.creusat_decision_node; - { - self_1 <- self; - goto BB0 - } - BB0 { - _0 <- self_1; - return _0 - } - end -module CreuSat_Decision_Impl0_Default_Interface +module CreuSat_Formula_Impl2_SimplifyFormula_Interface use mach.int.UInt64 use mach.int.Int use prelude.Prelude use mach.int.Int32 use Type - val default [@cfg:stackify] (_ : ()) : Type.creusat_decision_node - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 21 4 21 43] UInt64.to_int (Type.creusat_decision_node_Node_next result) = 18446744073709551615 } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 22 4 22 43] UInt64.to_int (Type.creusat_decision_node_Node_prev result) = 18446744073709551615 } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 23 4 23 33] UInt64.to_int (Type.creusat_decision_node_Node_ts result) = 0 } + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant2 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + val simplify_formula [@cfg:stackify] (self : borrowed (Type.creusat_formula_formula)) (watches : borrowed (Type.creusat_watches_watches)) (t : Type.creusat_trail_trail) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 262 4 262 40] Invariant0.invariant' ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 263 4 263 51] Invariant1.invariant' ( * watches) ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 264 4 264 42] Invariant2.invariant' t ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 265 4 265 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 262 4 262 40] Invariant0.invariant' ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 263 4 263 51] Invariant1.invariant' ( ^ watches) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 264 4 264 42] Invariant2.invariant' t ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 266 4 266 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 267 4 267 35] Equisat0.equisat ( * self) ( ^ self) } end -module CreuSat_Decision_Impl0_Default +module CreuSat_Formula_Impl2_ReduceDb_Interface use mach.int.UInt64 use mach.int.Int use prelude.Prelude use mach.int.Int32 use Type - let rec cfg default [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 24 4 24 24] (_ : ()) : Type.creusat_decision_node - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 21 4 21 43] UInt64.to_int (Type.creusat_decision_node_Node_next result) = 18446744073709551615 } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 22 4 22 43] UInt64.to_int (Type.creusat_decision_node_Node_prev result) = 18446744073709551615 } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 23 4 23 33] UInt64.to_int (Type.creusat_decision_node_Node_ts result) = 0 } - - = - var _0 : Type.creusat_decision_node; - { - goto BB0 - } - BB0 { - _0 <- Type.CreuSat_Decision_Node (18446744073709551615 : usize) (18446744073709551615 : usize) (0 : usize); - return _0 - } - -end -module Core_Default_Default_Default_Interface - type self - val default [@cfg:stackify] (_ : ()) : self - requires {false} - -end -module Core_Default_Default_Default - type self - val default [@cfg:stackify] (_ : ()) : self - requires {false} - -end -module CreuSat_Decision_Impl0 - use Type - clone CreuSat_Decision_Impl0_Default_Interface as Default0 with val default = Default1.default - clone Core_Default_Default_Default_Interface as Default1 with type self = Type.creusat_decision_node -end -module CreuSat_Decision_Impl1_MakeLinkedList_Interface - use mach.int.Int - use mach.int.Int32 - use mach.int.UInt64 - use prelude.Prelude - use seq.Seq - use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant1 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = usize, type a = Type.alloc_alloc_global, + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant2 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, axiom . - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val make_linked_list [@cfg:stackify] (f : Type.creusat_formula_formula) (lit_order : Type.alloc_vec_vec usize (Type.alloc_alloc_global)) : Type.creusat_decision_decisions - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 39 4 39 30] Invariant0.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 40 4 40 63] 0 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) && UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 41 4 43 48] Seq.length (Model0.model lit_order) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model lit_order) -> UInt64.to_int (Seq.get (Model0.model lit_order) i) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 44 4 44 45] Invariant1.invariant' result (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } + val reduceDB [@cfg:stackify] (self : borrowed (Type.creusat_formula_formula)) (watches : borrowed (Type.creusat_watches_watches)) (t : Type.creusat_trail_trail) (s : borrowed (Type.creusat_solver_solver)) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 275 4 275 40] Invariant0.invariant' ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 276 4 276 51] Invariant1.invariant' ( * watches) ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 277 4 277 42] Invariant2.invariant' t ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 278 4 278 33] Invariant0.invariant' ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 279 4 279 35] Invariant2.invariant' t ( * self)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 280 4 280 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 275 4 275 40] Invariant0.invariant' ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 276 4 276 51] Invariant1.invariant' ( ^ watches) ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 277 4 277 42] Invariant2.invariant' t ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 281 4 281 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 282 4 282 35] Equisat0.equisat ( * self) ( ^ self) } end -module CreuSat_Decision_Impl1_MakeLinkedList - use mach.int.Int - use mach.int.Int32 - use mach.int.UInt64 +module CreuSat_Lit_Impl4_Clone_Interface use prelude.Prelude - use seq.Seq use Type - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = Invariant3.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model4.model, axiom . - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant2.invariant_internal - clone CreuSat_Logic_LogicClause_Impl0_Model as Model4 with function Model1.model = InvariantMirror0.model, - function Model0.model = FormulaInvariant0.model, function Model0.model = Invariant2.model - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, - function Model0.model = Model2.model, axiom . - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Invariant0.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, function Model0.model = Invariant1.model, axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant1 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve4 with type t = usize, - predicate Resolve0.resolve = Resolve2.resolve - clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve3 with type t = Type.creusat_decision_node, - predicate Resolve0.resolve = Resolve1.resolve - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_decision_node - clone Core_Slice_Index_Impl2_Output as Output1 with type t = Type.creusat_decision_node, - type Output0.output = IndexMut0.output - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.creusat_decision_node, - predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = Type.creusat_decision_node, - predicate HasValue0.has_value = IndexMut0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = Type.creusat_decision_node, - predicate InBounds0.in_bounds = IndexMut0.in_bounds - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = usize - clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize, type Output0.output = Index0.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize, - predicate HasValue0.has_value = Index0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize, - predicate InBounds0.in_bounds = Index0.in_bounds - clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve2 with type t = usize - clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve1 with type t = Type.creusat_decision_node - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_decision_node - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.creusat_decision_node, type i = usize, - type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = usize, type i = usize, type a = Type.alloc_alloc_global - clone Alloc_Vec_FromElem_Interface as FromElem0 with type t = Type.creusat_decision_node - clone CreuSat_Decision_Impl0_Default_Interface as Default0 - let rec cfg make_linked_list [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 45 4 45 76] (f : Type.creusat_formula_formula) (lit_order : Type.alloc_vec_vec usize (Type.alloc_alloc_global)) : Type.creusat_decision_decisions - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 39 4 39 30] Invariant0.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 40 4 40 63] 0 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) && UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 41 4 43 48] Seq.length (Model0.model lit_order) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model lit_order) -> UInt64.to_int (Seq.get (Model0.model lit_order) i) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 44 4 44 45] Invariant1.invariant' result (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } - - = - var _0 : Type.creusat_decision_decisions; - var f_1 : Type.creusat_formula_formula; - var lit_order_2 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var iNVALID'_3 : usize; - var linked_list_4 : Type.alloc_vec_vec (Type.creusat_decision_node) (Type.alloc_alloc_global); - var _5 : Type.creusat_decision_node; - var _6 : usize; - var i_7 : usize; - var head_8 : usize; - var _9 : (); - var _10 : (); - var _11 : bool; - var _12 : usize; - var _13 : usize; - var j_14 : usize; - var _15 : usize; - var _16 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _17 : usize; - var _18 : (); - var _19 : bool; - var _20 : usize; - var _21 : (); - var _22 : bool; - var _23 : usize; - var _24 : usize; - var _25 : usize; - var _26 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _27 : borrowed (Type.creusat_decision_node); - var _28 : borrowed (Type.alloc_vec_vec (Type.creusat_decision_node) (Type.alloc_alloc_global)); - var _29 : usize; - var _30 : usize; - var _31 : borrowed (Type.creusat_decision_node); - var _32 : borrowed (Type.alloc_vec_vec (Type.creusat_decision_node) (Type.alloc_alloc_global)); - var _33 : usize; - var _34 : usize; - var _35 : borrowed (Type.creusat_decision_node); - var _36 : borrowed (Type.alloc_vec_vec (Type.creusat_decision_node) (Type.alloc_alloc_global)); - var _37 : usize; - var _38 : usize; - var _39 : bool; - var _40 : usize; - var _41 : usize; - var _42 : usize; - var _43 : usize; - var _44 : borrowed (Type.creusat_decision_node); - var _45 : borrowed (Type.alloc_vec_vec (Type.creusat_decision_node) (Type.alloc_alloc_global)); - var _46 : usize; - var _47 : usize; - var _48 : usize; - var _49 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _50 : usize; - var _51 : usize; - var _52 : borrowed (Type.creusat_decision_node); - var _53 : borrowed (Type.alloc_vec_vec (Type.creusat_decision_node) (Type.alloc_alloc_global)); - var _54 : usize; - var _55 : usize; - var _56 : usize; - var _57 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _58 : usize; - var _59 : usize; - var _60 : borrowed (Type.creusat_decision_node); - var _61 : borrowed (Type.alloc_vec_vec (Type.creusat_decision_node) (Type.alloc_alloc_global)); - var _62 : usize; - var _63 : usize; - var _64 : usize; - var _65 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _66 : usize; - var _67 : usize; - var _68 : borrowed (Type.creusat_decision_node); - var _69 : borrowed (Type.alloc_vec_vec (Type.creusat_decision_node) (Type.alloc_alloc_global)); - var _70 : usize; - var _71 : usize; - var _72 : usize; - var _73 : borrowed (Type.creusat_decision_node); - var _74 : borrowed (Type.alloc_vec_vec (Type.creusat_decision_node) (Type.alloc_alloc_global)); - var _75 : usize; - var _76 : (); - var _77 : (); - var _78 : (); - var _79 : Type.alloc_vec_vec (Type.creusat_decision_node) (Type.alloc_alloc_global); - var _80 : usize; - var _81 : usize; - var _82 : usize; - var _83 : usize; - { - f_1 <- f; - lit_order_2 <- lit_order; - goto BB0 - } - BB0 { - goto BB1 - } - BB1 { - iNVALID'_3 <- (18446744073709551615 : usize); - _5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 47 56 47 74] Default0.default ()); - goto BB2 - } - BB2 { - _6 <- Type.creusat_formula_formula_Formula_num_vars f_1; - linked_list_4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 47 41 47 87] FromElem0.from_elem _5 _6); - goto BB3 - } - BB3 { - i_7 <- (0 : usize); - head_8 <- (0 : usize); - goto BB4 - } - BB4 { - goto BB5 - } - BB5 { - goto BB6 - } - BB6 { - invariant len_ok { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 50 8 50 65] Seq.length (Model1.model linked_list_4) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; - invariant head_ok { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 51 8 51 50] UInt64.to_int head_8 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; - invariant inv { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 52 8 54 103] forall j : (int) . 0 <= j && j < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) -> (UInt64.to_int (Type.creusat_decision_node_Node_next (Seq.get (Model1.model linked_list_4) j)) = 18446744073709551615 || UInt64.to_int (Type.creusat_decision_node_Node_next (Seq.get (Model1.model linked_list_4) j)) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1)) && (UInt64.to_int (Type.creusat_decision_node_Node_prev (Seq.get (Model1.model linked_list_4) j)) = 18446744073709551615 || UInt64.to_int (Type.creusat_decision_node_Node_prev (Seq.get (Model1.model linked_list_4) j)) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1)) }; - _12 <- i_7; - _13 <- Type.creusat_formula_formula_Formula_num_vars f_1; - _11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 55 14 55 28] _12 < _13); - switch (_11) - | False -> goto BB30 - | _ -> goto BB7 - end - } - BB7 { - _16 <- lit_order_2; - _17 <- i_7; - _15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 56 20 56 32] Index0.index _16 _17); - goto BB8 - } - BB8 { - j_14 <- _15; - _20 <- i_7; - _19 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 57 15 57 21] _20 = (0 : usize)); - switch (_19) - | False -> goto BB17 - | _ -> goto BB9 - end - } - BB9 { - _23 <- Type.creusat_formula_formula_Formula_num_vars f_1; - _22 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 58 19 58 33] _23 > (1 : usize)); - switch (_22) - | False -> goto BB13 - | _ -> goto BB10 - end - } - BB10 { - _26 <- lit_order_2; - _25 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 59 42 59 54] Index0.index _26 (1 : usize)); - goto BB11 - } - BB11 { - _24 <- _25; - _28 <- borrow_mut linked_list_4; - linked_list_4 <- ^ _28; - _29 <- j_14; - _27 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 59 20 59 34] IndexMut0.index_mut _28 _29); - goto BB12 - } - BB12 { - _27 <- { _27 with current = (let Type.CreuSat_Decision_Node a b c = * _27 in Type.CreuSat_Decision_Node _24 b c) }; - assume { Resolve0.resolve _27 }; - _21 <- (); - goto BB15 - } - BB13 { - _30 <- iNVALID'_3; - _32 <- borrow_mut linked_list_4; - linked_list_4 <- ^ _32; - _33 <- j_14; - _31 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 61 20 61 34] IndexMut0.index_mut _32 _33); - goto BB14 - } - BB14 { - _31 <- { _31 with current = (let Type.CreuSat_Decision_Node a b c = * _31 in Type.CreuSat_Decision_Node _30 b c) }; - assume { Resolve0.resolve _31 }; - _21 <- (); - goto BB15 - } - BB15 { - _34 <- iNVALID'_3; - _36 <- borrow_mut linked_list_4; - linked_list_4 <- ^ _36; - _37 <- j_14; - _35 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 63 16 63 30] IndexMut0.index_mut _36 _37); - goto BB16 - } - BB16 { - _35 <- { _35 with current = (let Type.CreuSat_Decision_Node a b c = * _35 in Type.CreuSat_Decision_Node a _34 c) }; - assume { Resolve0.resolve _35 }; - _38 <- j_14; - head_8 <- _38; - _18 <- (); - goto BB28 - } - BB17 { - _40 <- i_7; - _42 <- Type.creusat_formula_formula_Formula_num_vars f_1; - _41 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 65 27 65 41] _42 - (1 : usize)); - _39 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 65 22 65 41] _40 = _41); - switch (_39) - | False -> goto BB22 - | _ -> goto BB18 - end - } - BB18 { - _43 <- iNVALID'_3; - _45 <- borrow_mut linked_list_4; - linked_list_4 <- ^ _45; - _46 <- j_14; - _44 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 66 16 66 30] IndexMut0.index_mut _45 _46); - goto BB19 - } - BB19 { - _44 <- { _44 with current = (let Type.CreuSat_Decision_Node a b c = * _44 in Type.CreuSat_Decision_Node _43 b c) }; - assume { Resolve0.resolve _44 }; - _49 <- lit_order_2; - _51 <- i_7; - _50 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 67 48 67 53] _51 - (1 : usize)); - _48 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 67 38 67 54] Index0.index _49 _50); - goto BB20 - } - BB20 { - _47 <- _48; - _53 <- borrow_mut linked_list_4; - linked_list_4 <- ^ _53; - _54 <- j_14; - _52 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 67 16 67 30] IndexMut0.index_mut _53 _54); - goto BB21 - } - BB21 { - _52 <- { _52 with current = (let Type.CreuSat_Decision_Node a b c = * _52 in Type.CreuSat_Decision_Node a _47 c) }; - assume { Resolve0.resolve _52 }; - _18 <- (); - goto BB27 - } - BB22 { - _57 <- lit_order_2; - _59 <- i_7; - _58 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 69 48 69 53] _59 + (1 : usize)); - _56 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 69 38 69 54] Index0.index _57 _58); - goto BB23 - } - BB23 { - _55 <- _56; - _61 <- borrow_mut linked_list_4; - linked_list_4 <- ^ _61; - _62 <- j_14; - _60 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 69 16 69 30] IndexMut0.index_mut _61 _62); - goto BB24 - } - BB24 { - _60 <- { _60 with current = (let Type.CreuSat_Decision_Node a b c = * _60 in Type.CreuSat_Decision_Node _55 b c) }; - assume { Resolve0.resolve _60 }; - _65 <- lit_order_2; - _67 <- i_7; - _66 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 70 48 70 53] _67 - (1 : usize)); - _64 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 70 38 70 54] Index0.index _65 _66); - goto BB25 - } - BB25 { - _63 <- _64; - _69 <- borrow_mut linked_list_4; - linked_list_4 <- ^ _69; - _70 <- j_14; - _68 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 70 16 70 30] IndexMut0.index_mut _69 _70); - goto BB26 - } - BB26 { - _68 <- { _68 with current = (let Type.CreuSat_Decision_Node a b c = * _68 in Type.CreuSat_Decision_Node a _63 c) }; - assume { Resolve0.resolve _68 }; - _18 <- (); - goto BB27 - } - BB27 { - goto BB28 - } - BB28 { - _71 <- Type.creusat_formula_formula_Formula_num_vars f_1; - _72 <- i_7; - _74 <- borrow_mut linked_list_4; - linked_list_4 <- ^ _74; - _75 <- j_14; - _73 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 72 12 72 26] IndexMut0.index_mut _74 _75); - goto BB29 - } - BB29 { - _73 <- { _73 with current = (let Type.CreuSat_Decision_Node a b c = * _73 in Type.CreuSat_Decision_Node a b ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 72 12 72 46] _71 - _72)) }; - assume { Resolve0.resolve _73 }; - i_7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 73 12 73 18] i_7 + (1 : usize)); - _10 <- (); - goto BB6 - } - BB30 { - _9 <- (); - assume { Resolve1.resolve _79 }; - _79 <- linked_list_4; - _81 <- Type.creusat_formula_formula_Formula_num_vars f_1; - _80 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 75 57 75 71] _81 + (1 : usize)); - _82 <- head_8; - _83 <- head_8; - _0 <- Type.CreuSat_Decision_Decisions _79 _80 _82 _83; - goto BB31 - } - BB31 { - goto BB32 - } - BB32 { - goto BB33 - } - BB33 { - assume { Resolve2.resolve lit_order_2 }; - return _0 - } - + val clone' [@cfg:stackify] (self : Type.creusat_lit_lit) : Type.creusat_lit_lit end -module CreuSat_Logic_LogicUtil_SortedRangeRev_Interface - use seq.Seq - use mach.int.Int - use prelude.Prelude - use mach.int.UInt64 - predicate sorted_range_rev (s : Seq.seq (usize, usize)) (l : int) (u : int) +module CreuSat_Lit_Impl0_Model_Interface + use Type + function model (self : Type.creusat_lit_lit) : Type.creusat_lit_lit end -module CreuSat_Logic_LogicUtil_SortedRangeRev - use seq.Seq - use mach.int.Int - use prelude.Prelude - use mach.int.UInt64 - predicate sorted_range_rev [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 6 0 6 71] (s : Seq.seq (usize, usize)) (l : int) (u : int) +module CreuSat_Lit_Impl0_Model + use Type + function model [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 22 4 22 26] (self : Type.creusat_lit_lit) : Type.creusat_lit_lit = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 7 4 9 5] forall j : (int) . forall i : (int) . l <= i && i < j && j < u -> (let (a, _) = Seq.get s i in a) >= (let (a, _) = Seq.get s j in a) -end -module CreuSat_Logic_LogicUtil_SortedRev_Interface - use seq.Seq - use mach.int.Int - use prelude.Prelude - use mach.int.UInt64 - predicate sorted_rev (s : Seq.seq (usize, usize)) + [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 23 8 23 12] self end -module CreuSat_Logic_LogicUtil_SortedRev +module CreuSat_Lit_Impl1_LitSet_Interface use seq.Seq - use mach.int.Int + use Type use prelude.Prelude - use mach.int.UInt64 - use mach.int.Int32 - clone CreuSat_Logic_LogicUtil_SortedRangeRev_Interface as SortedRangeRev0 - predicate sorted_rev [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 13 0 13 49] (s : Seq.seq (usize, usize)) + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 + clone CreuSat_Logic_LogicLit_Impl1_Unset_Interface as Unset0 + clone CreuSat_Logic_LogicLit_Impl1_Invariant_Interface as Invariant0 + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments, + type ModelTy0.modelTy = ModelTy0.modelTy + val lit_set [@cfg:stackify] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) : bool + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 81 4 81 43] Invariant0.invariant' self (Seq.length (Model0.model a))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 82 4 82 41] result = (not Unset0.unset self a) } - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 14 4 16 5] SortedRangeRev0.sorted_range_rev s 0 (Seq.length s) end -module CreuSat_Logic_LogicUtil_PartitionRev_Interface - use seq.Seq - use mach.int.Int - use prelude.Prelude - use mach.int.UInt64 - predicate partition_rev (v : Seq.seq (usize, usize)) (i : int) -end -module CreuSat_Logic_LogicUtil_PartitionRev - use seq.Seq +module CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic_Interface + use Type use mach.int.Int - use prelude.Prelude - use mach.int.UInt64 - use mach.int.Int32 - predicate partition_rev [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 53 0 53 60] (v : Seq.seq (usize, usize)) (i : int) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 54 4 54 110] forall k2 : (int) . forall k1 : (int) . 0 <= k1 && k1 < i && i <= k2 && k2 < Seq.length v -> (let (a, _) = Seq.get v k1 in a) >= (let (a, _) = Seq.get v k2 in a) + function to_watchidx_logic [@inline:trivial] (self : Type.creusat_lit_lit) : int end -module CreuSat_Util_SortReverse_Interface - use prelude.Prelude +module CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic use Type use mach.int.Int - use mach.int.UInt64 - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy0 with type t = (usize, usize), - type a = Type.alloc_alloc_global, type ModelTy0.modelTy = Model1.modelTy - clone CreusotContracts_Logic_Seq_Impl2_PermutationOf_Interface as PermutationOf0 with type t = (usize, usize) - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model1 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global) - clone CreuSat_Logic_LogicUtil_SortedRev_Interface as SortedRev0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = (usize, usize), - type a = Type.alloc_alloc_global, axiom . - val sort_reverse [@cfg:stackify] (v : borrowed (Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global))) : () - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 11 0 11 27] SortedRev0.sorted_rev (Model0.model ( ^ v)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 12 0 12 36] PermutationOf0.permutation_of (Model0.model ( ^ v)) (Model1.model v) } - -end -module CreuSat_Util_SortReverse - use prelude.Prelude - use Type - use mach.int.Int - use mach.int.UInt64 - use seq.Seq - use mach.int.Int32 - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy0 with type t = (usize, usize), - type a = Type.alloc_alloc_global, type ModelTy0.modelTy = Model1.modelTy - clone CreuSat_Logic_LogicUtil_PartitionRev as PartitionRev0 - clone CreuSat_Logic_LogicUtil_SortedRangeRev as SortedRangeRev0 with predicate SortedRangeRev0.sorted_range_rev = SortedRev0.sorted_range_rev - clone CreusotContracts_Logic_Seq_Impl2_PermutationOf as PermutationOf0 with type t = (usize, usize) - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = (usize, usize), type a = Type.alloc_alloc_global, - function Model0.model = Model1.model, axiom . - clone CreusotContracts_Logic_Model_Impl1_Model as Model1 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global) - clone CreuSat_Logic_LogicUtil_SortedRev as SortedRev0 - clone CreusotContracts_Std1_Slice_Impl0_Model as Model2 with type t = (usize, usize), - function Model0.model = DerefMut0.model, function Model1.model = Swap0.model, function Model0.model = Model3.model, - axiom . - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = (usize, usize), - type ModelTy0.modelTy = Model3.modelTy - clone CreusotContracts_Logic_Model_Impl1_Model as Model3 with type t = seq (usize, usize), - function Model0.model = Swap0.model - clone Core_Slice_Index_Impl2_Output as Output0 with type t = (usize, usize), type Output0.output = Index0.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = (usize, usize), - predicate HasValue0.has_value = Index0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = (usize, usize), - predicate InBounds0.in_bounds = Index0.in_bounds - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global) - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = seq (usize, usize) - clone Core_Slice_Impl0_Swap_Interface as Swap0 with type t = (usize, usize) - clone Alloc_Vec_Impl11_DerefMut_Interface as DerefMut0 with type t = (usize, usize), type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = (usize, usize), type i = usize, - type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = (usize, usize), type a = Type.alloc_alloc_global - let rec cfg sort_reverse [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 13 0 13 48] (v : borrowed (Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global))) : () - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 11 0 11 27] SortedRev0.sorted_rev (Model0.model ( ^ v)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 12 0 12 36] PermutationOf0.permutation_of (Model0.model ( ^ v)) (Model1.model v) } - - = - var _0 : (); - var v_1 : borrowed (Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global)); - var i_2 : usize; - ghost var old_v_3 : borrowed (Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global)); - var _4 : (); - var _5 : (); - var _6 : bool; - var _7 : usize; - var _8 : usize; - var _9 : Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global); - var max_10 : usize; - var j_11 : usize; - var _12 : usize; - var _13 : (); - var _14 : bool; - var _15 : usize; - var _16 : usize; - var _17 : Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global); - var _18 : (); - var _19 : bool; - var _20 : usize; - var _21 : (usize, usize); - var _22 : Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global); - var _23 : usize; - var _24 : usize; - var _25 : (usize, usize); - var _26 : Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global); - var _27 : usize; - var _28 : usize; - var _29 : (); - var _30 : (); - var _31 : (); - var _32 : (); - var _33 : borrowed (seq (usize, usize)); - var _34 : borrowed (seq (usize, usize)); - var _35 : borrowed (Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global)); - var _36 : usize; - var _37 : usize; - var _38 : (); - var _39 : (); - var _40 : (); - { - v_1 <- v; - goto BB0 - } - BB0 { - i_2 <- (0 : usize); - _4 <- (); - old_v_3 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 15 16 15 28] v_1); - goto BB1 - } - BB1 { - goto BB2 - } - BB2 { - invariant proph_const { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 16 4 16 51] ^ v_1 = ^ old_v_3 }; - invariant permutation { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 17 4 17 67] PermutationOf0.permutation_of (Model1.model v_1) (Model0.model ( * old_v_3)) }; - invariant i_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 18 4 18 43] UInt64.to_int i_2 <= Seq.length (Model1.model v_1) }; - invariant sorted { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 19 4 19 53] SortedRangeRev0.sorted_range_rev (Model1.model v_1) 0 (UInt64.to_int i_2) }; - invariant partition { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 20 4 20 50] PartitionRev0.partition_rev (Model1.model v_1) (UInt64.to_int i_2) }; - _7 <- i_2; - _9 <- * v_1; - _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 21 14 21 21] Len0.len _9); - goto BB3 - } - BB3 { - _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 21 10 21 21] _7 < _8); - switch (_6) - | False -> goto BB16 - | _ -> goto BB4 - end - } - BB4 { - max_10 <- i_2; - _12 <- i_2; - j_11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 23 20 23 25] _12 + (1 : usize)); - goto BB5 - } - BB5 { - invariant max_is_max { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 24 8 24 96] forall k : (int) . UInt64.to_int i_2 <= k && k < UInt64.to_int j_11 -> (let (a, _) = Seq.get (Model1.model v_1) (UInt64.to_int max_10) in a) >= (let (a, _) = Seq.get (Model1.model v_1) k in a) }; - invariant j_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 25 8 25 59] UInt64.to_int i_2 <= UInt64.to_int j_11 && UInt64.to_int j_11 <= Seq.length (Model1.model v_1) }; - invariant max_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 26 8 26 56] UInt64.to_int i_2 <= UInt64.to_int max_10 && UInt64.to_int max_10 < UInt64.to_int j_11 }; - _15 <- j_11; - _17 <- * v_1; - _16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 27 18 27 25] Len0.len _17); - goto BB6 - } - BB6 { - _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 27 14 27 25] _15 < _16); - switch (_14) - | False -> goto BB13 - | _ -> goto BB7 - end - } - BB7 { - _22 <- * v_1; - _23 <- j_11; - _21 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 28 15 28 19] Index0.index _22 _23); - goto BB8 - } - BB8 { - _20 <- (let (a, _) = _21 in a); - _26 <- * v_1; - _27 <- max_10; - _25 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 28 24 28 30] Index0.index _26 _27); - goto BB9 - } - BB9 { - _24 <- (let (a, _) = _25 in a); - _19 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 28 15 28 32] _20 > _24); - switch (_19) - | False -> goto BB11 - | _ -> goto BB10 - end - } - BB10 { - _28 <- j_11; - max_10 <- _28; - _18 <- (); - goto BB12 - } - BB11 { - _18 <- (); - goto BB12 - } - BB12 { - j_11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 31 12 31 18] j_11 + (1 : usize)); - _5 <- (); - goto BB5 - } - BB13 { - _13 <- (); - _35 <- borrow_mut ( * v_1); - v_1 <- { v_1 with current = ( ^ _35) }; - _34 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 33 8 33 22] DerefMut0.deref_mut _35); - goto BB14 - } - BB14 { - _33 <- borrow_mut ( * _34); - _34 <- { _34 with current = ( ^ _33) }; - _36 <- i_2; - _37 <- max_10; - _32 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 33 8 33 22] Swap0.swap _33 _36 _37); - goto BB15 - } - BB15 { - assume { Resolve0.resolve _34 }; - i_2 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 34 8 34 14] i_2 + (1 : usize)); - _5 <- (); - goto BB2 - } - BB16 { - assume { Resolve1.resolve v_1 }; - _0 <- (); - return _0 - } - -end -module CreuSat_Decision_Impl1_New_Interface - use mach.int.Int - use mach.int.Int32 - use mach.int.UInt64 - use prelude.Prelude - use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val new [@cfg:stackify] (f : Type.creusat_formula_formula) : Type.creusat_decision_decisions - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 79 4 79 30] Invariant0.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 80 4 80 63] 0 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) && UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 81 4 81 45] Invariant1.invariant' result (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } - -end -module CreuSat_Decision_Impl1_New - use mach.int.Int - use mach.int.Int32 - use mach.int.UInt64 - use prelude.Prelude - use Type - use seq.Seq - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = Invariant3.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant2.invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model6.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model6 with function Model0.model = Model2.model, - function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, - function Model0.model = Invariant2.model - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model2.modelTy - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, function Model0.model = Invariant1.model, axiom . - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, - function Model0.model = Model4.model, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model4 with function Model0.model = Invariant0.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = (usize, usize), type a = Type.alloc_alloc_global, - axiom . - clone CreusotContracts_Logic_Model_Impl0_Model as Model2 with type t = Type.creusat_clause_clause - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = usize, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - clone CreuSat_Logic_LogicUtil_SortedRangeRev as SortedRangeRev0 with predicate SortedRangeRev0.sorted_range_rev = SortedRev0.sorted_range_rev - clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve5 with type t = usize, - predicate Resolve0.resolve = Resolve3.resolve, predicate Resolve0.resolve = Resolve6.resolve, - predicate Resolve1.resolve = Resolve6.resolve - clone CreusotContracts_Logic_Resolve_Impl0_Resolve as Resolve6 with type t1 = usize, type t2 = usize, - predicate Resolve0.resolve = Resolve4.resolve - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy4 with type t = (usize, usize), - type a = Type.alloc_alloc_global, type ModelTy0.modelTy = Model9.modelTy - clone CreusotContracts_Logic_Seq_Impl2_PermutationOf as PermutationOf0 with type t = (usize, usize), - predicate PermutationOf0.permutation_of = SortReverse0.permutation_of - clone CreusotContracts_Logic_Model_Impl1_Model as Model9 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global), - function Model1.model = SortReverse0.model - clone CreuSat_Logic_LogicUtil_SortedRev as SortedRev0 with predicate SortedRev0.sorted_rev = SortReverse0.sorted_rev - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy3 with type t = (usize, usize) - clone Core_Slice_Index_Impl2_Output as Output1 with type t = (usize, usize), type Output0.output = IndexMut1.output, - type Output0.output = Index4.output - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere1 with type t = (usize, usize), - predicate ResolveElswhere0.resolve_elswhere = IndexMut1.resolve_elswhere - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = (usize, usize), - predicate HasValue0.has_value = IndexMut1.has_value, predicate HasValue0.has_value = Index4.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = (usize, usize), - predicate InBounds0.in_bounds = IndexMut1.in_bounds, predicate InBounds0.in_bounds = Index4.in_bounds - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = usize, - predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy2 with type t = usize - clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize, type Output0.output = Index3.output, - type Output0.output = IndexMut0.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize, - predicate HasValue0.has_value = Index3.has_value, predicate HasValue0.has_value = IndexMut0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize, - predicate InBounds0.in_bounds = Index3.in_bounds, predicate InBounds0.in_bounds = IndexMut0.in_bounds - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model8.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model8 with type t = Type.creusat_formula_formula, - function Model0.model = Index0.model - clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve4 with type t = (usize, usize) - clone CreuSat_Decision_Impl1_MakeLinkedList_Interface as MakeLinkedList0 - clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve3 with type t = usize - clone Alloc_Vec_Impl16_Index_Interface as Index4 with type t = (usize, usize), type i = usize, - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global) - clone CreuSat_Util_SortReverse_Interface as SortReverse0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = (usize, usize) - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut1 with type t = (usize, usize), type i = usize, - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = usize - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = usize, type i = usize, - type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl16_Index_Interface as Index3 with type t = usize, type i = usize, type a = Type.alloc_alloc_global - clone CreuSat_Lit_Impl1_Index_Interface as Index2 - clone CreuSat_Clause_Impl0_Index_Interface as Index1 - clone CreuSat_Clause_Impl3_Len_Interface as Len1 - clone CreuSat_Formula_Impl0_Index_Interface as Index0 - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global - clone Alloc_Vec_FromElem_Interface as FromElem1 with type t = (usize, usize) - clone Alloc_Vec_FromElem_Interface as FromElem0 with type t = usize - let rec cfg new [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 82 4 82 40] (f : Type.creusat_formula_formula) : Type.creusat_decision_decisions - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 79 4 79 30] Invariant0.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 80 4 80 63] 0 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) && UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 81 4 81 45] Invariant1.invariant' result (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } - - = - var _0 : Type.creusat_decision_decisions; - var f_1 : Type.creusat_formula_formula; - var lit_order_2 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _3 : usize; - var counts_4 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _5 : usize; - var counts_with_index_6 : Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global); - var _7 : (usize, usize); - var _8 : usize; - var i_9 : usize; - var _10 : (); - var _11 : (); - var _12 : bool; - var _13 : usize; - var _14 : usize; - var _15 : Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global); - var curr_clause_16 : Type.creusat_clause_clause; - var _17 : Type.creusat_clause_clause; - var _18 : Type.creusat_formula_formula; - var _19 : usize; - var j_20 : usize; - var _21 : (); - var _22 : bool; - var _23 : usize; - var _24 : usize; - var _25 : Type.creusat_clause_clause; - var _26 : (); - var _27 : bool; - var _28 : usize; - var _29 : usize; - var _30 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _31 : usize; - var _32 : Type.creusat_lit_lit; - var _33 : Type.creusat_lit_lit; - var _34 : Type.creusat_clause_clause; - var _35 : usize; - var _36 : usize; - var _37 : borrowed usize; - var _38 : borrowed (Type.alloc_vec_vec usize (Type.alloc_alloc_global)); - var _39 : usize; - var _40 : Type.creusat_lit_lit; - var _41 : Type.creusat_lit_lit; - var _42 : Type.creusat_clause_clause; - var _43 : usize; - var _44 : (); - var _45 : (); - var _46 : (); - var _47 : (); - var _48 : (); - var _49 : (); - var _50 : (); - var _51 : bool; - var _52 : usize; - var _53 : usize; - var _54 : usize; - var _55 : usize; - var _56 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _57 : usize; - var _58 : usize; - var _59 : borrowed (usize, usize); - var _60 : borrowed (Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global)); - var _61 : usize; - var _62 : (); - var _63 : (); - var _64 : (); - var _65 : (); - var _66 : borrowed (Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global)); - var _67 : borrowed (Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global)); - var _68 : (); - var _69 : (); - var _70 : bool; - var _71 : usize; - var _72 : usize; - var _73 : usize; - var _74 : (usize, usize); - var _75 : Type.alloc_vec_vec (usize, usize) (Type.alloc_alloc_global); - var _76 : usize; - var _77 : borrowed usize; - var _78 : borrowed (Type.alloc_vec_vec usize (Type.alloc_alloc_global)); - var _79 : usize; - var _80 : (); - var _81 : (); - var _82 : (); - var _83 : Type.creusat_formula_formula; - var _84 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - { - f_1 <- f; - goto BB0 - } - BB0 { - _3 <- Type.creusat_formula_formula_Formula_num_vars f_1; - lit_order_2 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 83 40 83 69] FromElem0.from_elem (0 : usize) _3); - goto BB1 - } - BB1 { - _5 <- Type.creusat_formula_formula_Formula_num_vars f_1; - counts_4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 84 37 84 66] FromElem0.from_elem (0 : usize) _5); - goto BB2 - } - BB2 { - _7 <- ((0 : usize), (0 : usize)); - _8 <- Type.creusat_formula_formula_Formula_num_vars f_1; - counts_with_index_6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 85 57 85 91] FromElem1.from_elem _7 _8); - goto BB3 - } - BB3 { - i_9 <- (0 : usize); - goto BB4 - } - BB4 { - goto BB5 - } - BB5 { - invariant i_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 87 8 87 55] UInt64.to_int i_9 <= Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f_1)) }; - invariant counts_len1 { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 88 8 88 65] Seq.length (Model1.model counts_4) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; - _13 <- i_9; - _15 <- Type.creusat_formula_formula_Formula_clauses f_1; - _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 89 18 89 33] Len0.len _15); - goto BB6 - } - BB6 { - _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 89 14 89 33] _13 < _14); - switch (_12) - | False -> goto BB23 - | _ -> goto BB7 - end - } - BB7 { - _18 <- f_1; - _19 <- i_9; - _17 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 90 31 90 35] Index0.index _18 _19); - goto BB8 - } - BB8 { - curr_clause_16 <- _17; - j_20 <- (0 : usize); - goto BB9 - } - BB9 { - goto BB10 - } - BB10 { - invariant i_bound2 { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 92 12 92 60] UInt64.to_int i_9 <= Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f_1)) }; - invariant j_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 93 12 93 61] UInt64.to_int j_20 <= Seq.length (Model2.model curr_clause_16) }; - invariant counts_len { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 94 12 94 68] Seq.length (Model1.model counts_4) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; - _23 <- j_20; - _25 <- curr_clause_16; - _24 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 95 22 95 39] Len1.len _25); - goto BB11 - } - BB11 { - _22 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 95 18 95 39] _23 < _24); - switch (_22) - | False -> goto BB22 - | _ -> goto BB12 - end - } - BB12 { - _30 <- counts_4; - _34 <- curr_clause_16; - _35 <- j_20; - _33 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 98 26 98 40] Index1.index _34 _35); - goto BB13 - } - BB13 { - _32 <- _33; - _31 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 98 26 98 48] Index2.index _32); - goto BB14 - } - BB14 { - _29 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 98 19 98 49] Index3.index _30 _31); - goto BB15 - } - BB15 { - _28 <- _29; - _36 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 98 52 98 66] (18446744073709551615 : usize) - (1 : usize)); - _27 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 98 19 98 66] _28 < _36); - switch (_27) - | False -> goto BB20 - | _ -> goto BB16 - end - } - BB16 { - _38 <- borrow_mut counts_4; - counts_4 <- ^ _38; - _42 <- curr_clause_16; - _43 <- j_20; - _41 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 99 27 99 41] Index1.index _42 _43); - goto BB17 - } - BB17 { - _40 <- _41; - _39 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 99 27 99 49] Index2.index _40); - goto BB18 - } - BB18 { - _37 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 99 20 99 50] IndexMut0.index_mut _38 _39); - goto BB19 - } - BB19 { - _37 <- { _37 with current = ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 99 20 99 55] * _37 + (1 : usize)) }; - assume { Resolve0.resolve _37 }; - _26 <- (); - goto BB21 - } - BB20 { - _26 <- (); - goto BB21 - } - BB21 { - j_20 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 101 16 101 22] j_20 + (1 : usize)); - _11 <- (); - goto BB10 - } - BB22 { - _21 <- (); - i_9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 103 12 103 18] i_9 + (1 : usize)); - _11 <- (); - goto BB5 - } - BB23 { - _10 <- (); - i_9 <- (0 : usize); - goto BB24 - } - BB24 { - goto BB25 - } - BB25 { - goto BB26 - } - BB26 { - invariant i_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 106 8 106 48] UInt64.to_int i_9 <= UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; - invariant counts_with_idx_len { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 107 8 107 84] Seq.length (Model3.model counts_with_index_6) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; - invariant second_ok { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 108 8 109 54] forall j : (int) . 0 <= j && j < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) -> UInt64.to_int (let (_, a) = Seq.get (Model3.model counts_with_index_6) j in a) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; - _52 <- i_9; - _53 <- Type.creusat_formula_formula_Formula_num_vars f_1; - _51 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 110 14 110 28] _52 < _53); - switch (_51) - | False -> goto BB30 - | _ -> goto BB27 - end - } - BB27 { - _56 <- counts_4; - _57 <- i_9; - _55 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 111 36 111 45] Index3.index _56 _57); - goto BB28 - } - BB28 { - _54 <- _55; - _58 <- i_9; - _60 <- borrow_mut counts_with_index_6; - counts_with_index_6 <- ^ _60; - _61 <- i_9; - _59 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 111 12 111 32] IndexMut1.index_mut _60 _61); - goto BB29 - } - BB29 { - _59 <- { _59 with current = (_54, _58) }; - assume { Resolve1.resolve _59 }; - i_9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 112 12 112 18] i_9 + (1 : usize)); - _11 <- (); - goto BB26 - } - BB30 { - _50 <- (); - _67 <- borrow_mut counts_with_index_6; - counts_with_index_6 <- ^ _67; - _66 <- borrow_mut ( * _67); - _67 <- { _67 with current = ( ^ _66) }; - _65 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 114 8 114 44] SortReverse0.sort_reverse _66); - goto BB31 - } - BB31 { - assume { Resolve2.resolve _67 }; - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 115 8 116 53] forall j : (int) . 0 <= j && j < Seq.length (Model3.model counts_with_index_6) -> UInt64.to_int (let (_, a) = Seq.get (Model3.model counts_with_index_6) j in a) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; - goto BB32 - } - BB32 { - _68 <- (); - i_9 <- (0 : usize); - goto BB33 - } - BB33 { - goto BB34 - } - BB34 { - goto BB35 - } - BB35 { - invariant i_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 118 8 118 59] 0 <= UInt64.to_int i_9 && UInt64.to_int i_9 <= UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; - invariant lit_order_len { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 119 8 119 70] Seq.length (Model1.model lit_order_2) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; - invariant second_ok { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 120 8 121 44] forall j : (int) . 0 <= j && j < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) -> UInt64.to_int (Seq.get (Model1.model lit_order_2) j) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; - _71 <- i_9; - _72 <- Type.creusat_formula_formula_Formula_num_vars f_1; - _70 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 122 14 122 28] _71 < _72); - switch (_70) - | False -> goto BB39 - | _ -> goto BB36 - end - } - BB36 { - _75 <- counts_with_index_6; - _76 <- i_9; - _74 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 123 27 123 47] Index4.index _75 _76); - goto BB37 - } - BB37 { - _73 <- (let (_, a) = _74 in a); - _78 <- borrow_mut lit_order_2; - lit_order_2 <- ^ _78; - _79 <- i_9; - _77 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 123 12 123 24] IndexMut0.index_mut _78 _79); - goto BB38 - } - BB38 { - _77 <- { _77 with current = _73 }; - assume { Resolve0.resolve _77 }; - i_9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 124 12 124 18] i_9 + (1 : usize)); - _11 <- (); - goto BB35 - } - BB39 { - _69 <- (); - _83 <- f_1; - assume { Resolve3.resolve _84 }; - _84 <- lit_order_2; - _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 126 8 126 44] MakeLinkedList0.make_linked_list _83 _84); - goto BB40 - } - BB40 { - goto BB41 - } - BB41 { - assume { Resolve4.resolve counts_with_index_6 }; - goto BB42 - } - BB42 { - assume { Resolve3.resolve counts_4 }; - goto BB43 - } - BB43 { - return _0 - } - -end -module CreuSat_Logic_LogicAssignments_Impl1_Complete_Interface - use Type - predicate complete (self : Type.creusat_assignments_assignments) -end -module CreuSat_Logic_LogicAssignments_Impl1_Complete - use Type - use mach.int.Int - use mach.int.Int32 - use seq.Seq - clone CreuSat_Logic_Logic_Unset_Interface as Unset0 - clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - predicate complete [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 55 4 55 33] (self : Type.creusat_assignments_assignments) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 56 8 58 9] forall i : (int) . 0 <= i && i < Seq.length (Model0.model self) -> not Unset0.unset (Seq.get (Model0.model self) i) -end -module CreuSat_Decision_Impl1_GetNext_Interface - use mach.int.UInt64 - use Type - use mach.int.Int - use prelude.Prelude - use seq.Seq - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicAssignments_Impl1_Complete_Interface as Complete0 - clone CreuSat_Logic_Logic_Unset_Interface as Unset0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant0 - val get_next [@cfg:stackify] (self : borrowed (Type.creusat_decision_decisions)) (a : Type.creusat_assignments_assignments) (_f : Type.creusat_formula_formula) : Type.core_option_option usize - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 232 4 232 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 233 4 233 33] Invariant1.invariant' a _f} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 232 4 232 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 234 4 237 7] match (result) with - | Type.Core_Option_Option_Some k -> UInt64.to_int k < Seq.length (Model0.model a) && Unset0.unset (Seq.get (Model0.model a) (UInt64.to_int k)) - | Type.Core_Option_Option_None -> Complete0.complete a - end } - -end -module CreuSat_Decision_Impl1_GetNext - use mach.int.UInt64 - use Type - use mach.int.Int - use prelude.Prelude - use seq.Seq - use mach.int.Int32 - use prelude.UInt8 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model2.model, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model0.model = Invariant1.model, - function Model0.model = Model0.model, function Model0.model = Complete0.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, function Model0.model = Invariant0.model, axiom . - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = Complete0.unset - clone CreuSat_Logic_LogicAssignments_Impl1_Complete as Complete0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_assignments_assignments - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant1 - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant0 - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_decision_node - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_decision_node, - type Output0.output = Index1.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_decision_node, - predicate HasValue0.has_value = Index1.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_decision_node, - predicate InBounds0.in_bounds = Index1.in_bounds - clone CreuSat_Assignments_Impl2_Len_Interface as Len0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_decision_decisions - clone Alloc_Vec_Impl16_Index_Interface as Index1 with type t = Type.creusat_decision_node, type i = usize, - type a = Type.alloc_alloc_global - clone CreuSat_Assignments_Impl0_Index_Interface as Index0 - let rec cfg get_next [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 238 4 238 78] (self : borrowed (Type.creusat_decision_decisions)) (a : Type.creusat_assignments_assignments) (_f : Type.creusat_formula_formula) : Type.core_option_option usize - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 232 4 232 52] Invariant0.invariant' ( * self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 233 4 233 33] Invariant1.invariant' a _f} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 232 4 232 52] Invariant0.invariant' ( ^ self) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 234 4 237 7] match (result) with - | Type.Core_Option_Option_Some k -> UInt64.to_int k < Seq.length (Model0.model a) && Unset0.unset (Seq.get (Model0.model a) (UInt64.to_int k)) - | Type.Core_Option_Option_None -> Complete0.complete a - end } - - = - var _0 : Type.core_option_option usize; - var self_1 : borrowed (Type.creusat_decision_decisions); - var a_2 : Type.creusat_assignments_assignments; - var _f_3 : Type.creusat_formula_formula; - var iNVALID'_4 : usize; - var curr_5 : usize; - var _6 : (); - var _7 : (); - var _8 : bool; - var _9 : usize; - var _10 : usize; - var _11 : (); - var _12 : bool; - var _13 : uint8; - var _14 : uint8; - var _15 : Type.creusat_assignments_assignments; - var _16 : usize; - var _17 : (); - var _18 : usize; - var _19 : Type.creusat_decision_node; - var _20 : Type.alloc_vec_vec (Type.creusat_decision_node) (Type.alloc_alloc_global); - var _21 : usize; - var _22 : usize; - var _23 : usize; - var _24 : Type.creusat_decision_node; - var _25 : Type.alloc_vec_vec (Type.creusat_decision_node) (Type.alloc_alloc_global); - var _26 : usize; - var _27 : (); - var _28 : (); - var _29 : (); - var i_30 : usize; - var _31 : (); - var _32 : bool; - var _33 : usize; - var _34 : usize; - var _35 : Type.creusat_assignments_assignments; - var _36 : (); - var _37 : bool; - var _38 : uint8; - var _39 : uint8; - var _40 : Type.creusat_assignments_assignments; - var _41 : usize; - var _42 : (); - var _43 : usize; - var _44 : (); - var _45 : (); - var _46 : (); - { - self_1 <- self; - a_2 <- a; - _f_3 <- _f; - goto BB0 - } - BB0 { - iNVALID'_4 <- (18446744073709551615 : usize); - curr_5 <- Type.creusat_decision_decisions_Decisions_search ( * self_1); - goto BB1 - } - BB1 { - invariant inv { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 241 8 241 67] curr_5 = (18446744073709551615 : usize) || UInt64.to_int curr_5 < Seq.length (Model0.model a_2) }; - _9 <- curr_5; - _10 <- iNVALID'_4; - _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 242 14 242 29] _9 <> _10); - switch (_8) - | False -> goto BB8 - | _ -> goto BB2 - end - } - BB2 { - _15 <- a_2; - _16 <- curr_5; - _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 243 15 243 22] Index0.index _15 _16); - goto BB3 - } - BB3 { - _13 <- _14; - _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 243 15 243 27] _13 >= (2 : uint8)); - switch (_12) - | False -> goto BB6 - | _ -> goto BB4 - end - } - BB4 { - _20 <- Type.creusat_decision_decisions_Decisions_linked_list ( * self_1); - _21 <- curr_5; - _19 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 244 30 244 52] Index1.index _20 _21); - goto BB5 - } - BB5 { - _18 <- Type.creusat_decision_node_Node_next _19; - self_1 <- { self_1 with current = (let Type.CreuSat_Decision_Decisions a b c d = * self_1 in Type.CreuSat_Decision_Decisions a b c _18) }; - assume { Resolve0.resolve self_1 }; - _22 <- curr_5; - _0 <- Type.Core_Option_Option_Some _22; - goto BB16 - } - BB6 { - _11 <- (); - _25 <- Type.creusat_decision_decisions_Decisions_linked_list ( * self_1); - _26 <- curr_5; - _24 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 247 19 247 41] Index1.index _25 _26); - goto BB7 - } - BB7 { - _23 <- Type.creusat_decision_node_Node_next _24; - curr_5 <- _23; - _7 <- (); - goto BB1 - } - BB8 { - assume { Resolve0.resolve self_1 }; - _6 <- (); - i_30 <- (0 : usize); - goto BB9 - } - BB9 { - invariant prev { [#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 252 8 252 79] forall j : (int) . 0 <= j && j < UInt64.to_int i_30 -> not Unset0.unset (Seq.get (Model0.model a_2) j) }; - _33 <- i_30; - _35 <- a_2; - _34 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 253 18 253 25] Len0.len _35); - goto BB10 - } - BB10 { - _32 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 253 14 253 25] _33 < _34); - switch (_32) - | False -> goto BB15 - | _ -> goto BB11 - end - } - BB11 { - _40 <- a_2; - _41 <- i_30; - _39 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 254 15 254 19] Index0.index _40 _41); - goto BB12 - } - BB12 { - _38 <- _39; - _37 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 254 15 254 24] _38 >= (2 : uint8)); - switch (_37) - | False -> goto BB14 - | _ -> goto BB13 - end - } - BB13 { - _43 <- i_30; - _0 <- Type.Core_Option_Option_Some _43; - goto BB16 - } - BB14 { - _36 <- (); - i_30 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/decision.rs" 257 12 257 18] i_30 + (1 : usize)); - _7 <- (); - goto BB9 - } - BB15 { - _31 <- (); - _0 <- Type.Core_Option_Option_None; - goto BB17 - } - BB16 { - goto BB17 - } - BB17 { - return _0 - } - -end -module CreuSat_Formula_Impl1_IndexMut_Interface - use mach.int.UInt64 - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use prelude.Prelude - use Type - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicFormula_Impl0_Model_Interface as Model1 - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_formula_formula - val index_mut [@cfg:stackify] (self : borrowed (Type.creusat_formula_formula)) (ix : usize) : borrowed (Type.creusat_clause_clause) - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 43 4 43 38] UInt64.to_int ix < Seq.length (let (a, _) = Model0.model self in a)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 44 4 44 42] Seq.get (let (a, _) = Model1.model ( * self) in a) (UInt64.to_int ix) = * result } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 45 4 45 42] Seq.get (let (a, _) = Model1.model ( ^ self) in a) (UInt64.to_int ix) = ^ result } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 46 4 46 107] forall i : (int) . 0 <= i && i <> UInt64.to_int ix && i < Seq.length (let (a, _) = Model0.model self in a) -> Seq.get (let (a, _) = Model0.model self in a) i = Seq.get (let (a, _) = Model1.model ( ^ self) in a) i } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 47 4 47 52] Seq.length (let (a, _) = Model1.model ( ^ self) in a) = Seq.length (let (a, _) = Model1.model ( * self) in a) } - -end -module CreuSat_Formula_Impl1_IndexMut - use mach.int.UInt64 - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use prelude.Prelude - use Type - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Model0.model - clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_formula_formula - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_clause_clause - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause, - type Output0.output = IndexMut0.output - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.creusat_clause_clause, - predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause, - predicate HasValue0.has_value = IndexMut0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause, - predicate InBounds0.in_bounds = IndexMut0.in_bounds - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_clause_clause - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.creusat_clause_clause, type i = usize, - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula - let rec cfg index_mut [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 48 4 48 53] (self : borrowed (Type.creusat_formula_formula)) (ix : usize) : borrowed (Type.creusat_clause_clause) - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 43 4 43 38] UInt64.to_int ix < Seq.length (let (a, _) = Model0.model self in a)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 44 4 44 42] Seq.get (let (a, _) = Model1.model ( * self) in a) (UInt64.to_int ix) = * result } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 45 4 45 42] Seq.get (let (a, _) = Model1.model ( ^ self) in a) (UInt64.to_int ix) = ^ result } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 46 4 46 107] forall i : (int) . 0 <= i && i <> UInt64.to_int ix && i < Seq.length (let (a, _) = Model0.model self in a) -> Seq.get (let (a, _) = Model0.model self in a) i = Seq.get (let (a, _) = Model1.model ( ^ self) in a) i } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 47 4 47 52] Seq.length (let (a, _) = Model1.model ( ^ self) in a) = Seq.length (let (a, _) = Model1.model ( * self) in a) } - - = - var _0 : borrowed (Type.creusat_clause_clause); - var self_1 : borrowed (Type.creusat_formula_formula); - var ix_2 : usize; - var _3 : borrowed (Type.creusat_clause_clause); - var _4 : borrowed (Type.creusat_clause_clause); - var _5 : borrowed (Type.creusat_clause_clause); - var _6 : borrowed (Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global)); - var _7 : usize; - { - self_1 <- self; - ix_2 <- ix; - goto BB0 - } - BB0 { - _6 <- borrow_mut (Type.creusat_formula_formula_Formula_clauses ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Formula_Formula a b = * self_1 in Type.CreuSat_Formula_Formula ( ^ _6) b) }; - assume { Resolve0.resolve self_1 }; - _7 <- ix_2; - _5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 54 13 54 29] IndexMut0.index_mut _6 _7); - goto BB1 - } - BB1 { - _4 <- borrow_mut ( * _5); - _5 <- { _5 with current = ( ^ _4) }; - assume { Resolve1.resolve _5 }; - _3 <- borrow_mut ( * _4); - _4 <- { _4 with current = ( ^ _3) }; - assume { Resolve1.resolve _4 }; - _0 <- borrow_mut ( * _3); - _3 <- { _3 with current = ( ^ _0) }; - assume { Resolve1.resolve _3 }; - return _0 - } - -end -module CreuSat_Formula_Impl2_CheckFormulaInvariant_Interface - use Type - use mach.int.Int - use mach.int.Int32 - use mach.int.UInt64 - use prelude.Prelude - use prelude.UInt8 - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface as NotSatisfiable0 - clone CreuSat_Logic_LogicFormula_FormulaSatInner_Interface as FormulaSatInner0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = uint8, type a = Type.alloc_alloc_global, - axiom . - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_formula_formula - val check_formula_invariant [@cfg:stackify] (self : Type.creusat_formula_formula) : Type.creusat_solver_satresult - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 60 4 65 7] match (result) with - | Type.CreuSat_Solver_SatResult_Sat assn -> FormulaSatInner0.formula_sat_inner (Model0.model self) (Model1.model assn) - | Type.CreuSat_Solver_SatResult_Unsat -> NotSatisfiable0.not_satisfiable self - | Type.CreuSat_Solver_SatResult_Unknown -> Invariant0.invariant' self && 0 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self) && UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self) < div 18446744073709551615 2 - | Type.CreuSat_Solver_SatResult_Err -> true - end } - -end -module CreuSat_Formula_Impl2_CheckFormulaInvariant - use Type - use mach.int.Int - use mach.int.Int32 - use mach.int.UInt64 - use prelude.Prelude - use seq.Seq - use prelude.UInt8 - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = SatInner1.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = Invariant2.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant2 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model3.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model3 with function Model0.model = NotSatisfiable0.model, - function Model0.model = Invariant1.model, function Model0.model = SatInner0.model, - function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss0.formula_sat_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtension0.equisat_extension_inner - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant1.invariant_internal - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant1 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = Model4.model, - function Model0.model = InvariantMirror0.model, axiom . - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model4 with function Model0.model = Model0.model, - function Model0.model = Invariant0.model, function Model0.model = EquisatExtension0.model - clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with predicate EquisatExtension0.equisat_extension = NotSatisfiable0.equisat_extension - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable as NotSatisfiable0 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = uint8, type a = Type.alloc_alloc_global, axiom . - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_formula_formula - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy2 with type ModelTy0.modelTy = Model6.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model6 with type t = Type.creusat_clause_clause, - function Model0.model = Len1.model - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_clause_clause - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause, - type Output0.output = Index0.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause, - predicate HasValue0.has_value = Index0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause, - predicate InBounds0.in_bounds = Index0.in_bounds - clone CreuSat_Clause_Impl3_Len_Interface as Len1 - clone CreuSat_Clause_Impl3_CheckClauseInvariant_Interface as CheckClauseInvariant0 - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.creusat_clause_clause, type i = usize, - type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl0_New_Interface as New0 with type t = uint8 - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global - let rec cfg check_formula_invariant [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 66 4 66 54] (self : Type.creusat_formula_formula) : Type.creusat_solver_satresult - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 60 4 65 7] match (result) with - | Type.CreuSat_Solver_SatResult_Sat assn -> FormulaSatInner0.formula_sat_inner (Model0.model self) (Model1.model assn) - | Type.CreuSat_Solver_SatResult_Unsat -> NotSatisfiable0.not_satisfiable self - | Type.CreuSat_Solver_SatResult_Unknown -> Invariant0.invariant' self && 0 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self) && UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self) < div 18446744073709551615 2 - | Type.CreuSat_Solver_SatResult_Err -> true - end } - - = - var _0 : Type.creusat_solver_satresult; - var self_1 : Type.creusat_formula_formula; - var _2 : (); - var _3 : bool; - var _4 : usize; - var _5 : usize; - var _6 : bool; - var _7 : (); - var _8 : (); - var _9 : bool; - var _10 : usize; - var _11 : Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global); - var _12 : (); - var _13 : Type.alloc_vec_vec uint8 (Type.alloc_alloc_global); - var _14 : (); - var _15 : bool; - var _16 : usize; - var _17 : (); - var i_18 : usize; - var _19 : (); - var _20 : (); - var _21 : bool; - var _22 : usize; - var _23 : usize; - var _24 : Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global); - var _25 : (); - var _26 : bool; - var _27 : bool; - var _28 : Type.creusat_clause_clause; - var _29 : Type.creusat_clause_clause; - var _30 : Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global); - var _31 : usize; - var _32 : usize; - var _33 : (); - var _34 : (); - var _35 : bool; - var _36 : usize; - var _37 : Type.creusat_clause_clause; - var _38 : Type.creusat_clause_clause; - var _39 : Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global); - var _40 : usize; - var _41 : (); - var _42 : (); - var _43 : (); - var _44 : (); - { - self_1 <- self; - goto BB0 - } - BB0 { - _4 <- Type.creusat_formula_formula_Formula_num_vars self_1; - _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 67 28 67 42] (2 : usize) = (0 : usize)); - assert { not _6 }; - goto BB1 - } - BB1 { - _5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 67 28 67 42] (18446744073709551615 : usize) / (2 : usize)); - _3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 67 11 67 42] _4 >= _5); - switch (_3) - | False -> goto BB3 - | _ -> goto BB2 - end - } - BB2 { - _0 <- Type.CreuSat_Solver_SatResult_Err; - goto BB24 - } - BB3 { - _2 <- (); - _11 <- Type.creusat_formula_formula_Formula_clauses self_1; - _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 70 11 70 29] Len0.len _11); - goto BB4 - } - BB4 { - _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 70 11 70 34] _10 = (0 : usize)); - switch (_9) - | False -> goto BB8 - | _ -> goto BB5 - end - } - BB5 { - _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 71 34 71 44] New0.new ()); - goto BB6 - } - BB6 { - _0 <- Type.CreuSat_Solver_SatResult_Sat _13; - goto BB7 - } - BB7 { - goto BB24 - } - BB8 { - _8 <- (); - _16 <- Type.creusat_formula_formula_Formula_num_vars self_1; - _15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 73 11 73 29] _16 = (0 : usize)); - switch (_15) - | False -> goto BB10 - | _ -> goto BB9 - end - } - BB9 { - _0 <- Type.CreuSat_Solver_SatResult_Err; - goto BB24 - } - BB10 { - _14 <- (); - i_18 <- (0 : usize); - goto BB11 - } - BB11 { - invariant inv { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 77 8 77 107] forall j : (int) . 0 <= j && j < UInt64.to_int i_18 -> Invariant1.invariant' (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses self_1)) j) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self_1)) }; - invariant clause_len { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 78 8 78 101] forall j : (int) . 0 <= j && j < UInt64.to_int i_18 -> Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses self_1)) j)) > 0 }; - _22 <- i_18; - _24 <- Type.creusat_formula_formula_Formula_clauses self_1; - _23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 79 18 79 36] Len0.len _24); - goto BB12 - } - BB12 { - _21 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 79 14 79 36] _22 < _23); - switch (_21) - | False -> goto BB22 - | _ -> goto BB13 - end - } - BB13 { - _30 <- Type.creusat_formula_formula_Formula_clauses self_1; - _31 <- i_18; - _29 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 80 16 80 31] Index0.index _30 _31); - goto BB14 - } - BB14 { - _28 <- _29; - _32 <- Type.creusat_formula_formula_Formula_num_vars self_1; - _27 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 80 16 80 69] CheckClauseInvariant0.check_clause_invariant _28 _32); - goto BB15 - } - BB15 { - _26 <- not _27; - switch (_26) - | False -> goto BB17 - | _ -> goto BB16 - end - } - BB16 { - _0 <- Type.CreuSat_Solver_SatResult_Err; - goto BB23 - } - BB17 { - _25 <- (); - _39 <- Type.creusat_formula_formula_Formula_clauses self_1; - _40 <- i_18; - _38 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 83 15 83 30] Index0.index _39 _40); - goto BB18 - } - BB18 { - _37 <- _38; - _36 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 83 15 83 36] Len1.len _37); - goto BB19 - } - BB19 { - _35 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 83 15 83 41] _36 = (0 : usize)); - switch (_35) - | False -> goto BB21 - | _ -> goto BB20 - end - } - BB20 { - _0 <- Type.CreuSat_Solver_SatResult_Unsat; - goto BB23 - } - BB21 { - _34 <- (); - i_18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 86 12 86 18] i_18 + (1 : usize)); - _20 <- (); - goto BB11 - } - BB22 { - _19 <- (); - _0 <- Type.CreuSat_Solver_SatResult_Unknown; - goto BB24 - } - BB23 { - goto BB24 - } - BB24 { - return _0 - } - -end -module CreuSat_Logic_LogicClause_Impl2_Sat_Interface - use Type - predicate sat (self : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) -end -module CreuSat_Logic_LogicClause_Impl2_Sat - use Type - clone CreuSat_Logic_LogicClause_Impl2_SatInner_Interface as SatInner0 - clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - predicate sat [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 166 4 166 44] (self : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 167 8 169 9] SatInner0.sat_inner self (Model0.model a) -end -module CreuSat_Lit_Impl1_LitSat_Interface - use seq.Seq - use Type - use prelude.Prelude - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicLit_Impl1_Sat_Interface as Sat0 - clone CreuSat_Logic_LogicLit_Impl1_Invariant_Interface as Invariant0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments - val lit_sat [@cfg:stackify] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) : bool - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 51 4 51 43] Invariant0.invariant' self (Seq.length (Model0.model a))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 52 4 52 38] result = Sat0.sat self a } - -end -module CreuSat_Lit_Impl1_LitSat - use seq.Seq - use Type - use prelude.Prelude - use mach.int.Int - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = Invariant0.index_logic, - function IndexLogic0.index_logic = SatInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model0.model, - function Model0.model = Sat0.model - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_assignments_assignments - use mach.int.UInt64 - clone CreuSat_Assignments_Impl0_Index_Interface as Index1 - clone CreuSat_Lit_Impl1_Index_Interface as Index0 - clone CreuSat_Lit_Impl1_IsPositive_Interface as IsPositive0 - let rec cfg lit_sat [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 53 4 53 49] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) : bool - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 51 4 51 43] Invariant0.invariant' self (Seq.length (Model0.model a))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 52 4 52 38] result = Sat0.sat self a } - - = - var _0 : bool; - var self_1 : Type.creusat_lit_lit; - var a_2 : Type.creusat_assignments_assignments; - var _3 : bool; - var _4 : Type.creusat_lit_lit; - var _5 : uint8; - var _6 : uint8; - var _7 : Type.creusat_assignments_assignments; - var _8 : usize; - var _9 : Type.creusat_lit_lit; - var _10 : uint8; - var _11 : uint8; - var _12 : Type.creusat_assignments_assignments; - var _13 : usize; - var _14 : Type.creusat_lit_lit; - { - self_1 <- self; - a_2 <- a; - goto BB0 - } - BB0 { - _4 <- self_1; - _3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 54 14 54 32] IsPositive0.is_positive _4); - goto BB1 - } - BB1 { - switch (_3) - | False -> goto BB2 - | _ -> goto BB3 - end - } - BB2 { - _12 <- a_2; - _14 <- self_1; - _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 56 24 56 36] Index0.index _14); - goto BB6 - } - BB3 { - _7 <- a_2; - _9 <- self_1; - _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 55 23 55 35] Index0.index _9); - goto BB4 - } - BB4 { - _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 55 21 55 36] Index1.index _7 _8); - goto BB5 - } - BB5 { - _5 <- _6; - _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 55 20 55 42] _5 = (1 : uint8)); - goto BB8 - } - BB6 { - _11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 56 22 56 37] Index1.index _12 _13); - goto BB7 - } - BB7 { - _10 <- _11; - _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 56 21 56 43] _10 = (0 : uint8)); - goto BB8 - } - BB8 { - return _0 - } - -end -module CreuSat_Formula_Impl2_IsClauseSat_Interface - use mach.int.UInt64 - use seq.Seq - use mach.int.Int - use prelude.Prelude - use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicClause_Impl2_Sat_Interface as Sat0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val is_clause_sat [@cfg:stackify] (self : Type.creusat_formula_formula) (idx : usize) (a : Type.creusat_assignments_assignments) : bool - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 92 4 92 33] Invariant0.invariant' self} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 93 4 93 35] Invariant1.invariant' a self} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 94 4 94 45] UInt64.to_int idx < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 95 4 95 55] result = Sat0.sat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) (UInt64.to_int idx)) a } - -end -module CreuSat_Formula_Impl2_IsClauseSat - use mach.int.UInt64 - use seq.Seq - use mach.int.Int - use prelude.Prelude - use Type - use mach.int.Int32 - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = SatInner1.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = Invariant3.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant2.invariant_internal - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model4.model, axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model3.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model4 with function Model0.model = Model1.model, - function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, - function Model0.model = SatInner0.model, function Model0.model = Invariant2.model - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat1.sat_inner, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model1.modelTy - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model3 with function Model0.model = Invariant1.model, - function Model0.model = Sat0.model, function Model0.model = Sat1.model - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, - function Model0.model = Model2.model, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Invariant0.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat1 - clone CreusotContracts_Logic_Model_Impl0_Model as Model1 with type t = Type.creusat_clause_clause - clone CreuSat_Logic_LogicClause_Impl2_Sat as Sat0 - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy2 with type ModelTy0.modelTy = Model7.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model7 with type t = Type.creusat_assignments_assignments, - function Model0.model = LitSat0.model - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_clause_clause - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause, - type Output0.output = Index0.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause, - predicate HasValue0.has_value = Index0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause, - predicate InBounds0.in_bounds = Index0.in_bounds - clone CreuSat_Lit_Impl1_LitSat_Interface as LitSat0 - clone CreuSat_Clause_Impl0_Index_Interface as Index1 - clone CreuSat_Clause_Impl3_Len_Interface as Len0 - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.creusat_clause_clause, type i = usize, - type a = Type.alloc_alloc_global - let rec cfg is_clause_sat [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 96 4 96 68] (self : Type.creusat_formula_formula) (idx : usize) (a : Type.creusat_assignments_assignments) : bool - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 92 4 92 33] Invariant0.invariant' self} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 93 4 93 35] Invariant1.invariant' a self} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 94 4 94 45] UInt64.to_int idx < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 95 4 95 55] result = Sat0.sat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) (UInt64.to_int idx)) a } - - = - var _0 : bool; - var self_1 : Type.creusat_formula_formula; - var idx_2 : usize; - var a_3 : Type.creusat_assignments_assignments; - var clause_4 : Type.creusat_clause_clause; - var _5 : Type.creusat_clause_clause; - var _6 : Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global); - var _7 : usize; - var i_8 : usize; - var _9 : (); - var _10 : (); - var _11 : bool; - var _12 : usize; - var _13 : usize; - var _14 : Type.creusat_clause_clause; - var _15 : (); - var _16 : bool; - var _17 : Type.creusat_lit_lit; - var _18 : Type.creusat_lit_lit; - var _19 : Type.creusat_clause_clause; - var _20 : usize; - var _21 : Type.creusat_assignments_assignments; - var _22 : (); - var _23 : (); - var _24 : (); - var _25 : (); - { - self_1 <- self; - idx_2 <- idx; - a_3 <- a; - goto BB0 - } - BB0 { - _6 <- Type.creusat_formula_formula_Formula_clauses self_1; - _7 <- idx_2; - _5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 97 22 97 39] Index0.index _6 _7); - goto BB1 - } - BB1 { - clause_4 <- _5; - i_8 <- (0 : usize); - goto BB2 - } - BB2 { - invariant previous_not_sat { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 99 8 99 97] forall j : (int) . 0 <= j && j < UInt64.to_int i_8 -> not Sat1.sat (Seq.get (Model1.model clause_4) j) a_3 }; - _12 <- i_8; - _14 <- clause_4; - _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 100 18 100 30] Len0.len _14); - goto BB3 - } - BB3 { - _11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 100 14 100 30] _12 < _13); - switch (_11) - | False -> goto BB9 - | _ -> goto BB4 - end - } - BB4 { - _19 <- clause_4; - _20 <- i_8; - _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 101 15 101 24] Index1.index _19 _20); - goto BB5 - } - BB5 { - _17 <- _18; - _21 <- a_3; - _16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 101 15 101 35] LitSat0.lit_sat _17 _21); - goto BB6 - } - BB6 { - switch (_16) - | False -> goto BB8 - | _ -> goto BB7 - end - } - BB7 { - _0 <- true; - goto BB10 - } - BB8 { - _15 <- (); - i_8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 104 12 104 18] i_8 + (1 : usize)); - _10 <- (); - goto BB2 - } - BB9 { - _9 <- (); - _0 <- false; - goto BB10 - } - BB10 { - return _0 - } - -end -module CreuSat_Logic_LogicWatches_WatchesInvariantInternal_Interface - use seq.Seq - use Type - use mach.int.Int - predicate watches_invariant_internal (w : Seq.seq (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global))) (n : int) (f : Type.creusat_formula_formula) - -end -module CreuSat_Logic_LogicWatches_WatchesInvariantInternal - use seq.Seq - use Type - use mach.int.Int - use mach.int.Int32 - use mach.int.UInt64 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model2 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . - predicate watches_invariant_internal [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 11 0 11 83] (w : Seq.seq (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global))) (n : int) (f : Type.creusat_formula_formula) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 12 4 20 5] 2 * n = Seq.length w && (forall i : (int) . 0 <= i && i < Seq.length w -> (forall j : (int) . 0 <= j && j < Seq.length (Model0.model (Seq.get w i)) -> UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref (Seq.get (Model0.model (Seq.get w i)) j)) < Seq.length (Model1.model (Type.creusat_formula_formula_Formula_clauses f)) && Seq.length (Model2.model (Seq.get (Model1.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref (Seq.get (Model0.model (Seq.get w i)) j))))) > 1 && IndexLogic0.index_logic (Type.creusat_watches_watcher_Watcher_blocker (Seq.get (Model0.model (Seq.get w i)) j)) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))) -end -module CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface - use Type - predicate invariant' (self : Type.creusat_watches_watches) (f : Type.creusat_formula_formula) -end -module CreuSat_Logic_LogicWatches_Impl0_Invariant - use Type - use mach.int.UInt64 - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal_Interface as WatchesInvariantInternal0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - predicate invariant' [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 67 4 67 46] (self : Type.creusat_watches_watches) (f : Type.creusat_formula_formula) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 68 8 83 9] WatchesInvariantInternal0.watches_invariant_internal (Model0.model (Type.creusat_watches_watches_Watches_watches self)) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) f -end -module CreuSat_Logic_LogicFormula_Impl2_SatInner_Interface - use Type - use seq.Seq - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - predicate sat_inner (self : Type.creusat_formula_formula) (a : Seq.seq uint8) -end -module CreuSat_Logic_LogicFormula_Impl2_SatInner - use Type - use seq.Seq - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - use mach.int.Int32 - clone CreuSat_Logic_LogicClause_Impl2_SatInner_Interface as SatInner0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - predicate sat_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 149 4 149 57] (self : Type.creusat_formula_formula) (a : Seq.seq uint8) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 150 8 153 9] forall i : (int) . 0 <= i && i < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) -> SatInner0.sat_inner (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) i) a -end -module CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss_Interface - use Type - predicate eventually_sat_complete_no_ass (self : Type.creusat_formula_formula) -end -module CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss - use Type - use seq.Seq - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - use mach.int.UInt64 - clone CreuSat_Logic_LogicFormula_Impl2_SatInner_Interface as SatInner0 - clone CreuSat_Logic_LogicAssignments_CompleteInner_Interface as CompleteInner0 - predicate eventually_sat_complete_no_ass [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 80 4 80 55] (self : Type.creusat_formula_formula) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 81 8 83 9] exists a2 : (Seq.seq uint8) . Seq.length a2 = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self) && CompleteInner0.complete_inner a2 && SatInner0.sat_inner self a2 -end -module CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface - use Type - predicate equisat (self : Type.creusat_formula_formula) (o : Type.creusat_formula_formula) -end -module CreuSat_Logic_LogicFormula_Impl2_Equisat - use Type - clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss_Interface as EventuallySatCompleteNoAss0 - predicate equisat [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 86 4 86 44] (self : Type.creusat_formula_formula) (o : Type.creusat_formula_formula) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 85 4 85 16] EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass self = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass o -end -module CreuSat_Logic_LogicFormula_Compatible_Interface - use seq.Seq - use Type - use mach.int.Int - predicate compatible (f : (Seq.seq (Type.creusat_clause_clause), int)) (o : (Seq.seq (Type.creusat_clause_clause), int)) - -end -module CreuSat_Logic_LogicFormula_Compatible - use seq.Seq - use Type - use mach.int.Int - use mach.int.Int32 - clone CreuSat_Logic_LogicClause_Impl2_Equals_Interface as Equals0 - predicate compatible [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 61 0 61 67] (f : (Seq.seq (Type.creusat_clause_clause), int)) (o : (Seq.seq (Type.creusat_clause_clause), int)) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 62 4 67 5] (let (_, a) = f in a) = (let (_, a) = o in a) && Seq.length (let (a, _) = o in a) >= Seq.length (let (a, _) = f in a) && (forall i : (int) . 0 <= i && i < Seq.length (let (a, _) = f in a) -> Equals0.equals (Seq.get (let (a, _) = f in a) i) (Seq.get (let (a, _) = o in a) i)) -end -module CreuSat_Logic_LogicFormula_Equisat_Interface - use seq.Seq - use Type - use mach.int.Int - predicate equisat (f : (Seq.seq (Type.creusat_clause_clause), int)) (o : (Seq.seq (Type.creusat_clause_clause), int)) -end -module CreuSat_Logic_LogicFormula_Equisat - use seq.Seq - use Type - use mach.int.Int - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss_Interface as EventuallySatCompleteNoAss0 - predicate equisat [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 54 0 54 64] (f : (Seq.seq (Type.creusat_clause_clause), int)) (o : (Seq.seq (Type.creusat_clause_clause), int)) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 55 4 57 5] EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass f = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass o -end -module CreuSat_Logic_LogicFormula_EquisatCompatibleInner_Interface - use seq.Seq - use Type - use mach.int.Int - predicate equisat_compatible_inner (f : (Seq.seq (Type.creusat_clause_clause), int)) (o : (Seq.seq (Type.creusat_clause_clause), int)) - -end -module CreuSat_Logic_LogicFormula_EquisatCompatibleInner - use seq.Seq - use Type - use mach.int.Int - clone CreuSat_Logic_LogicFormula_Equisat_Interface as Equisat0 - clone CreuSat_Logic_LogicFormula_Compatible_Interface as Compatible0 - predicate equisat_compatible_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 71 0 71 81] (f : (Seq.seq (Type.creusat_clause_clause), int)) (o : (Seq.seq (Type.creusat_clause_clause), int)) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 72 4 74 5] Compatible0.compatible f o && Equisat0.equisat f o -end -module CreuSat_Logic_LogicFormula_Impl2_EquisatCompatible_Interface - use Type - predicate equisat_compatible (self : Type.creusat_formula_formula) (o : Type.creusat_formula_formula) -end -module CreuSat_Logic_LogicFormula_Impl2_EquisatCompatible - use Type - clone CreuSat_Logic_LogicFormula_EquisatCompatibleInner_Interface as EquisatCompatibleInner0 - clone CreuSat_Logic_LogicFormula_Impl0_Model_Interface as Model0 - predicate equisat_compatible [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 101 4 101 55] (self : Type.creusat_formula_formula) (o : Type.creusat_formula_formula) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 102 8 102 57] EquisatCompatibleInner0.equisat_compatible_inner (Model0.model self) (Model0.model o) -end -module CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic_Interface - use Type - use mach.int.Int - function to_neg_watchidx_logic [@inline:trivial] (self : Type.creusat_lit_lit) : int -end -module CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic - use Type - use mach.int.Int - use mach.int.Int32 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic_Interface as IsPositiveLogic0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - function to_neg_watchidx_logic [@inline:trivial] [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 39 4 39 45] (self : Type.creusat_lit_lit) : int - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 40 8 40 91] IndexLogic0.index_logic self * 2 + (if IsPositiveLogic0.is_positive_logic self then - 1 - else - 0 - ) -end -module CreuSat_Lit_Impl1_ToNegWatchidx_Interface - use mach.int.Int - use prelude.Prelude - use mach.int.UInt64 - use mach.int.Int32 - use Type - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic_Interface as IsPositiveLogic0 - clone CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic_Interface as ToNegWatchidxLogic0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - val to_neg_watchidx [@cfg:stackify] (self : Type.creusat_lit_lit) : usize - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 97 4 97 51] IndexLogic0.index_logic self < div 18446744073709551615 2} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 98 4 98 55] UInt64.to_int result = ToNegWatchidxLogic0.to_neg_watchidx_logic self } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 99 4 99 96] UInt64.to_int result = IndexLogic0.index_logic self * 2 + (if IsPositiveLogic0.is_positive_logic self then - 1 - else - 0 - ) } - -end -module CreuSat_Lit_Impl1_ToNegWatchidx - use mach.int.Int - use prelude.Prelude - use mach.int.UInt64 - use mach.int.Int32 - use Type - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = ToNegWatchidxLogic0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = ToNegWatchidxLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic as ToNegWatchidxLogic0 - clone CreuSat_Lit_Impl1_IsPositive_Interface as IsPositive0 - clone CreuSat_Lit_Impl1_Index_Interface as Index0 - let rec cfg to_neg_watchidx [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 100 4 100 41] (self : Type.creusat_lit_lit) : usize - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 97 4 97 51] IndexLogic0.index_logic self < div 18446744073709551615 2} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 98 4 98 55] UInt64.to_int result = ToNegWatchidxLogic0.to_neg_watchidx_logic self } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 99 4 99 96] UInt64.to_int result = IndexLogic0.index_logic self * 2 + (if IsPositiveLogic0.is_positive_logic self then - 1 - else - 0 - ) } - - = - var _0 : usize; - var self_1 : Type.creusat_lit_lit; - var _2 : usize; - var _3 : usize; - var _4 : Type.creusat_lit_lit; - var _5 : usize; - var _6 : bool; - var _7 : Type.creusat_lit_lit; - { - self_1 <- self; - goto BB0 - } - BB0 { - _4 <- self_1; - _3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 101 8 101 20] Index0.index _4); - goto BB1 - } - BB1 { - _2 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 101 8 101 24] _3 * (2 : usize)); - _7 <- self_1; - _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 101 30 101 48] IsPositive0.is_positive _7); - goto BB2 - } - BB2 { - switch (_6) - | False -> goto BB4 - | _ -> goto BB3 - end - } - BB3 { - _5 <- (1 : usize); - goto BB5 - } - BB4 { - _5 <- (0 : usize); - goto BB5 - } - BB5 { - _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 101 8 101 65] _2 + _5); - return _0 - } - -end -module CreuSat_Watches_Impl0_AddWatcher_Interface - use mach.int.UInt64 - use seq.Seq - use mach.int.Int - use prelude.Prelude - use mach.int.Int32 - use Type - clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model2 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic_Interface as ToNegWatchidxLogic0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant0 - val add_watcher [@cfg:stackify] (self : borrowed (Type.creusat_watches_watches)) (lit : Type.creusat_lit_lit) (cref : usize) (_f : Type.creusat_formula_formula) (blocker : Type.creusat_lit_lit) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 105 4 105 43] Invariant0.invariant' ( * self) _f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 106 4 106 44] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses _f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 107 4 107 50] IndexLogic0.index_logic lit < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 108 4 108 53] IndexLogic0.index_logic blocker < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 109 4 109 68] ToNegWatchidxLogic0.to_neg_watchidx_logic lit < Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * self)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 110 4 110 50] Seq.length (Model2.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) > 1} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 105 4 105 43] Invariant0.invariant' ( ^ self) _f } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 111 4 111 65] Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * self))) = Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( ^ self))) } - -end -module CreuSat_Watches_Impl0_AddWatcher - use mach.int.UInt64 - use seq.Seq - use mach.int.Int - use prelude.Prelude - use mach.int.Int32 - use Type - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model2.model, axiom . - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = ToNegWatchidxLogic0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = ToNegWatchidxLogic0.index_logic, - function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic - clone CreuSat_Logic_LogicClause_Impl0_Model as Model2 with function Model2.model = WatchesInvariantInternal0.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model1.model = WatchesInvariantInternal0.model, axiom . - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant0.watches_invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, function Model0.model = Invariant0.model, axiom . - clone CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic as ToNegWatchidxLogic0 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant0 - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type Output0.output = IndexMut0.output - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - predicate HasValue0.has_value = IndexMut0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - predicate InBounds0.in_bounds = IndexMut0.in_bounds - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone Alloc_Vec_Impl1_Push_Interface as Push0 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type i = usize, type a = Type.alloc_alloc_global - clone CreuSat_Lit_Impl1_ToNegWatchidx_Interface as ToNegWatchidx0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_watches_watches - let rec cfg add_watcher [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 112 4 112 84] (self : borrowed (Type.creusat_watches_watches)) (lit : Type.creusat_lit_lit) (cref : usize) (_f : Type.creusat_formula_formula) (blocker : Type.creusat_lit_lit) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 105 4 105 43] Invariant0.invariant' ( * self) _f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 106 4 106 44] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses _f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 107 4 107 50] IndexLogic0.index_logic lit < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 108 4 108 53] IndexLogic0.index_logic blocker < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 109 4 109 68] ToNegWatchidxLogic0.to_neg_watchidx_logic lit < Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * self)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 110 4 110 50] Seq.length (Model2.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) > 1} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 105 4 105 43] Invariant0.invariant' ( ^ self) _f } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 111 4 111 65] Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * self))) = Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( ^ self))) } - - = - var _0 : (); - var self_1 : borrowed (Type.creusat_watches_watches); - var lit_2 : Type.creusat_lit_lit; - var cref_3 : usize; - var _f_4 : Type.creusat_formula_formula; - var blocker_5 : Type.creusat_lit_lit; - var _6 : (); - var _7 : borrowed (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)); - var _8 : borrowed (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)); - var _9 : borrowed (Type.alloc_vec_vec (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)) (Type.alloc_alloc_global)); - var _10 : usize; - var _11 : Type.creusat_lit_lit; - var _12 : Type.creusat_watches_watcher; - var _13 : usize; - var _14 : Type.creusat_lit_lit; - { - self_1 <- self; - lit_2 <- lit; - cref_3 <- cref; - _f_4 <- _f; - blocker_5 <- blocker; - goto BB0 - } - BB0 { - _9 <- borrow_mut (Type.creusat_watches_watches_Watches_watches ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Watches_Watches a = * self_1 in Type.CreuSat_Watches_Watches ( ^ _9)) }; - assume { Resolve0.resolve self_1 }; - _11 <- lit_2; - _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 113 21 113 42] ToNegWatchidx0.to_neg_watchidx _11); - goto BB1 - } - BB1 { - _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 113 8 113 43] IndexMut0.index_mut _9 _10); - goto BB2 - } - BB2 { - _7 <- borrow_mut ( * _8); - _8 <- { _8 with current = ( ^ _7) }; - _13 <- cref_3; - _14 <- blocker_5; - _12 <- Type.CreuSat_Watches_Watcher _13 _14; - _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 113 8 113 75] Push0.push _7 _12); - goto BB3 - } - BB3 { - assume { Resolve1.resolve _8 }; - _0 <- (); - return _0 - } - -end -module CreuSat_Formula_Impl2_AddClause_Interface - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use mach.int.UInt64 - use prelude.Prelude - use Type - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model1.modelTy - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 - clone CreuSat_Logic_LogicClause_EquisatExtensionInner_Interface as EquisatExtensionInner0 - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model1 with type t = Type.creusat_formula_formula - clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant3 - clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val add_clause [@cfg:stackify] (self : borrowed (Type.creusat_formula_formula)) (clause : Type.creusat_clause_clause) (watches : borrowed (Type.creusat_watches_watches)) (_t : Type.creusat_trail_trail) : usize - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 110 4 110 40] Invariant0.invariant' ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 111 4 111 40] Invariant1.invariant' _t ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 112 4 112 51] Invariant2.invariant' ( * watches) ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 113 4 113 37] Seq.length (Model0.model clause) >= 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 114 4 114 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 117 4 117 49] Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 118 4 118 55] EquisatExtensionInner0.equisat_extension_inner clause (Model1.model self)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 110 4 110 40] Invariant0.invariant' ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 111 4 111 40] Invariant1.invariant' _t ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 112 4 112 51] Invariant2.invariant' ( ^ watches) ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 119 4 119 51] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ self)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 120 4 120 35] Equisat0.equisat ( * self) ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 121 4 121 48] UInt64.to_int result = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 122 4 122 53] Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) (UInt64.to_int result) = clause } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 123 4 123 69] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) + 1 = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) } - -end -module CreuSat_Formula_Impl2_AddClause - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use mach.int.UInt64 - use prelude.Prelude - use Type - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = Invariant6.index_logic, function IndexLogic0.index_logic = SatInner1.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model0 with function Model0.model = Invariant3.model, - function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, - function Model2.model = WatchesInvariantInternal0.model, function Model1.model = UnitAreSat0.model, - function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, - function Model1.model = Invariant7.model, function Model0.model = SatInner2.model, - function Model0.model = Equals0.model - clone CreuSat_Logic_LogicClause_Impl2_Equals as Equals0 with predicate Equals0.equals = Compatible0.equals - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, - function Model0.model = Model4.model, function Model3.model = InvariantNoDecisionMirror0.model, - function Model1.model = WatchesInvariantInternal0.model, function Model0.model = LongArePostUnitInner0.model, - function Model0.model = UnitAreSat0.model, function Model0.model = SatInner0.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model8.model, axiom . - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss0.formula_sat_inner - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner, - predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss1.complete_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass, - predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat1.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicFormula_Equisat as Equisat1 with predicate Equisat0.equisat = EquisatCompatibleInner0.equisat - clone CreuSat_Logic_LogicFormula_Compatible as Compatible0 with predicate Compatible0.compatible = EquisatCompatibleInner0.compatible - clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss1.sat_inner - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model8 with function Model2.model = InvariantNoDecision0.model, - function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant4.model, - function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicFormula_EquisatCompatibleInner as EquisatCompatibleInner0 with predicate EquisatCompatibleInner0.equisat_compatible_inner = EquisatCompatible0.equisat_compatible_inner - clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model1.modelTy - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant2.watches_invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model4 with function Model0.model = Invariant0.model, - function Model0.model = Model1.model, function Model0.model = EquisatCompatible0.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_EquisatCompatible as EquisatCompatible0 - clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 - clone CreusotContracts_Logic_Model_Impl1_Model as Model1 with type t = Type.creusat_formula_formula - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - clone CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic as ToNegWatchidxLogic0 with function ToNegWatchidxLogic0.to_neg_watchidx_logic = AddWatcher0.to_neg_watchidx_logic - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model11.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_clause_clause, - function Model0.model = Index0.model - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_watches_watches - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula - clone CreuSat_Watches_Impl0_AddWatcher_Interface as AddWatcher0 - clone Alloc_Vec_Impl1_Push_Interface as Push0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global - clone CreuSat_Clause_Impl0_Index_Interface as Index0 - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global - let rec cfg add_clause [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 124 4 124 92] (self : borrowed (Type.creusat_formula_formula)) (clause : Type.creusat_clause_clause) (watches : borrowed (Type.creusat_watches_watches)) (_t : Type.creusat_trail_trail) : usize - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 110 4 110 40] Invariant0.invariant' ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 111 4 111 40] Invariant1.invariant' _t ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 112 4 112 51] Invariant2.invariant' ( * watches) ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 113 4 113 37] Seq.length (Model0.model clause) >= 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 114 4 114 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 117 4 117 49] Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 118 4 118 55] EquisatExtensionInner0.equisat_extension_inner clause (Model1.model self)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 110 4 110 40] Invariant0.invariant' ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 111 4 111 40] Invariant1.invariant' _t ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 112 4 112 51] Invariant2.invariant' ( ^ watches) ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 119 4 119 51] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ self)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 120 4 120 35] Equisat0.equisat ( * self) ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 121 4 121 48] UInt64.to_int result = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 122 4 122 53] Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) (UInt64.to_int result) = clause } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 123 4 123 69] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) + 1 = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) } - - = - var _0 : usize; - var self_1 : borrowed (Type.creusat_formula_formula); - var clause_2 : Type.creusat_clause_clause; - var watches_3 : borrowed (Type.creusat_watches_watches); - var _t_4 : Type.creusat_trail_trail; - ghost var old_self_5 : borrowed (Type.creusat_formula_formula); - var _6 : (); - var cref_7 : usize; - var _8 : Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global); - var first_lit_9 : Type.creusat_lit_lit; - var _10 : Type.creusat_lit_lit; - var _11 : Type.creusat_clause_clause; - var second_lit_12 : Type.creusat_lit_lit; - var _13 : Type.creusat_lit_lit; - var _14 : Type.creusat_clause_clause; - var _15 : (); - var _16 : borrowed (Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global)); - var _17 : Type.creusat_clause_clause; - var _18 : (); - var _19 : borrowed (Type.creusat_watches_watches); - var _20 : Type.creusat_lit_lit; - var _21 : usize; - var _22 : Type.creusat_formula_formula; - var _23 : Type.creusat_lit_lit; - var _24 : (); - var _25 : borrowed (Type.creusat_watches_watches); - var _26 : Type.creusat_lit_lit; - var _27 : usize; - var _28 : Type.creusat_formula_formula; - var _29 : Type.creusat_lit_lit; - var _30 : (); - var _31 : (); - var _32 : (); - var _33 : (); - { - self_1 <- self; - clause_2 <- clause; - watches_3 <- watches; - _t_4 <- _t; - goto BB0 - } - BB0 { - goto BB1 - } - BB1 { - goto BB2 - } - BB2 { - goto BB3 - } - BB3 { - goto BB4 - } - BB4 { - _6 <- (); - old_self_5 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 125 23 125 38] self_1); - goto BB5 - } - BB5 { - _8 <- Type.creusat_formula_formula_Formula_clauses ( * self_1); - cref_7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 126 19 126 37] Len0.len _8); - goto BB6 - } - BB6 { - _11 <- clause_2; - _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 131 24 131 33] Index0.index _11 (0 : usize)); - goto BB7 - } - BB7 { - first_lit_9 <- _10; - _14 <- clause_2; - _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 132 25 132 34] Index0.index _14 (1 : usize)); - goto BB8 - } - BB8 { - second_lit_12 <- _13; - _16 <- borrow_mut (Type.creusat_formula_formula_Formula_clauses ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Formula_Formula a b = * self_1 in Type.CreuSat_Formula_Formula ( ^ _16) b) }; - _17 <- clause_2; - _15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 133 8 133 33] Push0.push _16 _17); - goto BB9 - } - BB9 { - _19 <- borrow_mut ( * watches_3); - watches_3 <- { watches_3 with current = ( ^ _19) }; - _20 <- first_lit_9; - _21 <- cref_7; - _22 <- * self_1; - _23 <- second_lit_12; - _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 134 8 134 62] AddWatcher0.add_watcher _19 _20 _21 _22 _23); - goto BB10 - } - BB10 { - _25 <- borrow_mut ( * watches_3); - watches_3 <- { watches_3 with current = ( ^ _25) }; - _26 <- second_lit_12; - _27 <- cref_7; - _28 <- * self_1; - assume { Resolve0.resolve self_1 }; - _29 <- first_lit_9; - _24 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 135 8 135 62] AddWatcher0.add_watcher _25 _26 _27 _28 _29); - goto BB11 - } - BB11 { - assume { Resolve1.resolve watches_3 }; - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 136 8 136 49] ^ old_self_5 = ^ self_1 }; - _30 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 137 8 137 57] EquisatCompatible0.equisat_compatible ( * old_self_5) ( * self_1) }; - _31 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 138 8 138 46] Equisat0.equisat ( * old_self_5) ( * self_1) }; - _32 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 139 8 139 56] TrailInvariant0.trail_invariant (Model3.model (Type.creusat_trail_trail_Trail_trail _t_4)) ( * self_1) }; - _33 <- (); - _0 <- cref_7; - goto BB12 - } - BB12 { - return _0 - } - -end -module CreuSat_Formula_Impl2_AddUnwatchedClause_Interface - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use mach.int.UInt64 - use prelude.Prelude - use Type - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model1.modelTy - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 - clone CreuSat_Logic_LogicClause_EquisatExtensionInner_Interface as EquisatExtensionInner0 - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model1 with type t = Type.creusat_formula_formula - clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant3 - clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val add_unwatched_clause [@cfg:stackify] (self : borrowed (Type.creusat_formula_formula)) (clause : Type.creusat_clause_clause) (watches : borrowed (Type.creusat_watches_watches)) (_t : Type.creusat_trail_trail) : usize - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 144 4 144 40] Invariant0.invariant' ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 145 4 145 40] Invariant1.invariant' _t ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 146 4 146 51] Invariant2.invariant' ( * watches) ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 147 4 147 37] Seq.length (Model0.model clause) >= 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 148 4 148 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 151 4 151 49] Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 152 4 152 55] EquisatExtensionInner0.equisat_extension_inner clause (Model1.model self)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 144 4 144 40] Invariant0.invariant' ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 145 4 145 40] Invariant1.invariant' _t ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 146 4 146 51] Invariant2.invariant' ( ^ watches) ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 153 4 153 51] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ self)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 154 4 154 35] Equisat0.equisat ( * self) ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 155 4 155 48] UInt64.to_int result = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 156 4 156 53] Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) (UInt64.to_int result) = clause } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 157 4 157 69] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) + 1 = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) } - -end -module CreuSat_Formula_Impl2_AddUnwatchedClause - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use mach.int.UInt64 - use prelude.Prelude - use Type - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = Invariant6.index_logic, function IndexLogic0.index_logic = SatInner1.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model0 with function Model0.model = Invariant3.model, - function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, - function Model2.model = WatchesInvariantInternal0.model, function Model1.model = UnitAreSat0.model, - function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, - function Model1.model = Invariant7.model, function Model0.model = SatInner2.model, - function Model0.model = Equals0.model - clone CreuSat_Logic_LogicClause_Impl2_Equals as Equals0 with predicate Equals0.equals = Compatible0.equals - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, - function Model0.model = Model4.model, function Model3.model = InvariantNoDecisionMirror0.model, - function Model1.model = WatchesInvariantInternal0.model, function Model0.model = LongArePostUnitInner0.model, - function Model0.model = UnitAreSat0.model, function Model0.model = SatInner0.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model8.model, axiom . - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss0.formula_sat_inner - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner, - predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss1.complete_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass, - predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat1.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicFormula_Equisat as Equisat1 with predicate Equisat0.equisat = EquisatCompatibleInner0.equisat - clone CreuSat_Logic_LogicFormula_Compatible as Compatible0 with predicate Compatible0.compatible = EquisatCompatibleInner0.compatible - clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss1.sat_inner - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model8 with function Model2.model = InvariantNoDecision0.model, - function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant4.model, - function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicFormula_EquisatCompatibleInner as EquisatCompatibleInner0 with predicate EquisatCompatibleInner0.equisat_compatible_inner = EquisatCompatible0.equisat_compatible_inner - clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model1.modelTy - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant2.watches_invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model4 with function Model0.model = Invariant0.model, - function Model0.model = Model1.model, function Model0.model = EquisatCompatible0.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_EquisatCompatible as EquisatCompatible0 - clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 - clone CreusotContracts_Logic_Model_Impl1_Model as Model1 with type t = Type.creusat_formula_formula - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_formula_formula - clone Alloc_Vec_Impl1_Push_Interface as Push0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_watches_watches - let rec cfg add_unwatched_clause [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 158 4 158 102] (self : borrowed (Type.creusat_formula_formula)) (clause : Type.creusat_clause_clause) (watches : borrowed (Type.creusat_watches_watches)) (_t : Type.creusat_trail_trail) : usize - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 144 4 144 40] Invariant0.invariant' ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 145 4 145 40] Invariant1.invariant' _t ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 146 4 146 51] Invariant2.invariant' ( * watches) ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 147 4 147 37] Seq.length (Model0.model clause) >= 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 148 4 148 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 151 4 151 49] Invariant3.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 152 4 152 55] EquisatExtensionInner0.equisat_extension_inner clause (Model1.model self)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 144 4 144 40] Invariant0.invariant' ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 145 4 145 40] Invariant1.invariant' _t ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 146 4 146 51] Invariant2.invariant' ( ^ watches) ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 153 4 153 51] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ self)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 154 4 154 35] Equisat0.equisat ( * self) ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 155 4 155 48] UInt64.to_int result = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 156 4 156 53] Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) (UInt64.to_int result) = clause } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 157 4 157 69] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) + 1 = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) } - - = - var _0 : usize; - var self_1 : borrowed (Type.creusat_formula_formula); - var clause_2 : Type.creusat_clause_clause; - var watches_3 : borrowed (Type.creusat_watches_watches); - var _t_4 : Type.creusat_trail_trail; - ghost var old_self_5 : borrowed (Type.creusat_formula_formula); - var _6 : (); - var cref_7 : usize; - var _8 : Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global); - var _9 : (); - var _10 : borrowed (Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global)); - var _11 : Type.creusat_clause_clause; - var _12 : (); - var _13 : (); - { - self_1 <- self; - clause_2 <- clause; - watches_3 <- watches; - _t_4 <- _t; - goto BB0 - } - BB0 { - assume { Resolve0.resolve watches_3 }; - goto BB1 - } - BB1 { - goto BB2 - } - BB2 { - goto BB3 - } - BB3 { - goto BB4 - } - BB4 { - _6 <- (); - old_self_5 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 159 23 159 38] self_1); - goto BB5 - } - BB5 { - _8 <- Type.creusat_formula_formula_Formula_clauses ( * self_1); - cref_7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 160 19 160 37] Len0.len _8); - goto BB6 - } - BB6 { - _10 <- borrow_mut (Type.creusat_formula_formula_Formula_clauses ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Formula_Formula a b = * self_1 in Type.CreuSat_Formula_Formula ( ^ _10) b) }; - _11 <- clause_2; - _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 161 8 161 33] Push0.push _10 _11); - goto BB7 - } - BB7 { - assume { Resolve1.resolve self_1 }; - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 162 8 162 57] EquisatCompatible0.equisat_compatible ( * old_self_5) ( * self_1) }; - _12 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 163 8 163 56] TrailInvariant0.trail_invariant (Model3.model (Type.creusat_trail_trail_Trail_trail _t_4)) ( * self_1) }; - _13 <- (); - _0 <- cref_7; - goto BB8 - } - BB8 { - return _0 - } - -end -module CreuSat_Formula_Impl2_AddUnit_Interface - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use mach.int.UInt64 - use prelude.Prelude - use Type - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model1.modelTy - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 - clone CreuSat_Logic_LogicFormula_Impl2_EquisatCompatible_Interface as EquisatCompatible0 - clone CreuSat_Logic_LogicClause_EquisatExtensionInner_Interface as EquisatExtensionInner0 - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model1 with type t = Type.creusat_formula_formula - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner_Interface as NoDuplicateIndexesInner0 - clone CreuSat_Logic_LogicClause_VarsInRangeInner_Interface as VarsInRangeInner0 - clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val add_unit [@cfg:stackify] (self : borrowed (Type.creusat_formula_formula)) (clause : Type.creusat_clause_clause) (_t : Type.creusat_trail_trail) : usize - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 168 4 168 40] Invariant0.invariant' ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 169 4 169 40] Invariant1.invariant' _t ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 170 4 170 37] Seq.length (Model0.model clause) = 1} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 171 4 171 49] Invariant2.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 172 4 172 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 173 4 173 61] VarsInRangeInner0.vars_in_range_inner (Model0.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 174 4 174 52] NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model0.model clause)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 175 4 175 55] EquisatExtensionInner0.equisat_extension_inner clause (Model1.model self)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 168 4 168 40] Invariant0.invariant' ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 169 4 169 40] Invariant1.invariant' _t ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 176 4 176 51] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ self)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 177 4 177 46] EquisatCompatible0.equisat_compatible ( * self) ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 178 4 178 35] Equisat0.equisat ( * self) ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 179 4 179 48] UInt64.to_int result = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 180 4 180 57] Seq.length (Model0.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) (UInt64.to_int result))) = 1 } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 181 4 181 69] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) + 1 = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) } - -end -module CreuSat_Formula_Impl2_AddUnit - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use mach.int.UInt64 - use prelude.Prelude - use Type - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = Invariant3.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = SatInner1.index_logic, function IndexLogic0.index_logic = UnsatInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model0 with function Model0.model = Invariant2.model, - function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, - function Model1.model = UnitAreSat0.model, function Model0.model = LitIdxIn0.model, - function Model0.model = ClausePostWithRegardsToInner0.model, function Model1.model = Invariant6.model, - function Model0.model = SatInner2.model, function Model0.model = Equals0.model - clone CreuSat_Logic_LogicClause_Impl2_Equals as Equals0 with predicate Equals0.equals = Compatible0.equals - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, - function Model0.model = Model3.model, function Model3.model = InvariantNoDecisionMirror0.model, - function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, - function Model0.model = SatInner0.model, function Model0.model = LitNotInLessInner0.model, - function Model0.model = Invariant6.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant6 with predicate Invariant1.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model7.model, axiom . - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant', - predicate Invariant0.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss1.sat_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss0.formula_sat_inner - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner, - predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss1.complete_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass, - predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat1.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicFormula_Equisat as Equisat1 with predicate Equisat0.equisat = EquisatCompatibleInner0.equisat - clone CreuSat_Logic_LogicFormula_Compatible as Compatible0 with predicate Compatible0.compatible = EquisatCompatibleInner0.compatible - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model7 with function Model2.model = InvariantNoDecision0.model, - function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant4.model, - function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicFormula_EquisatCompatibleInner as EquisatCompatibleInner0 with predicate EquisatCompatibleInner0.equisat_compatible_inner = EquisatCompatible0.equisat_compatible_inner - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model1.modelTy - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant2.invariant_internal - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model3 with function Model0.model = Invariant0.model, - function Model0.model = Model1.model, function Model0.model = EquisatCompatible0.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 - clone CreuSat_Logic_LogicFormula_Impl2_EquisatCompatible as EquisatCompatible0 - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 - clone CreusotContracts_Logic_Model_Impl1_Model as Model1 with type t = Type.creusat_formula_formula - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula - clone Alloc_Vec_Impl1_Push_Interface as Push0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global - let rec cfg add_unit [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 182 4 182 67] (self : borrowed (Type.creusat_formula_formula)) (clause : Type.creusat_clause_clause) (_t : Type.creusat_trail_trail) : usize - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 168 4 168 40] Invariant0.invariant' ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 169 4 169 40] Invariant1.invariant' _t ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 170 4 170 37] Seq.length (Model0.model clause) = 1} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 171 4 171 49] Invariant2.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 172 4 172 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 173 4 173 61] VarsInRangeInner0.vars_in_range_inner (Model0.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 174 4 174 52] NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model0.model clause)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 175 4 175 55] EquisatExtensionInner0.equisat_extension_inner clause (Model1.model self)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 168 4 168 40] Invariant0.invariant' ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 169 4 169 40] Invariant1.invariant' _t ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 176 4 176 51] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ self)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 177 4 177 46] EquisatCompatible0.equisat_compatible ( * self) ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 178 4 178 35] Equisat0.equisat ( * self) ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 179 4 179 48] UInt64.to_int result = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 180 4 180 57] Seq.length (Model0.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) (UInt64.to_int result))) = 1 } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 181 4 181 69] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * self))) + 1 = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ self))) } - - = - var _0 : usize; - var self_1 : borrowed (Type.creusat_formula_formula); - var clause_2 : Type.creusat_clause_clause; - var _t_3 : Type.creusat_trail_trail; - ghost var old_self_4 : borrowed (Type.creusat_formula_formula); - var _5 : (); - var cref_6 : usize; - var _7 : Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global); - var _8 : (); - var _9 : borrowed (Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global)); - var _10 : Type.creusat_clause_clause; - var _11 : (); - { - self_1 <- self; - clause_2 <- clause; - _t_3 <- _t; - goto BB0 - } - BB0 { - goto BB1 - } - BB1 { - goto BB2 - } - BB2 { - goto BB3 - } - BB3 { - goto BB4 - } - BB4 { - goto BB5 - } - BB5 { - _5 <- (); - old_self_4 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 183 23 183 38] self_1); - goto BB6 - } - BB6 { - _7 <- Type.creusat_formula_formula_Formula_clauses ( * self_1); - cref_6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 184 19 184 37] Len0.len _7); - goto BB7 - } - BB7 { - _9 <- borrow_mut (Type.creusat_formula_formula_Formula_clauses ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Formula_Formula a b = * self_1 in Type.CreuSat_Formula_Formula ( ^ _9) b) }; - _10 <- clause_2; - _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 185 8 185 33] Push0.push _9 _10); - goto BB8 - } - BB8 { - assume { Resolve0.resolve self_1 }; - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 186 8 186 57] EquisatCompatible0.equisat_compatible ( * old_self_4) ( * self_1) }; - _11 <- (); - _0 <- cref_6; - goto BB9 - } - BB9 { - return _0 - } - -end -module CreuSat_Logic_LogicFormula_Impl2_Sat_Interface - use Type - predicate sat (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) -end -module CreuSat_Logic_LogicFormula_Impl2_Sat - use Type - clone CreuSat_Logic_LogicFormula_FormulaSatInner_Interface as FormulaSatInner0 - clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model1 - clone CreuSat_Logic_LogicFormula_Impl0_Model_Interface as Model0 - predicate sat [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 157 4 157 44] (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 158 8 158 50] FormulaSatInner0.formula_sat_inner (Model0.model self) (Model1.model a) -end -module CreuSat_Formula_Impl2_IsSat_Interface - use prelude.Prelude - use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_Sat_Interface as Sat0 - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val is_sat [@cfg:stackify] (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) : bool - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 192 4 192 33] Invariant0.invariant' self} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 193 4 193 35] Invariant1.invariant' a self} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 194 4 194 38] result = Sat0.sat self a } - -end -module CreuSat_Formula_Impl2_IsSat - use prelude.Prelude - use Type - use mach.int.Int - use mach.int.Int32 - use mach.int.UInt64 - use seq.Seq - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = SatInner1.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = Invariant3.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model3.model, axiom . - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant2.invariant_internal - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model2.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model3 with function Model1.model = InvariantMirror0.model, - function Model0.model = FormulaInvariant0.model, function Model0.model = SatInner0.model, - function Model0.model = Invariant2.model - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat1.sat_inner, - predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = Sat0.formula_sat_inner - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model0.model = Invariant1.model, - function Model1.model = Sat0.model, function Model0.model = Sat1.model - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, - function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Invariant0.model, - function Model0.model = Sat0.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicClause_Impl2_Sat as Sat1 - clone CreuSat_Logic_LogicFormula_Impl2_Sat as Sat0 - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - clone CreuSat_Formula_Impl2_IsClauseSat_Interface as IsClauseSat0 - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global - let rec cfg is_sat [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 195 4 195 49] (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) : bool - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 192 4 192 33] Invariant0.invariant' self} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 193 4 193 35] Invariant1.invariant' a self} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 194 4 194 38] result = Sat0.sat self a } - - = - var _0 : bool; - var self_1 : Type.creusat_formula_formula; - var a_2 : Type.creusat_assignments_assignments; - var i_3 : usize; - var _4 : (); - var _5 : (); - var _6 : bool; - var _7 : usize; - var _8 : usize; - var _9 : Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global); - var _10 : (); - var _11 : bool; - var _12 : bool; - var _13 : Type.creusat_formula_formula; - var _14 : usize; - var _15 : Type.creusat_assignments_assignments; - var _16 : (); - var _17 : (); - var _18 : (); - var _19 : (); - { - self_1 <- self; - a_2 <- a; - goto BB0 - } - BB0 { - i_3 <- (0 : usize); - goto BB1 - } - BB1 { - invariant prev { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 197 8 197 90] forall k : (int) . 0 <= k && k < UInt64.to_int i_3 -> Sat1.sat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self_1)) k) a_2 }; - _7 <- i_3; - _9 <- Type.creusat_formula_formula_Formula_clauses self_1; - _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 198 18 198 36] Len0.len _9); - goto BB2 - } - BB2 { - _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 198 14 198 36] _7 < _8); - switch (_6) - | False -> goto BB7 - | _ -> goto BB3 - end - } - BB3 { - _13 <- self_1; - _14 <- i_3; - _15 <- a_2; - _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 199 16 199 40] IsClauseSat0.is_clause_sat _13 _14 _15); - goto BB4 - } - BB4 { - _11 <- not _12; - switch (_11) - | False -> goto BB6 - | _ -> goto BB5 - end - } - BB5 { - _0 <- false; - goto BB8 - } - BB6 { - _10 <- (); - i_3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 202 12 202 18] i_3 + (1 : usize)); - _5 <- (); - goto BB1 - } - BB7 { - _4 <- (); - _0 <- true; - goto BB8 - } - BB8 { - return _0 - } - -end -module CreuSat_Logic_LogicWatches_WatcherCrefsInRange_Interface - use seq.Seq - use Type - predicate watcher_crefs_in_range (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) -end -module CreuSat_Logic_LogicWatches_WatcherCrefsInRange - use seq.Seq - use Type - use mach.int.Int - use mach.int.Int32 - use mach.int.UInt64 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - predicate watcher_crefs_in_range [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 35 0 35 66] (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 36 4 39 5] forall j : (int) . 0 <= j && j < Seq.length w -> UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref (Seq.get w j)) < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) -end -module CreuSat_Logic_LogicUtil_Pop_Interface - type t - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use seq_ext.SeqExt - function pop (s : Seq.seq t) : Seq.seq t -end -module CreuSat_Logic_LogicUtil_Pop - type t - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use seq_ext.SeqExt - function pop [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 68 0 68 34] (s : Seq.seq t) : Seq.seq t = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 69 4 71 5] SeqExt.subsequence s 0 (Seq.length s - 1) - axiom pop_spec : forall s : Seq.seq t . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 64 0 64 24] Seq.length s > 0) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 67 0 67 75] forall i : (int) . 0 <= i && i < Seq.length (pop s) -> Seq.get (pop s) i = Seq.get s i) && ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 66 0 66 39] Seq.length (pop s) = Seq.length s - 1) && ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 65 0 65 51] pop s = SeqExt.subsequence s 0 (Seq.length s - 1)) -end -module CreuSat_Logic_LogicUtil_Pop_Impl - type t - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use seq_ext.SeqExt - let rec ghost function pop (s : Seq.seq t) : Seq.seq t - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 64 0 64 24] Seq.length s > 0} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 65 0 65 51] result = SeqExt.subsequence s 0 (Seq.length s - 1) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 66 0 66 39] Seq.length result = Seq.length s - 1 } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 67 0 67 75] forall i : (int) . 0 <= i && i < Seq.length result -> Seq.get result i = Seq.get s i } - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 69 4 71 5] SeqExt.subsequence s 0 (Seq.length s - 1) -end -module CreuSat_Logic_LogicWatches_LemmaPopWatchMaintainsWatcherInvariant_Interface - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use Type - clone CreuSat_Logic_LogicUtil_Pop_Interface as Pop0 with type t = Type.creusat_watches_watcher, axiom . - clone CreuSat_Logic_LogicWatches_WatcherCrefsInRange_Interface as WatcherCrefsInRange0 - function lemma_pop_watch_maintains_watcher_invariant (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) : () - -end -module CreuSat_Logic_LogicWatches_LemmaPopWatchMaintainsWatcherInvariant - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use Type - clone CreuSat_Logic_LogicUtil_Pop_Interface as Pop0 with type t = Type.creusat_watches_watcher, axiom . - clone CreuSat_Logic_LogicWatches_WatcherCrefsInRange_Interface as WatcherCrefsInRange0 - function lemma_pop_watch_maintains_watcher_invariant [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 55 0 55 79] (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) : () - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 50 0 50 8] () - axiom lemma_pop_watch_maintains_watcher_invariant_spec : forall w : Seq.seq (Type.creusat_watches_watcher), f : Type.creusat_formula_formula . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 52 0 52 24] Seq.length w > 0) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 53 0 53 41] WatcherCrefsInRange0.watcher_crefs_in_range w f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 54 0 54 45] WatcherCrefsInRange0.watcher_crefs_in_range (Pop0.pop w) f) -end -module CreuSat_Logic_LogicWatches_LemmaPopWatchMaintainsWatcherInvariant_Impl - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use Type - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = WatcherCrefsInRange0.model, axiom . - clone CreuSat_Logic_LogicUtil_Pop as Pop0 with type t = Type.creusat_watches_watcher, axiom . - clone CreuSat_Logic_LogicWatches_WatcherCrefsInRange as WatcherCrefsInRange0 - let rec ghost function lemma_pop_watch_maintains_watcher_invariant (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 52 0 52 24] Seq.length w > 0} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 53 0 53 41] WatcherCrefsInRange0.watcher_crefs_in_range w f} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 54 0 54 45] WatcherCrefsInRange0.watcher_crefs_in_range (Pop0.pop w) f } - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 50 0 50 8] () -end -module CreuSat_Watches_Impl0_Unwatch_Interface - use mach.int.UInt64 - use mach.int.Int - use prelude.Prelude - use mach.int.Int32 - use seq.Seq - use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant1.invariant_mirror - clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant1 with axiom . - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant0 - val unwatch [@cfg:stackify] (self : borrowed (Type.creusat_watches_watches)) (f : Type.creusat_formula_formula) (trail : Type.creusat_trail_trail) (cref : usize) (lit : Type.creusat_lit_lit) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 155 4 155 42] Invariant0.invariant' ( * self) f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 156 4 156 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 157 4 157 48] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 158 4 158 30] Invariant1.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 159 4 159 36] Invariant2.invariant' trail f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 160 4 160 43] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 161 4 161 50] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) >= 2} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 155 4 155 42] Invariant0.invariant' ( ^ self) f } - -end -module CreuSat_Watches_Impl0_Unwatch - use mach.int.UInt64 - use mach.int.Int - use prelude.Prelude - use mach.int.Int32 - use seq.Seq - use Type - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = Invariant6.index_logic, function IndexLogic0.index_logic = SatInner0.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model2.model = WatchesInvariantInternal0.model, - function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, - function Model0.model = Invariant3.model, function Model1.model = UnitAreSat0.model, - function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, - function Model1.model = Invariant7.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = WatcherCrefsInRange0.model, - function Model1.model = WatchesInvariantInternal0.model, function Model0.model = InvariantMirror0.model, - function Model0.model = Model4.model, function Model3.model = InvariantNoDecisionMirror0.model, - function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model8.model, axiom . - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model8 with function Model2.model = InvariantNoDecision0.model, - function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant4.model, - function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant2.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant2.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant2.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant2.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant1.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model4 with function Model0.model = Invariant1.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant1.invariant_mirror - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant0.watches_invariant_internal - clone CreuSat_Logic_LogicWatches_WatcherCrefsInRange as WatcherCrefsInRange0 with predicate WatcherCrefsInRange0.watcher_crefs_in_range = LemmaPopWatchMaintainsWatcherInvariant0.watcher_crefs_in_range - clone CreuSat_Logic_LogicUtil_Pop as Pop0 with type t = Type.creusat_watches_watcher, - function Pop0.pop = LemmaPopWatchMaintainsWatcherInvariant0.pop, axiom . - clone CreuSat_Logic_LogicWatches_LemmaPopWatchMaintainsWatcherInvariant as LemmaPopWatchMaintainsWatcherInvariant0 with axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, function Model0.model = Invariant0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant1 with axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant0 - use mach.int.Int64 - clone CreusotContracts_Std1_Slice_Impl0_Model as Model10 with type t = Type.creusat_watches_watcher, - function Model0.model = DerefMut0.model, function Model1.model = Swap0.model, function Model0.model = Model11.model, - axiom . - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_watches_watcher, - type ModelTy0.modelTy = Model11.modelTy - clone CreusotContracts_Logic_Model_Impl1_Model as Model11 with type t = seq (Type.creusat_watches_watcher), - function Model0.model = Swap0.model - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere - clone Core_Slice_Index_Impl2_Output as Output1 with type t = Type.creusat_watches_watcher, - type Output0.output = Index1.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = Type.creusat_watches_watcher, - predicate HasValue0.has_value = Index1.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = Type.creusat_watches_watcher, - predicate InBounds0.in_bounds = Index1.in_bounds - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type Output0.output = Index0.output, type Output0.output = IndexMut0.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - predicate HasValue0.has_value = Index0.has_value, predicate HasValue0.has_value = IndexMut0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - predicate InBounds0.in_bounds = Index0.in_bounds, predicate InBounds0.in_bounds = IndexMut0.in_bounds - clone CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic as ToNegWatchidxLogic0 with function ToNegWatchidxLogic0.to_neg_watchidx_logic = ToNegWatchidx0.to_neg_watchidx_logic - clone Alloc_Vec_Impl1_Pop_Interface as Pop1 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_watches_watches - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = seq (Type.creusat_watches_watcher) - clone Core_Slice_Impl0_Swap_Interface as Swap0 with type t = Type.creusat_watches_watcher - clone Alloc_Vec_Impl11_DerefMut_Interface as DerefMut0 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type i = usize, type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl16_Index_Interface as Index1 with type t = Type.creusat_watches_watcher, type i = usize, - type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type i = usize, type a = Type.alloc_alloc_global - clone CreuSat_Lit_Impl1_ToNegWatchidx_Interface as ToNegWatchidx0 - let rec cfg unwatch [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 162 4 162 80] (self : borrowed (Type.creusat_watches_watches)) (f : Type.creusat_formula_formula) (trail : Type.creusat_trail_trail) (cref : usize) (lit : Type.creusat_lit_lit) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 155 4 155 42] Invariant0.invariant' ( * self) f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 156 4 156 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 157 4 157 48] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 158 4 158 30] Invariant1.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 159 4 159 36] Invariant2.invariant' trail f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 160 4 160 43] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 161 4 161 50] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) >= 2} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 155 4 155 42] Invariant0.invariant' ( ^ self) f } - - = - var _0 : (); - var self_1 : borrowed (Type.creusat_watches_watches); - var f_2 : Type.creusat_formula_formula; - var trail_3 : Type.creusat_trail_trail; - var cref_4 : usize; - var lit_5 : Type.creusat_lit_lit; - var watchidx_6 : usize; - var _7 : Type.creusat_lit_lit; - var i_8 : usize; - var _9 : (); - var _10 : bool; - var _11 : usize; - var _12 : usize; - var _13 : Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global); - var _14 : Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global); - var _15 : Type.alloc_vec_vec (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)) (Type.alloc_alloc_global); - var _16 : usize; - var _17 : (); - var _18 : bool; - var _19 : usize; - var _20 : Type.creusat_watches_watcher; - var _21 : Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global); - var _22 : Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global); - var _23 : Type.alloc_vec_vec (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)) (Type.alloc_alloc_global); - var _24 : usize; - var _25 : usize; - var _26 : usize; - var _27 : (); - var end'_28 : usize; - var _29 : usize; - var _30 : Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global); - var _31 : Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global); - var _32 : Type.alloc_vec_vec (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)) (Type.alloc_alloc_global); - var _33 : usize; - var _34 : (); - var _35 : borrowed (seq (Type.creusat_watches_watcher)); - var _36 : borrowed (seq (Type.creusat_watches_watcher)); - var _37 : borrowed (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)); - var _38 : borrowed (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)); - var _39 : borrowed (Type.alloc_vec_vec (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)) (Type.alloc_alloc_global)); - var _40 : usize; - var _41 : usize; - var _42 : usize; - ghost var old_w_43 : borrowed (Type.creusat_watches_watches); - var _44 : (); - var _45 : (); - var _46 : Type.core_option_option (Type.creusat_watches_watcher); - var _47 : borrowed (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)); - var _48 : borrowed (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)); - var _49 : borrowed (Type.alloc_vec_vec (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)) (Type.alloc_alloc_global)); - var _50 : usize; - var _51 : isize; - var w_52 : Type.creusat_watches_watcher; - var _53 : (); - var _54 : (); - var _55 : (); - var _56 : (); - var _57 : (); - var _58 : (); - var _59 : (); - var _60 : (); - var _61 : (); - var _62 : (); - var _63 : (); - { - self_1 <- self; - f_2 <- f; - trail_3 <- trail; - cref_4 <- cref; - lit_5 <- lit; - goto BB0 - } - BB0 { - _7 <- lit_5; - watchidx_6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 163 23 163 44] ToNegWatchidx0.to_neg_watchidx _7); - goto BB1 - } - BB1 { - i_8 <- (0 : usize); - goto BB2 - } - BB2 { - invariant self_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 165 8 165 50] Invariant0.invariant' ( * self_1) f_2 }; - _11 <- i_8; - _15 <- Type.creusat_watches_watches_Watches_watches ( * self_1); - _16 <- watchidx_6; - _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 166 18 166 40] Index0.index _15 _16); - goto BB3 - } - BB3 { - _13 <- _14; - _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 166 18 166 46] Len0.len _13); - goto BB4 - } - BB4 { - _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 166 14 166 46] _11 < _12); - switch (_10) - | False -> goto BB21 - | _ -> goto BB5 - end - } - BB5 { - _23 <- Type.creusat_watches_watches_Watches_watches ( * self_1); - _24 <- watchidx_6; - _22 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 167 15 167 37] Index0.index _23 _24); - goto BB6 - } - BB6 { - _21 <- _22; - _25 <- i_8; - _20 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 167 15 167 40] Index1.index _21 _25); - goto BB7 - } - BB7 { - _19 <- Type.creusat_watches_watcher_Watcher_cref _20; - _26 <- cref_4; - _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 167 15 167 53] _19 = _26); - switch (_18) - | False -> goto BB20 - | _ -> goto BB8 - end - } - BB8 { - _32 <- Type.creusat_watches_watches_Watches_watches ( * self_1); - _33 <- watchidx_6; - _31 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 168 26 168 48] Index0.index _32 _33); - goto BB9 - } - BB9 { - _30 <- _31; - _29 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 168 26 168 54] Len0.len _30); - goto BB10 - } - BB10 { - end'_28 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 168 26 168 58] _29 - (1 : usize)); - _39 <- borrow_mut (Type.creusat_watches_watches_Watches_watches ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Watches_Watches a = * self_1 in Type.CreuSat_Watches_Watches ( ^ _39)) }; - _40 <- watchidx_6; - _38 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 169 16 169 38] IndexMut0.index_mut _39 _40); - goto BB11 - } - BB11 { - _37 <- borrow_mut ( * _38); - _38 <- { _38 with current = ( ^ _37) }; - assume { Resolve0.resolve _38 }; - _36 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 169 16 169 51] DerefMut0.deref_mut _37); - goto BB12 - } - BB12 { - _35 <- borrow_mut ( * _36); - _36 <- { _36 with current = ( ^ _35) }; - _41 <- i_8; - _42 <- end'_28; - _34 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 169 16 169 51] Swap0.swap _35 _41 _42); - goto BB13 - } - BB13 { - assume { Resolve1.resolve _36 }; - _44 <- (); - old_w_43 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 170 28 170 43] self_1); - goto BB14 - } - BB14 { - _49 <- borrow_mut (Type.creusat_watches_watches_Watches_watches ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Watches_Watches a = * self_1 in Type.CreuSat_Watches_Watches ( ^ _49)) }; - assume { Resolve2.resolve self_1 }; - _50 <- watchidx_6; - _48 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 171 22 171 44] IndexMut0.index_mut _49 _50); - goto BB15 - } - BB15 { - _47 <- borrow_mut ( * _48); - _48 <- { _48 with current = ( ^ _47) }; - _46 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 171 22 171 50] Pop1.pop _47); - goto BB16 - } - BB16 { - assume { Resolve0.resolve _48 }; - switch (_46) - | Type.Core_Option_Option_None -> goto BB17 - | Type.Core_Option_Option_Some _ -> goto BB19 - end - } - BB17 { - absurd - } - BB18 { - absurd - } - BB19 { - w_52 <- Type.core_option_option_Some_0 _46; - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 173 24 173 62] ^ old_w_43 = ^ self_1 }; - _53 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 174 24 174 122] let _ = LemmaPopWatchMaintainsWatcherInvariant0.lemma_pop_watch_maintains_watcher_invariant (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * old_w_43))) (UInt64.to_int watchidx_6))) f_2 in true }; - _54 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 175 24 175 100] WatcherCrefsInRange0.watcher_crefs_in_range (Pop0.pop (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * old_w_43))) (UInt64.to_int watchidx_6)))) f_2 }; - _55 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 176 24 176 103] Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * self_1))) (UInt64.to_int watchidx_6)) = Pop0.pop (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * old_w_43))) (UInt64.to_int watchidx_6))) }; - _56 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 177 24 177 94] WatcherCrefsInRange0.watcher_crefs_in_range (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * self_1))) (UInt64.to_int watchidx_6))) f_2 }; - _57 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 178 24 178 57] Invariant0.invariant' ( * self_1) f_2 }; - _58 <- (); - _45 <- (); - _0 <- (); - goto BB22 - } - BB20 { - _17 <- (); - i_8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 186 12 186 18] i_8 + (1 : usize)); - _9 <- (); - goto BB2 - } - BB21 { - assume { Resolve2.resolve self_1 }; - _0 <- (); - goto BB22 - } - BB22 { - return _0 - } - -end -module CreuSat_Formula_Impl2_DeleteClause_Interface - use mach.int.UInt64 - use mach.int.Int - use prelude.Prelude - use mach.int.Int32 - use seq.Seq - use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant1.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 - clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant1 with axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant0 - val delete_clause [@cfg:stackify] (self : borrowed (Type.creusat_formula_formula)) (cref : usize) (watches : borrowed (Type.creusat_watches_watches)) (t : Type.creusat_trail_trail) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 208 4 208 51] Invariant0.invariant' ( * watches) ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 209 4 209 40] Invariant1.invariant' ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 210 4 210 42] Invariant2.invariant' t ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 211 4 211 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 212 4 212 52] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * self))) (UInt64.to_int cref))) > 1} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 213 4 213 46] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * self)))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 208 4 208 51] Invariant0.invariant' ( ^ watches) ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 209 4 209 40] Invariant1.invariant' ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 210 4 210 42] Invariant2.invariant' t ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 214 4 214 35] Equisat0.equisat ( * self) ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 215 4 215 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } - -end -module CreuSat_Formula_Impl2_DeleteClause - use mach.int.UInt64 - use mach.int.Int - use prelude.Prelude - use mach.int.Int32 - use seq.Seq - use Type - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = Invariant6.index_logic, function IndexLogic0.index_logic = SatInner1.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model2.model = WatchesInvariantInternal0.model, - function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, - function Model0.model = Invariant3.model, function Model1.model = UnitAreSat0.model, - function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, - function Model1.model = Invariant7.model, function Model0.model = SatInner2.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model1.model = WatchesInvariantInternal0.model, - function Model0.model = InvariantMirror0.model, function Model0.model = Model3.model, - function Model3.model = InvariantNoDecisionMirror0.model, function Model0.model = LongArePostUnitInner0.model, - function Model0.model = UnitAreSat0.model, function Model0.model = SatInner0.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model8.model, axiom . - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal - clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model8 with function Model2.model = InvariantNoDecision0.model, - function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant4.model, - function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant2.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant2.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . - clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant2.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant2.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant1.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model3 with function Model0.model = Invariant1.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant1.invariant_mirror - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant0.watches_invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, function Model0.model = Invariant0.model, axiom . - clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant1 with axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant0 - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.creusat_clause_clause, - predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model10.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model10 with type t = Type.creusat_clause_clause, - function Model0.model = Index1.model - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_clause_clause - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause, - type Output0.output = Index0.output, type Output0.output = IndexMut0.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause, - predicate HasValue0.has_value = Index0.has_value, predicate HasValue0.has_value = IndexMut0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause, - predicate InBounds0.in_bounds = Index0.in_bounds, predicate InBounds0.in_bounds = IndexMut0.in_bounds - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_clause_clause - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.creusat_clause_clause, type i = usize, - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_formula_formula - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_watches_watches - clone CreuSat_Watches_Impl0_Unwatch_Interface as Unwatch0 - clone CreuSat_Clause_Impl0_Index_Interface as Index1 - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.creusat_clause_clause, type i = usize, - type a = Type.alloc_alloc_global - let rec cfg delete_clause [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 216 4 216 78] (self : borrowed (Type.creusat_formula_formula)) (cref : usize) (watches : borrowed (Type.creusat_watches_watches)) (t : Type.creusat_trail_trail) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 208 4 208 51] Invariant0.invariant' ( * watches) ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 209 4 209 40] Invariant1.invariant' ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 210 4 210 42] Invariant2.invariant' t ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 211 4 211 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 212 4 212 52] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * self))) (UInt64.to_int cref))) > 1} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 213 4 213 46] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * self)))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 208 4 208 51] Invariant0.invariant' ( ^ watches) ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 209 4 209 40] Invariant1.invariant' ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 210 4 210 42] Invariant2.invariant' t ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 214 4 214 35] Equisat0.equisat ( * self) ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 215 4 215 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } - - = - var _0 : (); - var self_1 : borrowed (Type.creusat_formula_formula); - var cref_2 : usize; - var watches_3 : borrowed (Type.creusat_watches_watches); - var t_4 : Type.creusat_trail_trail; - ghost var old_f_5 : borrowed (Type.creusat_formula_formula); - var _6 : (); - var _7 : (); - var _8 : borrowed (Type.creusat_watches_watches); - var _9 : Type.creusat_formula_formula; - var _10 : Type.creusat_trail_trail; - var _11 : usize; - var _12 : Type.creusat_lit_lit; - var _13 : Type.creusat_lit_lit; - var _14 : Type.creusat_clause_clause; - var _15 : Type.creusat_clause_clause; - var _16 : Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global); - var _17 : usize; - var _18 : (); - var _19 : borrowed (Type.creusat_watches_watches); - var _20 : Type.creusat_formula_formula; - var _21 : Type.creusat_trail_trail; - var _22 : usize; - var _23 : Type.creusat_lit_lit; - var _24 : Type.creusat_lit_lit; - var _25 : Type.creusat_clause_clause; - var _26 : Type.creusat_clause_clause; - var _27 : Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global); - var _28 : usize; - var _29 : borrowed (Type.creusat_clause_clause); - var _30 : borrowed (Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global)); - var _31 : usize; - var _32 : (); - var _33 : (); - var _34 : (); - { - self_1 <- self; - cref_2 <- cref; - watches_3 <- watches; - t_4 <- t; - goto BB0 - } - BB0 { - _6 <- (); - old_f_5 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 217 20 217 35] self_1); - goto BB1 - } - BB1 { - _8 <- borrow_mut ( * watches_3); - watches_3 <- { watches_3 with current = ( ^ _8) }; - _9 <- * self_1; - _10 <- t_4; - _11 <- cref_2; - _16 <- Type.creusat_formula_formula_Formula_clauses ( * self_1); - _17 <- cref_2; - _15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 218 39 218 57] Index0.index _16 _17); - goto BB2 - } - BB2 { - _14 <- _15; - _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 218 39 218 60] Index1.index _14 (0 : usize)); - goto BB3 - } - BB3 { - _12 <- _13; - _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 218 8 218 61] Unwatch0.unwatch _8 _9 _10 _11 _12); - goto BB4 - } - BB4 { - _19 <- borrow_mut ( * watches_3); - watches_3 <- { watches_3 with current = ( ^ _19) }; - _20 <- * self_1; - _21 <- t_4; - _22 <- cref_2; - _27 <- Type.creusat_formula_formula_Formula_clauses ( * self_1); - _28 <- cref_2; - _26 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 219 39 219 57] Index0.index _27 _28); - goto BB5 - } - BB5 { - _25 <- _26; - _24 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 219 39 219 60] Index1.index _25 (1 : usize)); - goto BB6 - } - BB6 { - _23 <- _24; - _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 219 8 219 61] Unwatch0.unwatch _19 _20 _21 _22 _23); - goto BB7 - } - BB7 { - assume { Resolve0.resolve watches_3 }; - _30 <- borrow_mut (Type.creusat_formula_formula_Formula_clauses ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Formula_Formula a b = * self_1 in Type.CreuSat_Formula_Formula ( ^ _30) b) }; - assume { Resolve1.resolve self_1 }; - _31 <- cref_2; - _29 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 220 8 220 26] IndexMut0.index_mut _30 _31); - goto BB8 - } - BB8 { - _29 <- { _29 with current = (let Type.CreuSat_Clause_Clause a b c d = * _29 in Type.CreuSat_Clause_Clause true b c d) }; - assume { Resolve2.resolve _29 }; - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 221 8 222 74] forall i : (int) . 0 <= i && i < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * self_1))) (UInt64.to_int cref_2))) -> Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * self_1))) (UInt64.to_int cref_2))) i = Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * old_f_5))) (UInt64.to_int cref_2))) i }; - _32 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 223 8 223 43] Equisat0.equisat ( * old_f_5) ( * self_1) }; - _33 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 224 8 224 46] ^ self_1 = ^ old_f_5 }; - _34 <- (); - _0 <- (); - return _0 - } - -end -module CreuSat_Formula_Impl2_DeleteClauses_Interface - use mach.int.UInt64 - use mach.int.Int - use prelude.Prelude - use mach.int.Int32 - use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val delete_clauses [@cfg:stackify] (self : borrowed (Type.creusat_formula_formula)) (watches : borrowed (Type.creusat_watches_watches)) (t : Type.creusat_trail_trail) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 229 4 229 40] Invariant0.invariant' ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 230 4 230 51] Invariant1.invariant' ( * watches) ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 231 4 231 42] Invariant2.invariant' t ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 232 4 232 35] Invariant2.invariant' t ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 233 4 233 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 229 4 229 40] Invariant0.invariant' ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 230 4 230 51] Invariant1.invariant' ( ^ watches) ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 231 4 231 42] Invariant2.invariant' t ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 234 4 234 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 235 4 235 35] Equisat0.equisat ( * self) ( ^ self) } - -end -module CreuSat_Formula_Impl2_DeleteClauses - use mach.int.UInt64 - use mach.int.Int - use prelude.Prelude - use mach.int.Int32 - use Type - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = Invariant6.index_logic, function IndexLogic0.index_logic = SatInner1.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model6.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model6 with function Model1.model = InvariantMirror0.model, - function Model0.model = FormulaInvariant0.model, function Model2.model = WatchesInvariantInternal0.model, - function Model0.model = Invariant4.model, function Model1.model = UnitAreSat0.model, - function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, - function Model1.model = Invariant7.model, function Model0.model = SatInner2.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, - function Model0.model = Model0.model, function Model1.model = WatchesInvariantInternal0.model, - function Model3.model = InvariantNoDecisionMirror0.model, function Model0.model = LongArePostUnitInner0.model, - function Model0.model = UnitAreSat0.model, function Model0.model = SatInner0.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant4.invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model4.model, axiom . - clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model4 with function Model0.model = Invariant3.model, - function Model2.model = InvariantNoDecision0.model, function Model0.model = InvariantNoDecisionMirror0.model, - function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant2.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant2.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant2.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant2.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant1.watches_invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, function Model0.model = Invariant1.model, axiom . - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Invariant0.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - clone CreuSat_Logic_LogicClause_Impl2_Sat as Sat1 with predicate Sat0.sat = IsClauseSat0.sat - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model10.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model10 with type t = Type.creusat_clause_clause, - function Model0.model = Len1.model - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_clause_clause - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause, - type Output0.output = Index0.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause, - predicate HasValue0.has_value = Index0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause, - predicate InBounds0.in_bounds = Index0.in_bounds - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_watches_watches - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula - clone CreuSat_Formula_Impl2_DeleteClause_Interface as DeleteClause0 - clone CreuSat_Formula_Impl2_IsClauseSat_Interface as IsClauseSat0 - clone CreuSat_Clause_Impl3_Len_Interface as Len1 - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.creusat_clause_clause, type i = usize, - type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global - let rec cfg delete_clauses [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 236 4 236 70] (self : borrowed (Type.creusat_formula_formula)) (watches : borrowed (Type.creusat_watches_watches)) (t : Type.creusat_trail_trail) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 229 4 229 40] Invariant0.invariant' ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 230 4 230 51] Invariant1.invariant' ( * watches) ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 231 4 231 42] Invariant2.invariant' t ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 232 4 232 35] Invariant2.invariant' t ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 233 4 233 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 229 4 229 40] Invariant0.invariant' ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 230 4 230 51] Invariant1.invariant' ( ^ watches) ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 231 4 231 42] Invariant2.invariant' t ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 234 4 234 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 235 4 235 35] Equisat0.equisat ( * self) ( ^ self) } - - = - var _0 : (); - var self_1 : borrowed (Type.creusat_formula_formula); - var watches_2 : borrowed (Type.creusat_watches_watches); - var t_3 : Type.creusat_trail_trail; - ghost var old_f_4 : borrowed (Type.creusat_formula_formula); - var _5 : (); - ghost var old_w_6 : borrowed (Type.creusat_watches_watches); - var _7 : (); - var i_8 : usize; - var _9 : (); - var _10 : bool; - var _11 : usize; - var _12 : usize; - var _13 : Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global); - var _14 : (); - var _15 : bool; - var _16 : bool; - var _17 : Type.creusat_clause_clause; - var _18 : Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global); - var _19 : usize; - var _20 : (); - var _21 : bool; - var _22 : bool; - var _23 : usize; - var _24 : Type.creusat_clause_clause; - var _25 : Type.creusat_clause_clause; - var _26 : Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global); - var _27 : usize; - var _28 : bool; - var _29 : Type.creusat_formula_formula; - var _30 : usize; - var _31 : Type.creusat_assignments_assignments; - var _32 : Type.creusat_assignments_assignments; - var _33 : (); - var _34 : borrowed (Type.creusat_formula_formula); - var _35 : usize; - var _36 : borrowed (Type.creusat_watches_watches); - var _37 : Type.creusat_trail_trail; - var _38 : (); - var _39 : (); - var _40 : (); - { - self_1 <- self; - watches_2 <- watches; - t_3 <- t; - goto BB0 - } - BB0 { - _5 <- (); - old_f_4 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 237 20 237 35] self_1); - goto BB1 - } - BB1 { - _7 <- (); - old_w_6 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 238 20 238 38] watches_2); - goto BB2 - } - BB2 { - i_8 <- (0 : usize); - goto BB3 - } - BB3 { - invariant w_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 241 8 241 53] Invariant1.invariant' ( * watches_2) ( * self_1) }; - invariant t_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 242 8 242 47] Invariant2.invariant' t_3 ( * self_1) }; - invariant f_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 243 8 243 45] Invariant0.invariant' ( * self_1) }; - invariant proph_w { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 244 8 244 57] ^ watches_2 = ^ old_w_6 }; - invariant proph_f { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 245 8 245 54] ^ self_1 = ^ old_f_4 }; - invariant num_vars_unch { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 246 8 246 70] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self_1)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * old_f_4)) }; - invariant equi { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 247 8 247 56] Equisat0.equisat ( * self_1) ( * old_f_4) }; - _11 <- i_8; - _13 <- Type.creusat_formula_formula_Formula_clauses ( * self_1); - _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 248 18 248 36] Len0.len _13); - goto BB4 - } - BB4 { - _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 248 14 248 36] _11 < _12); - switch (_10) - | False -> goto BB20 - | _ -> goto BB5 - end - } - BB5 { - _18 <- Type.creusat_formula_formula_Formula_clauses ( * self_1); - _19 <- i_8; - _17 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 249 16 249 31] Index0.index _18 _19); - goto BB6 - } - BB6 { - _16 <- Type.creusat_clause_clause_Clause_deleted _17; - _15 <- not _16; - switch (_15) - | False -> goto BB18 - | _ -> goto BB7 - end - } - BB7 { - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 250 16 250 61] Invariant3.invariant' (Type.creusat_trail_trail_Trail_assignments t_3) ( * self_1) }; - _20 <- (); - _26 <- Type.creusat_formula_formula_Formula_clauses ( * self_1); - _27 <- i_8; - _25 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 251 19 251 34] Index0.index _26 _27); - goto BB11 - } - BB8 { - _21 <- false; - goto BB10 - } - BB9 { - _29 <- * self_1; - _30 <- i_8; - _32 <- Type.creusat_trail_trail_Trail_assignments t_3; - _31 <- _32; - _28 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 251 48 251 85] IsClauseSat0.is_clause_sat _29 _30 _31); - goto BB13 - } - BB10 { - switch (_21) - | False -> goto BB16 - | _ -> goto BB14 - end - } - BB11 { - _24 <- _25; - _23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 251 19 251 40] Len1.len _24); - goto BB12 - } - BB12 { - _22 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 251 19 251 44] _23 > (1 : usize)); - switch (_22) - | False -> goto BB8 - | _ -> goto BB9 - end - } - BB13 { - _21 <- _28; - goto BB10 - } - BB14 { - _34 <- borrow_mut ( * self_1); - self_1 <- { self_1 with current = ( ^ _34) }; - _35 <- i_8; - _36 <- borrow_mut ( * watches_2); - watches_2 <- { watches_2 with current = ( ^ _36) }; - _37 <- t_3; - _33 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 252 20 252 53] DeleteClause0.delete_clause _34 _35 _36 _37); - goto BB15 - } - BB15 { - _14 <- (); - goto BB17 - } - BB16 { - _14 <- (); - goto BB17 - } - BB17 { - goto BB19 - } - BB18 { - _14 <- (); - goto BB19 - } - BB19 { - i_8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 255 12 255 18] i_8 + (1 : usize)); - _9 <- (); - goto BB3 - } - BB20 { - assume { Resolve0.resolve self_1 }; - assume { Resolve1.resolve watches_2 }; - _0 <- (); - return _0 - } - -end -module CreuSat_Formula_Impl2_SimplifyFormula_Interface - use mach.int.UInt64 - use mach.int.Int - use prelude.Prelude - use mach.int.Int32 - use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val simplify_formula [@cfg:stackify] (self : borrowed (Type.creusat_formula_formula)) (watches : borrowed (Type.creusat_watches_watches)) (t : Type.creusat_trail_trail) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 262 4 262 40] Invariant0.invariant' ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 263 4 263 51] Invariant1.invariant' ( * watches) ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 264 4 264 42] Invariant2.invariant' t ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 265 4 265 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 262 4 262 40] Invariant0.invariant' ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 263 4 263 51] Invariant1.invariant' ( ^ watches) ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 264 4 264 42] Invariant2.invariant' t ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 266 4 266 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 267 4 267 35] Equisat0.equisat ( * self) ( ^ self) } - -end -module CreuSat_Formula_Impl2_SimplifyFormula - use mach.int.UInt64 - use mach.int.Int - use prelude.Prelude - use mach.int.Int32 - use Type - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = Invariant6.index_logic, function IndexLogic0.index_logic = SatInner1.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model5.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model5 with function Model1.model = InvariantMirror0.model, - function Model0.model = FormulaInvariant0.model, function Model2.model = WatchesInvariantInternal0.model, - function Model0.model = Invariant3.model, function Model1.model = UnitAreSat0.model, - function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, - function Model1.model = Invariant7.model, function Model0.model = SatInner2.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, - function Model0.model = Model0.model, function Model1.model = WatchesInvariantInternal0.model, - function Model3.model = InvariantNoDecisionMirror0.model, function Model0.model = LongArePostUnitInner0.model, - function Model0.model = UnitAreSat0.model, function Model0.model = SatInner0.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model7.model, axiom . - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal - clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model7 with function Model2.model = InvariantNoDecision0.model, - function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant4.model, - function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant2.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant2.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant2.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant2.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant1.watches_invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, function Model0.model = Invariant1.model, axiom . - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Invariant0.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_watches_watches - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula - clone CreuSat_Formula_Impl2_DeleteClauses_Interface as DeleteClauses0 - let rec cfg simplify_formula [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 268 4 268 72] (self : borrowed (Type.creusat_formula_formula)) (watches : borrowed (Type.creusat_watches_watches)) (t : Type.creusat_trail_trail) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 262 4 262 40] Invariant0.invariant' ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 263 4 263 51] Invariant1.invariant' ( * watches) ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 264 4 264 42] Invariant2.invariant' t ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 265 4 265 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 262 4 262 40] Invariant0.invariant' ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 263 4 263 51] Invariant1.invariant' ( ^ watches) ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 264 4 264 42] Invariant2.invariant' t ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 266 4 266 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 267 4 267 35] Equisat0.equisat ( * self) ( ^ self) } - - = - var _0 : (); - var self_1 : borrowed (Type.creusat_formula_formula); - var watches_2 : borrowed (Type.creusat_watches_watches); - var t_3 : Type.creusat_trail_trail; - var _4 : (); - var _5 : borrowed (Type.creusat_formula_formula); - var _6 : borrowed (Type.creusat_watches_watches); - var _7 : Type.creusat_trail_trail; - { - self_1 <- self; - watches_2 <- watches; - t_3 <- t; - goto BB0 - } - BB0 { - _5 <- borrow_mut ( * self_1); - self_1 <- { self_1 with current = ( ^ _5) }; - _6 <- borrow_mut ( * watches_2); - watches_2 <- { watches_2 with current = ( ^ _6) }; - _7 <- t_3; - _4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 270 8 270 39] DeleteClauses0.delete_clauses _5 _6 _7); - goto BB1 - } - BB1 { - assume { Resolve0.resolve self_1 }; - assume { Resolve1.resolve watches_2 }; - _0 <- (); - return _0 - } - -end -module CreuSat_Formula_Impl2_ReduceDb_Interface - use mach.int.UInt64 - use mach.int.Int - use prelude.Prelude - use mach.int.Int32 - use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val reduceDB [@cfg:stackify] (self : borrowed (Type.creusat_formula_formula)) (watches : borrowed (Type.creusat_watches_watches)) (t : Type.creusat_trail_trail) (s : borrowed (Type.creusat_solver_solver)) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 275 4 275 40] Invariant0.invariant' ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 276 4 276 51] Invariant1.invariant' ( * watches) ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 277 4 277 42] Invariant2.invariant' t ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 278 4 278 33] Invariant0.invariant' ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 279 4 279 35] Invariant2.invariant' t ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 280 4 280 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 275 4 275 40] Invariant0.invariant' ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 276 4 276 51] Invariant1.invariant' ( ^ watches) ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 277 4 277 42] Invariant2.invariant' t ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 281 4 281 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 282 4 282 35] Equisat0.equisat ( * self) ( ^ self) } - -end -module CreuSat_Formula_Impl2_ReduceDb - use mach.int.UInt64 - use mach.int.Int - use prelude.Prelude - use mach.int.Int32 - use Type - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = Invariant6.index_logic, function IndexLogic0.index_logic = SatInner1.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model5.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model5 with function Model1.model = InvariantMirror0.model, - function Model0.model = FormulaInvariant0.model, function Model2.model = WatchesInvariantInternal0.model, - function Model0.model = Invariant3.model, function Model1.model = UnitAreSat0.model, - function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, - function Model1.model = Invariant7.model, function Model0.model = SatInner2.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, - function Model0.model = Model0.model, function Model1.model = WatchesInvariantInternal0.model, - function Model3.model = InvariantNoDecisionMirror0.model, function Model0.model = LongArePostUnitInner0.model, - function Model0.model = UnitAreSat0.model, function Model0.model = SatInner0.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model7.model, axiom . - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal - clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model7 with function Model2.model = InvariantNoDecision0.model, - function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant4.model, - function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant2.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant2.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant2.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant2.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant1.watches_invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, function Model0.model = Invariant1.model, axiom . - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Invariant0.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy2 with type ModelTy0.modelTy = Model11.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_assignments_assignments, - function Model0.model = LitSat0.model - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model10.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model10 with type t = Type.creusat_clause_clause, - function Model0.model = Len1.model, function Model0.model = Index1.model - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_clause_clause - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause, - type Output0.output = Index0.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause, - predicate HasValue0.has_value = Index0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause, - predicate InBounds0.in_bounds = Index0.in_bounds - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_solver_solver - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_watches_watches - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula - clone CreuSat_Formula_Impl2_DeleteClause_Interface as DeleteClause0 - clone CreuSat_Lit_Impl1_LitSat_Interface as LitSat0 - clone CreuSat_Clause_Impl0_Index_Interface as Index1 - clone CreuSat_Clause_Impl3_Len_Interface as Len1 - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.creusat_clause_clause, type i = usize, - type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global - let rec cfg reduceDB [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 283 4 283 80] (self : borrowed (Type.creusat_formula_formula)) (watches : borrowed (Type.creusat_watches_watches)) (t : Type.creusat_trail_trail) (s : borrowed (Type.creusat_solver_solver)) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 275 4 275 40] Invariant0.invariant' ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 276 4 276 51] Invariant1.invariant' ( * watches) ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 277 4 277 42] Invariant2.invariant' t ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 278 4 278 33] Invariant0.invariant' ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 279 4 279 35] Invariant2.invariant' t ( * self)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 280 4 280 47] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self)) < div 18446744073709551615 2} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 275 4 275 40] Invariant0.invariant' ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 276 4 276 51] Invariant1.invariant' ( ^ watches) ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 277 4 277 42] Invariant2.invariant' t ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 281 4 281 49] Type.creusat_formula_formula_Formula_num_vars ( * self) = Type.creusat_formula_formula_Formula_num_vars ( ^ self) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 282 4 282 35] Equisat0.equisat ( * self) ( ^ self) } - - = - var _0 : (); - var self_1 : borrowed (Type.creusat_formula_formula); - var watches_2 : borrowed (Type.creusat_watches_watches); - var t_3 : Type.creusat_trail_trail; - var s_4 : borrowed (Type.creusat_solver_solver); - var _5 : (); - var _6 : (); - var _7 : bool; - var _8 : usize; - var _9 : usize; - var _10 : bool; - var _11 : usize; - var _12 : usize; - var _13 : (); - var _14 : (); - var _15 : (); - var _16 : (); - var i_17 : usize; - ghost var old_f_18 : borrowed (Type.creusat_formula_formula); - var _19 : (); - ghost var old_w_20 : borrowed (Type.creusat_watches_watches); - var _21 : (); - var _22 : bool; - var _23 : usize; - var _24 : usize; - var _25 : Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global); - var _26 : (); - var _27 : bool; - var _28 : bool; - var _29 : Type.creusat_clause_clause; - var _30 : Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global); - var _31 : usize; - var _32 : bool; - var _33 : usize; - var _34 : Type.creusat_clause_clause; - var _35 : Type.creusat_clause_clause; - var _36 : Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global); - var _37 : usize; - var cnt_38 : int32; - var j_39 : usize; - var _40 : (); - var _41 : bool; - var _42 : bool; - var _43 : usize; - var _44 : usize; - var _45 : Type.creusat_clause_clause; - var _46 : Type.creusat_clause_clause; - var _47 : Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global); - var _48 : usize; - var _49 : bool; - var _50 : int32; - var _51 : (); - var _52 : bool; - var _53 : Type.creusat_lit_lit; - var _54 : Type.creusat_lit_lit; - var _55 : Type.creusat_clause_clause; - var _56 : Type.creusat_clause_clause; - var _57 : Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global); - var _58 : usize; - var _59 : usize; - var _60 : Type.creusat_assignments_assignments; - var _61 : Type.creusat_assignments_assignments; - var _62 : (); - var _63 : (); - var _64 : (); - var _65 : bool; - var _66 : int32; - var _67 : (); - var _68 : bool; - var _69 : usize; - var _70 : (); - var _71 : borrowed (Type.creusat_formula_formula); - var _72 : usize; - var _73 : borrowed (Type.creusat_watches_watches); - var _74 : Type.creusat_trail_trail; - var _75 : (); - var _76 : (); - var _77 : (); - { - self_1 <- self; - watches_2 <- watches; - t_3 <- t; - s_4 <- s; - goto BB0 - } - BB0 { - goto BB1 - } - BB1 { - _8 <- Type.creusat_solver_solver_Solver_num_lemmas ( * s_4); - _9 <- Type.creusat_solver_solver_Solver_max_lemmas ( * s_4); - _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 285 14 285 41] _8 > _9); - switch (_7) - | False -> goto BB5 - | _ -> goto BB2 - end - } - BB2 { - _11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 286 15 286 31] (18446744073709551615 : usize) - (300 : usize)); - _12 <- Type.creusat_solver_solver_Solver_max_lemmas ( * s_4); - _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 286 15 286 46] _11 > _12); - switch (_10) - | False -> goto BB4 - | _ -> goto BB3 - end - } - BB3 { - s_4 <- { s_4 with current = (let Type.CreuSat_Solver_Solver a b c d e f g h = * s_4 in Type.CreuSat_Solver_Solver a ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 287 16 287 35] Type.creusat_solver_solver_Solver_max_lemmas ( * s_4) + (300 : usize)) c d e f g h) }; - _6 <- (); - goto BB1 - } - BB4 { - _5 <- (); - goto BB6 - } - BB5 { - _5 <- (); - goto BB6 - } - BB6 { - i_17 <- Type.creusat_solver_solver_Solver_initial_len ( * s_4); - _19 <- (); - old_f_18 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 294 20 294 35] self_1); - goto BB7 - } - BB7 { - _21 <- (); - old_w_20 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 295 20 295 38] watches_2); - goto BB8 - } - BB8 { - goto BB9 - } - BB9 { - invariant w_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 296 8 296 53] Invariant1.invariant' ( * watches_2) ( * self_1) }; - invariant t_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 297 8 297 47] Invariant2.invariant' t_3 ( * self_1) }; - invariant f_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 298 8 298 45] Invariant0.invariant' ( * self_1) }; - invariant proph_w { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 299 8 299 57] ^ watches_2 = ^ old_w_20 }; - invariant proph_f { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 300 8 300 54] ^ self_1 = ^ old_f_18 }; - invariant num_vars_unch { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 301 8 301 70] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * self_1)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * old_f_18)) }; - invariant equi { [#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 302 8 302 56] Equisat0.equisat ( * self_1) ( * old_f_18) }; - _23 <- i_17; - _25 <- Type.creusat_formula_formula_Formula_clauses ( * self_1); - _24 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 303 18 303 36] Len0.len _25); - goto BB10 - } - BB10 { - _22 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 303 14 303 36] _23 < _24); - switch (_22) - | False -> goto BB42 - | _ -> goto BB11 - end - } - BB11 { - _30 <- Type.creusat_formula_formula_Formula_clauses ( * self_1); - _31 <- i_17; - _29 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 304 16 304 31] Index0.index _30 _31); - goto BB12 - } - BB12 { - _28 <- Type.creusat_clause_clause_Clause_deleted _29; - _27 <- not _28; - switch (_27) - | False -> goto BB40 - | _ -> goto BB13 - end - } - BB13 { - _36 <- Type.creusat_formula_formula_Formula_clauses ( * self_1); - _37 <- i_17; - _35 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 306 19 306 34] Index0.index _36 _37); - goto BB14 - } - BB14 { - _34 <- _35; - _33 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 306 19 306 40] Len1.len _34); - goto BB15 - } - BB15 { - _32 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 306 19 306 44] _33 > (6 : usize)); - switch (_32) - | False -> goto BB38 - | _ -> goto BB16 - end - } - BB16 { - cnt_38 <- (0 : int32); - j_39 <- (0 : usize); - goto BB17 - } - BB17 { - _43 <- j_39; - _47 <- Type.creusat_formula_formula_Formula_clauses ( * self_1); - _48 <- i_17; - _46 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 309 30 309 45] Index0.index _47 _48); - goto BB21 - } - BB18 { - _41 <- false; - goto BB20 - } - BB19 { - _50 <- cnt_38; - _49 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 309 55 309 62] _50 < (6 : int32)); - _41 <- _49; - goto BB20 - } - BB20 { - switch (_41) - | False -> goto BB30 - | _ -> goto BB23 - end - } - BB21 { - _45 <- _46; - _44 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 309 30 309 51] Len1.len _45); - goto BB22 - } - BB22 { - _42 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 309 26 309 51] _43 < _44); - switch (_42) - | False -> goto BB18 - | _ -> goto BB19 - end - } - BB23 { - _57 <- Type.creusat_formula_formula_Formula_clauses ( * self_1); - _58 <- i_17; - _56 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 310 27 310 42] Index0.index _57 _58); - goto BB24 - } - BB24 { - _55 <- _56; - _59 <- j_39; - _54 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 310 27 310 45] Index1.index _55 _59); - goto BB25 - } - BB25 { - _53 <- _54; - _61 <- Type.creusat_trail_trail_Trail_assignments t_3; - _60 <- _61; - _52 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 310 27 310 69] LitSat0.lit_sat _53 _60); - goto BB26 - } - BB26 { - switch (_52) - | False -> goto BB28 - | _ -> goto BB27 - end - } - BB27 { - cnt_38 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 311 28 311 36] cnt_38 + (1 : int32)); - _51 <- (); - goto BB29 - } - BB28 { - _51 <- (); - goto BB29 - } - BB29 { - j_39 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 313 24 313 30] j_39 + (1 : usize)); - _6 <- (); - goto BB17 - } - BB30 { - _40 <- (); - _66 <- cnt_38; - _65 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 315 23 315 31] _66 >= (6 : int32)); - switch (_65) - | False -> goto BB32 - | _ -> goto BB31 - end - } - BB31 { - _69 <- Type.creusat_solver_solver_Solver_num_lemmas ( * s_4); - _68 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 317 27 317 43] _69 > (0 : usize)); - switch (_68) - | False -> goto BB34 - | _ -> goto BB33 - end - } - BB32 { - _26 <- (); - goto BB37 - } - BB33 { - s_4 <- { s_4 with current = (let Type.CreuSat_Solver_Solver a b c d e f g h = * s_4 in Type.CreuSat_Solver_Solver ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 318 28 318 45] Type.creusat_solver_solver_Solver_num_lemmas ( * s_4) - (1 : usize)) b c d e f g h) }; - _67 <- (); - goto BB35 - } - BB34 { - _67 <- (); - goto BB35 - } - BB35 { - _71 <- borrow_mut ( * self_1); - self_1 <- { self_1 with current = ( ^ _71) }; - _72 <- i_17; - _73 <- borrow_mut ( * watches_2); - watches_2 <- { watches_2 with current = ( ^ _73) }; - _74 <- t_3; - _70 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 320 24 320 57] DeleteClause0.delete_clause _71 _72 _73 _74); - goto BB36 - } - BB36 { - _26 <- (); - goto BB37 - } - BB37 { - goto BB39 - } - BB38 { - _26 <- (); - goto BB39 - } - BB39 { - goto BB41 - } - BB40 { - _26 <- (); - goto BB41 - } - BB41 { - i_17 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/formula.rs" 324 12 324 18] i_17 + (1 : usize)); - _6 <- (); - goto BB9 - } - BB42 { - assume { Resolve0.resolve self_1 }; - assume { Resolve1.resolve watches_2 }; - assume { Resolve2.resolve s_4 }; - _0 <- (); - return _0 - } - -end -module CreuSat_Lit_Impl4_Clone_Interface - use prelude.Prelude - use Type - val clone' [@cfg:stackify] (self : Type.creusat_lit_lit) : Type.creusat_lit_lit -end -module CreuSat_Lit_Impl4_Clone - use prelude.Prelude - use Type - let rec cfg clone' [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 11 9 11 14] (self : Type.creusat_lit_lit) : Type.creusat_lit_lit - - = - var _0 : Type.creusat_lit_lit; - var self_1 : Type.creusat_lit_lit; - { - self_1 <- self; - goto BB0 - } - BB0 { - _0 <- self_1; - return _0 - } - -end -module CreuSat_Lit_Impl0_Model_Interface - use Type - function model (self : Type.creusat_lit_lit) : Type.creusat_lit_lit -end -module CreuSat_Lit_Impl0_Model - use Type - function model [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 22 4 22 26] (self : Type.creusat_lit_lit) : Type.creusat_lit_lit - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 23 8 23 12] self -end -module CreuSat_Lit_Impl1_LitSet_Interface - use seq.Seq - use Type - use prelude.Prelude - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicLit_Impl1_Unset_Interface as Unset0 - clone CreuSat_Logic_LogicLit_Impl1_Invariant_Interface as Invariant0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments - val lit_set [@cfg:stackify] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) : bool - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 81 4 81 43] Invariant0.invariant' self (Seq.length (Model0.model a))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 82 4 82 41] result = (not Unset0.unset self a) } - -end -module CreuSat_Lit_Impl1_LitSet - use seq.Seq - use Type - use prelude.Prelude - use mach.int.Int - use prelude.UInt8 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = Invariant0.index_logic, - function IndexLogic0.index_logic = UnsetInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_UnsetInner as UnsetInner0 with predicate UnsetInner0.unset_inner = Unset0.unset_inner - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model0.model, - function Model0.model = Unset0.model - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicLit_Impl1_Unset as Unset0 - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_assignments_assignments - use mach.int.UInt64 - clone CreuSat_Assignments_Impl0_Index_Interface as Index1 - clone CreuSat_Lit_Impl1_Index_Interface as Index0 - let rec cfg lit_set [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 83 4 83 49] (self : Type.creusat_lit_lit) (a : Type.creusat_assignments_assignments) : bool - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 81 4 81 43] Invariant0.invariant' self (Seq.length (Model0.model a))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 82 4 82 41] result = (not Unset0.unset self a) } - - = - var _0 : bool; - var self_1 : Type.creusat_lit_lit; - var a_2 : Type.creusat_assignments_assignments; - var _3 : uint8; - var _4 : uint8; - var _5 : Type.creusat_assignments_assignments; - var _6 : usize; - var _7 : Type.creusat_lit_lit; - { - self_1 <- self; - a_2 <- a; - goto BB0 - } - BB0 { - _5 <- a_2; - _7 <- self_1; - _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 84 10 84 22] Index0.index _7); - goto BB1 - } - BB1 { - _4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 84 8 84 23] Index1.index _5 _6); - goto BB2 - } - BB2 { - _3 <- _4; - _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 84 8 84 27] _3 < (2 : uint8)); - return _0 - } - -end -module CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic_Interface - use Type - use mach.int.Int - function to_watchidx_logic [@inline:trivial] (self : Type.creusat_lit_lit) : int -end -module CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic - use Type - use mach.int.Int - use mach.int.Int32 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic_Interface as IsPositiveLogic0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - function to_watchidx_logic [@inline:trivial] [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 33 4 33 41] (self : Type.creusat_lit_lit) : int - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 34 8 34 91] IndexLogic0.index_logic self * 2 + (if IsPositiveLogic0.is_positive_logic self then - 0 - else - 1 - ) -end -module CreuSat_Lit_Impl1_ToWatchidx_Interface - use mach.int.Int - use prelude.Prelude - use mach.int.UInt64 - use mach.int.Int32 - use Type - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic_Interface as IsPositiveLogic0 - clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic_Interface as ToWatchidxLogic0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - val to_watchidx [@cfg:stackify] (self : Type.creusat_lit_lit) : usize - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 89 4 89 51] IndexLogic0.index_logic self < div 18446744073709551615 2} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 90 4 90 51] UInt64.to_int result = ToWatchidxLogic0.to_watchidx_logic self } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 91 4 91 96] UInt64.to_int result = IndexLogic0.index_logic self * 2 + (if IsPositiveLogic0.is_positive_logic self then - 0 - else - 1 - ) } - -end -module CreuSat_Lit_Impl1_ToWatchidx - use mach.int.Int - use prelude.Prelude - use mach.int.UInt64 - use mach.int.Int32 - use Type - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = ToWatchidxLogic0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = ToWatchidxLogic0.index_logic - clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic as ToWatchidxLogic0 - clone CreuSat_Lit_Impl1_IsPositive_Interface as IsPositive0 - clone CreuSat_Lit_Impl1_Index_Interface as Index0 - let rec cfg to_watchidx [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 92 4 92 37] (self : Type.creusat_lit_lit) : usize - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 89 4 89 51] IndexLogic0.index_logic self < div 18446744073709551615 2} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 90 4 90 51] UInt64.to_int result = ToWatchidxLogic0.to_watchidx_logic self } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 91 4 91 96] UInt64.to_int result = IndexLogic0.index_logic self * 2 + (if IsPositiveLogic0.is_positive_logic self then - 0 - else - 1 - ) } - - = - var _0 : usize; - var self_1 : Type.creusat_lit_lit; - var _2 : usize; - var _3 : usize; - var _4 : Type.creusat_lit_lit; - var _5 : usize; - var _6 : bool; - var _7 : Type.creusat_lit_lit; - { - self_1 <- self; - goto BB0 - } - BB0 { - _4 <- self_1; - _3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 93 8 93 20] Index0.index _4); - goto BB1 - } - BB1 { - _2 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 93 8 93 24] _3 * (2 : usize)); - _7 <- self_1; - _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 93 30 93 48] IsPositive0.is_positive _7); - goto BB2 - } - BB2 { - switch (_6) - | False -> goto BB4 - | _ -> goto BB3 - end - } - BB3 { - _5 <- (0 : usize); - goto BB5 - } - BB4 { - _5 <- (1 : usize); - goto BB5 - } - BB5 { - _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 93 8 93 65] _2 + _5); - return _0 - } - -end -module CreuSat_Lit_Impl1_PhaseSaved_Interface - use mach.int.UInt64 - use seq.Seq - use mach.int.Int - use prelude.UInt8 - use mach.int.Int32 - use prelude.Prelude - use Type - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic_Interface as IsPositiveLogic0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments - val phase_saved [@cfg:stackify] (idx : usize) (assignments : Type.creusat_assignments_assignments) : Type.creusat_lit_lit - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 105 4 105 44] UInt64.to_int idx < Seq.length (Model0.model assignments)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 106 4 106 44] IndexLogic0.index_logic result = UInt64.to_int idx } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 107 4 107 74] IsPositiveLogic0.is_positive_logic result = (UInt8.to_int (Seq.get (Model0.model assignments) (UInt64.to_int idx)) = 1) } - -end -module CreuSat_Lit_Impl1_PhaseSaved - use mach.int.UInt64 - use seq.Seq - use mach.int.Int - use prelude.UInt8 - use mach.int.Int32 - use prelude.Prelude - use Type - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model0.model - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_assignments_assignments - clone CreuSat_Assignments_Impl0_Index_Interface as Index0 - let rec cfg phase_saved [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 108 4 108 68] (idx : usize) (assignments : Type.creusat_assignments_assignments) : Type.creusat_lit_lit - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 105 4 105 44] UInt64.to_int idx < Seq.length (Model0.model assignments)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 106 4 106 44] IndexLogic0.index_logic result = UInt64.to_int idx } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 107 4 107 74] IsPositiveLogic0.is_positive_logic result = (UInt8.to_int (Seq.get (Model0.model assignments) (UInt64.to_int idx)) = 1) } - - = - var _0 : Type.creusat_lit_lit; - var idx_1 : usize; - var assignments_2 : Type.creusat_assignments_assignments; - var _3 : usize; - var _4 : bool; - var _5 : bool; - var _6 : uint8; - var _7 : uint8; - var _8 : Type.creusat_assignments_assignments; - var _9 : usize; - { - idx_1 <- idx; - assignments_2 <- assignments; - goto BB0 - } - BB0 { - _3 <- idx_1; - _8 <- assignments_2; - _9 <- idx_1; - _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 109 37 109 53] Index0.index _8 _9); - goto BB1 - } - BB1 { - _6 <- _7; - _5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 109 37 109 58] _6 = (1 : uint8)); - switch (_5) - | False -> goto BB3 - | _ -> goto BB2 - end - } - BB2 { - _4 <- true; - goto BB4 - } - BB3 { - _4 <- false; - goto BB4 - } - BB4 { - _0 <- Type.CreuSat_Lit_Lit _3 _4; - return _0 - } - -end -module CreuSat_Lit_Impl2_Eq_Interface - use prelude.Prelude - use Type - val eq [@cfg:stackify] (self : Type.creusat_lit_lit) (other : Type.creusat_lit_lit) : bool - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 120 4 120 41] result = (self = other) } - -end -module CreuSat_Lit_Impl2_Eq - use prelude.Prelude - use Type - use mach.int.Int - use mach.int.UInt64 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = IsPositive0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = Index0.index_logic - clone CreuSat_Lit_Impl1_IsPositive_Interface as IsPositive0 - clone CreuSat_Lit_Impl1_Index_Interface as Index0 - let rec cfg eq [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 122 4 122 37] (self : Type.creusat_lit_lit) (other : Type.creusat_lit_lit) : bool - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 120 4 120 41] result = (self = other) } - - = - var _0 : bool; - var self_1 : Type.creusat_lit_lit; - var other_2 : Type.creusat_lit_lit; - var _3 : bool; - var _4 : usize; - var _5 : Type.creusat_lit_lit; - var _6 : usize; - var _7 : Type.creusat_lit_lit; - var _8 : bool; - var _9 : bool; - var _10 : Type.creusat_lit_lit; - var _11 : bool; - var _12 : Type.creusat_lit_lit; - { - self_1 <- self; - other_2 <- other; - goto BB0 - } - BB0 { - _5 <- self_1; - _4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 123 8 123 20] Index0.index _5); - goto BB4 - } - BB1 { - _0 <- false; - goto BB3 - } - BB2 { - _10 <- self_1; - _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 123 41 123 59] IsPositive0.is_positive _10); - goto BB6 - } - BB3 { - return _0 - } - BB4 { - _7 <- other_2; - _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 123 24 123 37] Index0.index _7); - goto BB5 - } - BB5 { - _3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 123 8 123 37] _4 = _6); - switch (_3) - | False -> goto BB1 - | _ -> goto BB2 - end - } - BB6 { - _12 <- other_2; - _11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 123 63 123 82] IsPositive0.is_positive _12); - goto BB7 - } - BB7 { - _8 <- Prelude.eqb _9 _11; - _0 <- _8; - goto BB3 - } - -end -module CreuSat_Lit_Impl3_Not_Interface - use Type - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic_Interface as IsPositiveLogic0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - val not' [@cfg:stackify] (self : Type.creusat_lit_lit) : Type.creusat_lit_lit - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 132 4 132 58] IndexLogic0.index_logic result = IndexLogic0.index_logic self } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 133 4 133 71] IsPositiveLogic0.is_positive_logic result = (not IsPositiveLogic0.is_positive_logic self) } - -end -module CreuSat_Lit_Impl3_Not - use Type - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 - use mach.int.Int - use prelude.Prelude - use mach.int.UInt64 - clone CreuSat_Lit_Impl1_IsPositive_Interface as IsPositive0 - clone CreuSat_Lit_Impl1_Index_Interface as Index0 - let rec cfg not' [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 134 4 134 23] (self : Type.creusat_lit_lit) : Type.creusat_lit_lit - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 132 4 132 58] IndexLogic0.index_logic result = IndexLogic0.index_logic self } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 133 4 133 71] IsPositiveLogic0.is_positive_logic result = (not IsPositiveLogic0.is_positive_logic self) } - - = - var _0 : Type.creusat_lit_lit; - var self_1 : Type.creusat_lit_lit; - var _2 : usize; - var _3 : Type.creusat_lit_lit; - var _4 : bool; - var _5 : bool; - var _6 : Type.creusat_lit_lit; - { - self_1 <- self; - goto BB0 - } - BB0 { - _3 <- self_1; - _2 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 135 19 135 31] Index0.index _3); - goto BB1 - } - BB1 { - _6 <- self_1; - _5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 135 44 135 62] IsPositive0.is_positive _6); - goto BB2 - } - BB2 { - _4 <- not _5; - _0 <- Type.CreuSat_Lit_Lit _2 _4; - return _0 - } - -end -module CreuSat_Logic_Logic_Inner_Impl0_SatisfiesClause_Interface - use Type - use seq.Seq - predicate satisfies_clause (self : Type.creusat_logic_logic_inner_m) (cl : Seq.seq (Type.creusat_lit_lit)) -end -module CreuSat_Logic_Logic_Inner_Impl0_SatisfiesClause - use Type - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use mach.int.UInt64 - use map.Map - predicate satisfies_clause [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 17 8 17 55] (self : Type.creusat_logic_logic_inner_m) (cl : Seq.seq (Type.creusat_lit_lit)) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 18 12 20 13] forall i : (int) . 0 <= i && i < Seq.length cl -> Map.get (Type.creusat_logic_logic_inner_m_M_0 self) (UInt64.to_int (Type.creusat_lit_lit_Lit_idx (Seq.get cl i))) = Type.creusat_lit_lit_Lit_polarity (Seq.get cl i) -end -module CreuSat_Logic_Logic_Inner_Impl0_Satisfies_Interface - use Type - use seq.Seq - predicate satisfies (self : Type.creusat_logic_logic_inner_m) (fml : Seq.seq (Seq.seq (Type.creusat_lit_lit))) -end -module CreuSat_Logic_Logic_Inner_Impl0_Satisfies - use Type - use seq.Seq - use mach.int.Int - use mach.int.Int32 - clone CreuSat_Logic_Logic_Inner_Impl0_SatisfiesClause_Interface as SatisfiesClause0 - predicate satisfies [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 24 8 24 54] (self : Type.creusat_logic_logic_inner_m) (fml : Seq.seq (Seq.seq (Type.creusat_lit_lit))) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 25 12 27 13] forall c : (int) . 0 <= c && c < Seq.length fml -> SatisfiesClause0.satisfies_clause self (Seq.get fml c) -end -module CreuSat_Logic_LogicFormula_Impl1_RealModel_Interface - use Type - use seq.Seq - function real_model (self : Type.creusat_formula_formula) : Seq.seq (Seq.seq (Type.creusat_lit_lit)) -end -module CreuSat_Logic_LogicFormula_Impl1_RealModel - use Type - use seq.Seq - function real_model [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 22 4 22 44] (self : Type.creusat_formula_formula) : Seq.seq (Seq.seq (Type.creusat_lit_lit)) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 23 8 23 18] Seq.empty -end -module CreuSat_Logic_Logic_Inner_Impl1_Unsat2_Interface - use Type - predicate unsat2 (self : Type.creusat_formula_formula) -end -module CreuSat_Logic_Logic_Inner_Impl1_Unsat2 - use Type - clone CreuSat_Logic_Logic_Inner_Impl0_Satisfies_Interface as Satisfies0 - clone CreuSat_Logic_LogicFormula_Impl1_RealModel_Interface as RealModel0 - predicate unsat2 [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 34 8 34 31] (self : Type.creusat_formula_formula) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 35 12 35 80] forall m : (Type.creusat_logic_logic_inner_m) . Satisfies0.satisfies m (RealModel0.real_model self) -> false -end -module CreuSat_Logic_Logic_Inner_Impl1_Sat2_Interface - use Type - predicate sat2 (self : Type.creusat_formula_formula) -end -module CreuSat_Logic_Logic_Inner_Impl1_Sat2 - use Type - clone CreuSat_Logic_Logic_Inner_Impl0_Satisfies_Interface as Satisfies0 - clone CreuSat_Logic_LogicFormula_Impl1_RealModel_Interface as RealModel0 - predicate sat2 [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 39 8 39 29] (self : Type.creusat_formula_formula) - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 40 12 40 70] exists m : (Type.creusat_logic_logic_inner_m) . Satisfies0.satisfies m (RealModel0.real_model self) -end -module CreuSat_Logic_Logic_Inner_Impl1_Equisat2_Interface - use Type - predicate equisat2 (self : Type.creusat_formula_formula) (f : Type.creusat_formula_formula) -end -module CreuSat_Logic_Logic_Inner_Impl1_Equisat2 - use Type - clone CreuSat_Logic_Logic_Inner_Impl0_Satisfies_Interface as Satisfies0 - clone CreuSat_Logic_LogicFormula_Impl1_RealModel_Interface as RealModel0 - predicate equisat2 [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 44 8 44 42] (self : Type.creusat_formula_formula) (f : Type.creusat_formula_formula) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 45 12 47 13] forall m : (Type.creusat_logic_logic_inner_m) . Satisfies0.satisfies m (RealModel0.real_model self) -> Satisfies0.satisfies m (RealModel0.real_model f) && Satisfies0.satisfies m (RealModel0.real_model f) -> Satisfies0.satisfies m (RealModel0.real_model self) -end -module CreuSat_Logic_Logic_Pos_Interface - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - function pos (_ : ()) : uint8 -end -module CreuSat_Logic_Logic_Pos - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - function pos [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 56 0 56 25] (_ : ()) : uint8 = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 57 4 57 7] (1 : uint8) -end -module CreuSat_Logic_Logic_Neg_Interface - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - function neg (_ : ()) : uint8 -end -module CreuSat_Logic_Logic_Neg - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - function neg [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 61 0 61 25] (_ : ()) : uint8 = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 62 4 62 7] (0 : uint8) -end -module CreuSat_Logic_Logic_BoolToAssignedstate_Interface - use prelude.UInt8 - use mach.int.Int - use mach.int.Int32 - use prelude.Prelude - function bool_to_assignedstate (b : bool) : uint8 -end -module CreuSat_Logic_Logic_BoolToAssignedstate - use prelude.UInt8 - use mach.int.Int - use mach.int.Int32 - use prelude.Prelude - function bool_to_assignedstate [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 80 0 80 54] (b : bool) : uint8 = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 77 0 77 8] if b then (1 : uint8) else (0 : uint8) - axiom bool_to_assignedstate_spec : forall b : bool . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 79 0 79 31] not b -> UInt8.to_int (bool_to_assignedstate b) = 0) && ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 78 0 78 30] b -> UInt8.to_int (bool_to_assignedstate b) = 1) -end -module CreuSat_Logic_Logic_BoolToAssignedstate_Impl - use prelude.UInt8 - use mach.int.Int - use mach.int.Int32 - use prelude.Prelude - let rec ghost function bool_to_assignedstate (b : bool) : uint8 - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 78 0 78 30] b -> UInt8.to_int result = 1 } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 79 0 79 31] not b -> UInt8.to_int result = 0 } - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 77 0 77 8] if b then (1 : uint8) else (0 : uint8) -end -module CreuSat_Logic_Logic_FlipV_Interface - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - function flip_v (v : uint8) : uint8 -end -module CreuSat_Logic_Logic_FlipV - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - use mach.int.Int32 - function flip_v [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 89 0 89 44] (v : uint8) : uint8 = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 90 4 98 5] if UInt8.to_int v = 0 then - (1 : uint8) - else - if UInt8.to_int v = 1 then (0 : uint8) else v - -end -module CreuSat_Logic_LogicAssignments_CompatibleInner_Interface - use seq.Seq - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - predicate compatible_inner (a : Seq.seq uint8) (a2 : Seq.seq uint8) -end -module CreuSat_Logic_LogicAssignments_CompatibleInner - use seq.Seq - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - use mach.int.Int32 - clone CreuSat_Logic_Logic_Unset_Interface as Unset0 - predicate compatible_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 25 0 25 78] (a : Seq.seq uint8) (a2 : Seq.seq uint8) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 26 4 29 5] Seq.length a = Seq.length a2 && (forall i : (int) . 0 <= i && i < Seq.length a -> Unset0.unset (Seq.get a i) || Seq.get a i = Seq.get a2 i) -end -module CreuSat_Logic_LogicAssignments_CompatibleCompleteInner_Interface - use seq.Seq - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - predicate compatible_complete_inner (a : Seq.seq uint8) (a2 : Seq.seq uint8) -end -module CreuSat_Logic_LogicAssignments_CompatibleCompleteInner - use seq.Seq - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - clone CreuSat_Logic_LogicAssignments_CompleteInner_Interface as CompleteInner0 - clone CreuSat_Logic_LogicAssignments_CompatibleInner_Interface as CompatibleInner0 - predicate compatible_complete_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 40 0 40 87] (a : Seq.seq uint8) (a2 : Seq.seq uint8) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 39 0 39 12] CompatibleInner0.compatible_inner a a2 && CompleteInner0.complete_inner a2 -end -module CreuSat_Logic_LogicClause_Impl1_PostUnitInner_Interface - use Type - use seq.Seq - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - predicate post_unit_inner (self : Type.creusat_clause_clause) (a : Seq.seq uint8) -end -module CreuSat_Logic_LogicClause_Impl1_PostUnitInner - use Type - use seq.Seq - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - use mach.int.Int32 - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner_Interface as UnsatInner0 - clone CreuSat_Logic_LogicLit_Impl1_SatInner_Interface as SatInner0 - clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 - predicate post_unit_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 56 4 56 63] (self : Type.creusat_clause_clause) (a : Seq.seq uint8) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 57 8 61 9] exists i : (int) . 0 <= i && i < Seq.length (Model0.model self) && SatInner0.sat_inner (Seq.get (Model0.model self) i) a && (forall j : (int) . 0 <= j && j < Seq.length (Model0.model self) && j <> i -> UnsatInner0.unsat_inner (Seq.get (Model0.model self) j) a) -end -module CreuSat_Logic_LogicClause_Impl1_NoUnsetInner_Interface - use Type - use seq.Seq - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - predicate no_unset_inner (self : Type.creusat_clause_clause) (a : Seq.seq uint8) -end -module CreuSat_Logic_LogicClause_Impl1_NoUnsetInner - use Type - use seq.Seq - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - use mach.int.Int32 - clone CreuSat_Logic_LogicLit_Impl1_UnsetInner_Interface as UnsetInner0 - clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 - predicate no_unset_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 65 4 65 62] (self : Type.creusat_clause_clause) (a : Seq.seq uint8) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 66 8 68 9] forall j : (int) . 0 <= j && j < Seq.length (Model0.model self) -> not UnsetInner0.unset_inner (Seq.get (Model0.model self) j) a -end -module CreuSat_Logic_LogicClause_Impl1_PostUnit_Interface - use Type - predicate post_unit (self : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) -end -module CreuSat_Logic_LogicClause_Impl1_PostUnit - use Type - clone CreuSat_Logic_LogicClause_Impl1_PostUnitInner_Interface as PostUnitInner0 - clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - predicate post_unit [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 72 4 72 50] (self : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 73 8 73 46] PostUnitInner0.post_unit_inner self (Model0.model a) -end -module CreuSat_Logic_LogicClause_Impl1_EqAssnInner_Interface - use Type - use seq.Seq - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - predicate eq_assn_inner (self : Type.creusat_clause_clause) (a : Seq.seq uint8) (a2 : Seq.seq uint8) -end -module CreuSat_Logic_LogicClause_Impl1_EqAssnInner - use Type - use seq.Seq - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - use mach.int.Int32 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 - predicate eq_assn_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 77 4 77 85] (self : Type.creusat_clause_clause) (a : Seq.seq uint8) (a2 : Seq.seq uint8) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 78 8 81 9] forall i : (int) . 0 <= i && i < Seq.length (Model0.model self) -> Seq.get a (IndexLogic0.index_logic (Seq.get (Model0.model self) i)) = Seq.get a2 (IndexLogic0.index_logic (Seq.get (Model0.model self) i)) -end -module CreuSat_Logic_LogicClause_Impl2_Unknown_Interface - use Type - predicate unknown (self : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) -end -module CreuSat_Logic_LogicClause_Impl2_Unknown - use Type - clone CreuSat_Logic_LogicClause_Impl2_Unsat_Interface as Unsat0 - clone CreuSat_Logic_LogicClause_Impl2_Sat_Interface as Sat0 - predicate unknown [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 173 4 173 48] (self : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 172 4 172 16] not Sat0.sat self a && not Unsat0.unsat self a -end -module CreuSat_Logic_LogicClause_Impl2_SearchIdxInRange_Interface - use Type - predicate search_idx_in_range (self : Type.creusat_clause_clause) -end -module CreuSat_Logic_LogicClause_Impl2_SearchIdxInRange - use Type - use mach.int.Int - use mach.int.Int32 - use mach.int.UInt64 - use seq.Seq - clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 - predicate search_idx_in_range [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 188 4 188 44] (self : Type.creusat_clause_clause) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 189 8 191 9] 2 <= UInt64.to_int (Type.creusat_clause_clause_Clause_search self) && UInt64.to_int (Type.creusat_clause_clause_Clause_search self) <= Seq.length (Model0.model self) -end -module CreuSat_Logic_LogicClause_Impl2_InvariantUnaryOk_Interface - use Type - use mach.int.Int - predicate invariant_unary_ok (self : Type.creusat_clause_clause) (n : int) -end -module CreuSat_Logic_LogicClause_Impl2_InvariantUnaryOk - use Type - use mach.int.Int - clone CreuSat_Logic_LogicClause_Impl2_SearchIdxInRange_Interface as SearchIdxInRange0 - clone CreuSat_Logic_LogicClause_Impl2_NoDuplicateIndexes_Interface as NoDuplicateIndexes0 - clone CreuSat_Logic_LogicClause_Impl2_VarsInRange_Interface as VarsInRange0 - predicate invariant_unary_ok [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 203 4 203 51] (self : Type.creusat_clause_clause) (n : int) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 205 8 205 104] VarsInRange0.vars_in_range self n && NoDuplicateIndexes0.no_duplicate_indexes self && SearchIdxInRange0.search_idx_in_range self -end -module CreuSat_Logic_LogicFormula_Impl2_Compatible_Interface - use Type - predicate compatible (self : Type.creusat_formula_formula) (o : Type.creusat_formula_formula) -end -module CreuSat_Logic_LogicFormula_Impl2_Compatible - use Type - use mach.int.UInt64 - use seq.Seq - use mach.int.Int - use mach.int.Int32 - clone CreuSat_Logic_LogicClause_Impl2_Equals_Interface as Equals0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - predicate compatible [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 91 4 91 47] (self : Type.creusat_formula_formula) (o : Type.creusat_formula_formula) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 92 8 97 9] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars o) && Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses o)) >= Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) && (forall i : (int) . 0 <= i && i < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) -> Equals0.equals (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) i) (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses o)) i)) -end -module CreuSat_Logic_LogicFormula_Impl2_EventuallySatInner_Interface - use Type - use seq.Seq - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - predicate eventually_sat_inner (self : Type.creusat_formula_formula) (a : Seq.seq uint8) -end -module CreuSat_Logic_LogicFormula_Impl2_EventuallySatInner - use Type - use seq.Seq - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - use mach.int.UInt64 - clone CreuSat_Logic_LogicFormula_Impl2_SatInner_Interface as SatInner0 - clone CreuSat_Logic_LogicAssignments_CompatibleInner_Interface as CompatibleInner0 - predicate eventually_sat_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 125 4 125 64] (self : Type.creusat_formula_formula) (a : Seq.seq uint8) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 126 8 128 9] exists a2 : (Seq.seq uint8) . Seq.length a2 = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self) && CompatibleInner0.compatible_inner a a2 && SatInner0.sat_inner self a2 -end -module CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteInner_Interface - use Type - use seq.Seq - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - predicate eventually_sat_complete_inner (self : Type.creusat_formula_formula) (a : Seq.seq uint8) -end -module CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteInner - use Type - use seq.Seq - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - use mach.int.UInt64 - clone CreuSat_Logic_LogicFormula_Impl2_SatInner_Interface as SatInner0 - clone CreuSat_Logic_LogicAssignments_CompatibleCompleteInner_Interface as CompatibleCompleteInner0 - predicate eventually_sat_complete_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 132 4 132 73] (self : Type.creusat_formula_formula) (a : Seq.seq uint8) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 133 8 135 9] exists a2 : (Seq.seq uint8) . Seq.length a2 = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self) && CompatibleCompleteInner0.compatible_complete_inner a a2 && SatInner0.sat_inner self a2 -end -module CreuSat_Logic_LogicFormula_Impl2_EventuallySatComplete_Interface - use Type - predicate eventually_sat_complete (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) -end -module CreuSat_Logic_LogicFormula_Impl2_EventuallySatComplete - use Type - clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteInner_Interface as EventuallySatCompleteInner0 - clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - predicate eventually_sat_complete [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 139 4 139 60] (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 140 8 140 59] EventuallySatCompleteInner0.eventually_sat_complete_inner self (Model0.model a) -end -module CreuSat_Logic_LogicFormula_Impl2_EventuallySat_Interface - use Type - predicate eventually_sat (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) -end -module CreuSat_Logic_LogicFormula_Impl2_EventuallySat - use Type - clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatInner_Interface as EventuallySatInner0 - clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - predicate eventually_sat [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 144 4 144 51] (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 145 8 145 50] EventuallySatInner0.eventually_sat_inner self (Model0.model a) -end -module CreuSat_Logic_LogicFormula_Impl2_UnsatInner_Interface - use Type - use seq.Seq - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - predicate unsat_inner (self : Type.creusat_formula_formula) (a : Seq.seq uint8) -end -module CreuSat_Logic_LogicFormula_Impl2_UnsatInner - use Type - use seq.Seq - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - use mach.int.Int32 - clone CreuSat_Logic_LogicClause_Impl2_UnsatInner_Interface as UnsatInner0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - predicate unsat_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 162 4 162 55] (self : Type.creusat_formula_formula) (a : Seq.seq uint8) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 163 8 166 9] exists i : (int) . 0 <= i && i < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) && UnsatInner0.unsat_inner (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) i) a -end -module CreuSat_Logic_LogicFormula_Impl2_Unsat_Interface - use Type - predicate unsat (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) -end -module CreuSat_Logic_LogicFormula_Impl2_Unsat - use Type - clone CreuSat_Logic_LogicFormula_Impl2_UnsatInner_Interface as UnsatInner0 - clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - predicate unsat [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 170 4 170 46] (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 171 8 171 42] UnsatInner0.unsat_inner self (Model0.model a) -end -module CreuSat_Logic_LogicLit_Impl1_LitInInternal_Interface - use Type - use seq.Seq - predicate lit_in_internal (self : Type.creusat_lit_lit) (c : Seq.seq (Type.creusat_lit_lit)) -end -module CreuSat_Logic_LogicLit_Impl1_LitInInternal - use Type - use seq.Seq - use mach.int.Int - use mach.int.Int32 - predicate lit_in_internal [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 54 4 54 53] (self : Type.creusat_lit_lit) (c : Seq.seq (Type.creusat_lit_lit)) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 55 8 57 9] exists i : (int) . 0 <= i && i < Seq.length c && Seq.get c i = self -end -module CreuSat_Logic_LogicLit_Impl1_IdxInTrail_Interface - use Type - predicate idx_in_trail (self : Type.creusat_lit_lit) (t : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global)) - -end -module CreuSat_Logic_LogicLit_Impl1_IdxInTrail - use Type - use mach.int.Int - use mach.int.Int32 - use seq.Seq - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - predicate idx_in_trail [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 121 4 121 51] (self : Type.creusat_lit_lit) (t : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global)) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 122 8 125 9] exists i : (int) . 0 <= i && i < Seq.length (Model0.model t) && IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit (Seq.get (Model0.model t) i)) = IndexLogic0.index_logic self -end -module CreuSat_Logic_LogicTrail_Impl0_InvariantReasonNew_Interface - use Type - predicate invariant_reason_new (self : Type.creusat_trail_reason) (f : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) - -end -module CreuSat_Logic_LogicTrail_Impl0_InvariantReasonNew - use Type - use mach.int.Int - use mach.int.Int32 - use mach.int.UInt64 - use seq.Seq - clone CreuSat_Logic_LogicLit_Impl1_SatInner_Interface as SatInner0 - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner_Interface as UnsatInner0 - clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model2 - clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - predicate invariant_reason_new [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 27 4 27 73] (self : Type.creusat_trail_reason) (f : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 28 8 42 9] match (self) with - | Type.CreuSat_Trail_Reason_Long cref -> 0 <= UInt64.to_int cref && UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) && Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) > 1 && (forall i : (int) . 1 <= i && i < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) -> UnsatInner0.unsat_inner (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) i) (Model2.model a)) && SatInner0.sat_inner (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) 0) (Model2.model a) - | Type.CreuSat_Trail_Reason_Unit cref -> 0 <= UInt64.to_int cref && UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) && Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) = 1 && SatInner0.sat_inner (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) 0) (Model2.model a) - | _ -> true - end -end -module CreuSat_Logic_LogicTrail_Impl2_NewPostUnit_Interface - use Type - predicate new_post_unit (self : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) -end -module CreuSat_Logic_LogicTrail_Impl2_NewPostUnit - use Type - use mach.int.Int - use mach.int.Int32 - use seq.Seq - clone CreuSat_Logic_LogicTrail_Impl0_InvariantReasonNew_Interface as InvariantReasonNew0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - predicate new_post_unit [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 105 4 105 50] (self : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 106 8 109 9] forall j : (int) . 0 <= j && j < Seq.length (Model0.model (Type.creusat_trail_trail_Trail_trail self)) -> InvariantReasonNew0.invariant_reason_new (Type.creusat_trail_step_Step_reason (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_trail self)) j)) f (Type.creusat_trail_trail_Trail_assignments self) -end -module CreuSat_Logic_LogicTrail_ClausePostWithRegardsTo_Interface - use Type - use mach.int.Int - predicate clause_post_with_regards_to (c : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) (j : int) - -end -module CreuSat_Logic_LogicTrail_ClausePostWithRegardsTo - use Type - use mach.int.Int - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner_Interface as ClausePostWithRegardsToInner0 - clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - predicate clause_post_with_regards_to [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 187 0 187 77] (c : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) (j : int) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 188 4 190 5] ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner c (Model0.model a) j -end -module CreuSat_Logic_LogicTrail_ClausePostWithRegardsToLit_Interface - use Type - predicate clause_post_with_regards_to_lit (c : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) (lit : Type.creusat_lit_lit) - -end -module CreuSat_Logic_LogicTrail_ClausePostWithRegardsToLit - use Type - use mach.int.UInt64 - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner_Interface as ClausePostWithRegardsToInner0 - clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - predicate clause_post_with_regards_to_lit [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 203 0 203 83] (c : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) (lit : Type.creusat_lit_lit) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 204 4 206 5] ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner c (Model0.model a) (UInt64.to_int (Type.creusat_lit_lit_Lit_idx lit)) -end -module CreuSat_Logic_LogicTrail_LongArePostUnit_Interface - use Type - predicate long_are_post_unit (trail : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) -end -module CreuSat_Logic_LogicTrail_LongArePostUnit - use Type - use mach.int.Int - use mach.int.Int32 - use seq.Seq - use mach.int.UInt64 - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsTo_Interface as ClausePostWithRegardsTo0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - predicate long_are_post_unit [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 219 0 219 59] (trail : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 220 4 226 5] forall j : (int) . 0 <= j && j < Seq.length (Model0.model (Type.creusat_trail_trail_Trail_trail trail)) -> match (Type.creusat_trail_step_Step_reason (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_trail trail)) j)) with - | Type.CreuSat_Trail_Reason_Long k -> ClausePostWithRegardsTo0.clause_post_with_regards_to (Seq.get (Model1.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int k)) (Type.creusat_trail_trail_Trail_assignments trail) (IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_trail trail)) j))) - | _ -> true - end -end -module CreuSat_Logic_LogicTrail_LemmaAssignMaintainsLongArePostUnit_Interface - use mach.int.UInt64 - use seq.Seq - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant1.invariant_mirror - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner_Interface as LongArePostUnitInner0 - clone CreuSat_Logic_Logic_Unset_Interface as Unset0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - clone CreuSat_Logic_LogicLit_Impl1_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicTrail_CrefsInRange_Interface as CrefsInRange0 - clone CreuSat_Logic_LogicTrail_TrailInvariant_Interface as TrailInvariant0 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant1 with axiom . - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant_Interface as Invariant0 - function lemma_assign_maintains_long_are_post_unit (v : Seq.seq (Type.creusat_trail_step)) (f : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) (lit : Type.creusat_lit_lit) : () - -end -module CreuSat_Logic_LogicTrail_LemmaAssignMaintainsLongArePostUnit - use mach.int.UInt64 - use seq.Seq - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant1.invariant_mirror - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner_Interface as LongArePostUnitInner0 - clone CreuSat_Logic_Logic_Unset_Interface as Unset0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - clone CreuSat_Logic_LogicLit_Impl1_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicTrail_CrefsInRange_Interface as CrefsInRange0 - clone CreuSat_Logic_LogicTrail_TrailInvariant_Interface as TrailInvariant0 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant1 with axiom . - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant_Interface as Invariant0 - function lemma_assign_maintains_long_are_post_unit [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 264 0 264 100] (v : Seq.seq (Type.creusat_trail_step)) (f : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) (lit : Type.creusat_lit_lit) : () - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 254 0 254 8] () - axiom lemma_assign_maintains_long_are_post_unit_spec : forall v : Seq.seq (Type.creusat_trail_step), f : Type.creusat_formula_formula, a : Type.creusat_assignments_assignments, lit : Type.creusat_lit_lit . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 255 0 255 27] Invariant0.invariant' a f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 256 0 256 26] Invariant1.invariant' f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 257 0 257 34] TrailInvariant0.trail_invariant v f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 258 0 258 33] CrefsInRange0.crefs_in_range v f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 259 0 259 39] Invariant2.invariant' lit (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 260 0 260 43] Unset0.unset (Seq.get (Model0.model a) (IndexLogic0.index_logic lit))) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 261 0 261 47] LongArePostUnitInner0.long_are_post_unit_inner v f (Model0.model a)) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 263 0 263 76] LongArePostUnitInner0.long_are_post_unit_inner v f (Seq.set (Model0.model a) (IndexLogic0.index_logic lit) (0 : uint8))) && ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 262 0 262 76] LongArePostUnitInner0.long_are_post_unit_inner v f (Seq.set (Model0.model a) (IndexLogic0.index_logic lit) (1 : uint8))) -end -module CreuSat_Logic_LogicTrail_LemmaAssignMaintainsLongArePostUnit_Impl - use mach.int.UInt64 - use seq.Seq - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - use Type - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = Invariant2.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = SatInner0.index_logic, function IndexLogic0.index_logic = UnsatInner0.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant2 with predicate Invariant0.invariant' = Invariant3.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model4.model, axiom . - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant4.invariant_internal - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner - clone CreuSat_Logic_LogicClause_Impl0_Model as Model4 with function Model1.model = InvariantMirror0.model, - function Model0.model = FormulaInvariant0.model, function Model0.model = ClausePostWithRegardsToInner0.model, - function Model0.model = Invariant4.model, function Model1.model = Invariant5.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = LongArePostUnitInner0.model, - function Model0.model = InvariantMirror0.model, function Model0.model = Model1.model, - function Model0.model = Invariant5.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant5 with predicate Invariant1.invariant' = Invariant3.invariant' - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant1.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Invariant1.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant1.invariant_mirror - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model0 with function Model0.model = Invariant0.model - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant1 with axiom . - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant0 - let rec ghost function lemma_assign_maintains_long_are_post_unit (v : Seq.seq (Type.creusat_trail_step)) (f : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) (lit : Type.creusat_lit_lit) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 255 0 255 27] Invariant0.invariant' a f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 256 0 256 26] Invariant1.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 257 0 257 34] TrailInvariant0.trail_invariant v f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 258 0 258 33] CrefsInRange0.crefs_in_range v f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 259 0 259 39] Invariant2.invariant' lit (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 260 0 260 43] Unset0.unset (Seq.get (Model0.model a) (IndexLogic0.index_logic lit))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 261 0 261 47] LongArePostUnitInner0.long_are_post_unit_inner v f (Model0.model a)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 262 0 262 76] LongArePostUnitInner0.long_are_post_unit_inner v f (Seq.set (Model0.model a) (IndexLogic0.index_logic lit) (1 : uint8)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 263 0 263 76] LongArePostUnitInner0.long_are_post_unit_inner v f (Seq.set (Model0.model a) (IndexLogic0.index_logic lit) (0 : uint8)) } - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 254 0 254 8] () -end -module CreuSat_Logic_LogicTrail_LemmaPushMaintainsLitNotInLess_Interface - use seq.Seq - use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicTrail_LitNotInLessInner_Interface as LitNotInLessInner0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl1_Invariant_Interface as Invariant2 - clone CreuSat_Logic_Logic_Unset_Interface as Unset0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - function lemma_push_maintains_lit_not_in_less (t : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) (step : Type.creusat_trail_step) : () - -end -module CreuSat_Logic_LogicTrail_LemmaPushMaintainsLitNotInLess - use seq.Seq - use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicTrail_LitNotInLessInner_Interface as LitNotInLessInner0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl1_Invariant_Interface as Invariant2 - clone CreuSat_Logic_Logic_Unset_Interface as Unset0 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - function lemma_push_maintains_lit_not_in_less [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 274 0 274 77] (t : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) (step : Type.creusat_trail_step) : () - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 267 0 267 8] () - axiom lemma_push_maintains_lit_not_in_less_spec : forall t : Type.creusat_trail_trail, f : Type.creusat_formula_formula, step : Type.creusat_trail_step . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 268 0 268 26] Invariant0.invariant' f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 269 0 269 27] Invariant1.invariant' t f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 270 0 270 60] Unset0.unset (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments t)) (IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit step)))) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 271 0 271 30] Invariant2.invariant' step f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 272 0 272 47] LitNotInLessInner0.lit_not_in_less_inner (Model1.model (Type.creusat_trail_trail_Trail_trail t)) f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 273 0 273 59] LitNotInLessInner0.lit_not_in_less_inner (Seq.snoc (Model1.model (Type.creusat_trail_trail_Trail_trail t)) step) f) -end -module CreuSat_Logic_LogicTrail_LemmaPushMaintainsLitNotInLess_Impl - use seq.Seq - use Type - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - use mach.int.UInt64 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = Invariant3.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = SatInner0.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = Invariant2.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model6.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model6 with function Model1.model = InvariantMirror0.model, - function Model0.model = FormulaInvariant0.model, function Model1.model = Invariant4.model, - function Model0.model = LitIdxIn0.model, function Model0.model = Invariant5.model, - function Model1.model = UnitAreSat0.model, function Model0.model = ClausePostWithRegardsToInner0.model - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = LitNotInLessInner0.model, - function Model0.model = InvariantMirror0.model, function Model0.model = Model2.model, - function Model3.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant4.model, - function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant4 with predicate Invariant1.invariant' = Invariant2.invariant' - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant5.invariant_internal - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model0.model, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model0 with function Model2.model = InvariantNoDecision0.model, - function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant6.model, - function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Invariant0.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - let rec ghost function lemma_push_maintains_lit_not_in_less (t : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) (step : Type.creusat_trail_step) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 268 0 268 26] Invariant0.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 269 0 269 27] Invariant1.invariant' t f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 270 0 270 60] Unset0.unset (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments t)) (IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit step)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 271 0 271 30] Invariant2.invariant' step f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 272 0 272 47] LitNotInLessInner0.lit_not_in_less_inner (Model1.model (Type.creusat_trail_trail_Trail_trail t)) f} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 273 0 273 59] LitNotInLessInner0.lit_not_in_less_inner (Seq.snoc (Model1.model (Type.creusat_trail_trail_Trail_trail t)) step) f } - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 267 0 267 8] () -end -module CreuSat_Logic_LogicUtil_LastIdx_Interface - type t - use seq.Seq - use mach.int.Int - use mach.int.Int32 - function last_idx (s : Seq.seq t) : int -end -module CreuSat_Logic_LogicUtil_LastIdx - type t - use seq.Seq - use mach.int.Int - use mach.int.Int32 - function last_idx [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 77 0 77 36] (s : Seq.seq t) : int = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 78 4 78 27] Seq.length s - 1 - axiom last_idx_spec : forall s : Seq.seq t . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 76 0 76 24] Seq.length s > 0) -> true -end -module CreuSat_Logic_LogicUtil_LastIdx_Impl - type t - use seq.Seq - use mach.int.Int - use mach.int.Int32 - let rec ghost function last_idx (s : Seq.seq t) : int - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 76 0 76 24] Seq.length s > 0} - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 78 4 78 27] Seq.length s - 1 -end -module CreuSat_Logic_LogicUtil_LastElem_Interface - type t - use seq.Seq - use mach.int.Int - use mach.int.Int32 - function last_elem (s : Seq.seq t) : t -end -module CreuSat_Logic_LogicUtil_LastElem - type t - use seq.Seq - use mach.int.Int - use mach.int.Int32 - function last_elem [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 84 0 84 35] (s : Seq.seq t) : t = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 85 4 85 30] Seq.get s (Seq.length s - 1) - axiom last_elem_spec : forall s : Seq.seq t . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 83 0 83 24] Seq.length s > 0) -> true -end -module CreuSat_Logic_LogicUtil_LastElem_Impl - type t - use seq.Seq - use mach.int.Int - use mach.int.Int32 - let rec ghost function last_elem (s : Seq.seq t) : t - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 83 0 83 24] Seq.length s > 0} - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 85 4 85 30] Seq.get s (Seq.length s - 1) -end -module CreuSat_Logic_LogicUtil_LemmaPopMaintainsSorted_Interface - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use prelude.Prelude - use mach.int.UInt64 - clone CreuSat_Logic_LogicUtil_Pop_Interface as Pop0 with type t = usize, axiom . - clone CreuSat_Logic_LogicUtil_Sorted_Interface as Sorted0 - function lemma_pop_maintains_sorted (s : Seq.seq usize) : () -end -module CreuSat_Logic_LogicUtil_LemmaPopMaintainsSorted - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use prelude.Prelude - use mach.int.UInt64 - clone CreuSat_Logic_LogicUtil_Pop_Interface as Pop0 with type t = usize, axiom . - clone CreuSat_Logic_LogicUtil_Sorted_Interface as Sorted0 - function lemma_pop_maintains_sorted [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 93 0 93 48] (s : Seq.seq usize) : () - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 88 0 88 8] () - axiom lemma_pop_maintains_sorted_spec : forall s : Seq.seq usize . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 90 0 90 24] Seq.length s > 0) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 91 0 91 22] Sorted0.sorted s) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 92 0 92 26] Sorted0.sorted (Pop0.pop s)) -end -module CreuSat_Logic_LogicUtil_LemmaPopMaintainsSorted_Impl - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use prelude.Prelude - use mach.int.UInt64 - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreuSat_Logic_LogicUtil_Pop as Pop0 with type t = usize, axiom . - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 - let rec ghost function lemma_pop_maintains_sorted (s : Seq.seq usize) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 90 0 90 24] Seq.length s > 0} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 91 0 91 22] Sorted0.sorted s} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 92 0 92 26] Sorted0.sorted (Pop0.pop s) } - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 88 0 88 8] () -end -module CreuSat_Logic_LogicWatches_WatchValid_Interface - use seq.Seq - use Type - predicate watch_valid (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) -end -module CreuSat_Logic_LogicWatches_WatchValid - use seq.Seq - use Type - use mach.int.Int - use mach.int.Int32 - use mach.int.UInt64 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - predicate watch_valid [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 25 0 25 55] (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 26 4 31 5] forall j : (int) . 0 <= j && j < Seq.length w -> UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref (Seq.get w j)) < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) && Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref (Seq.get w j))))) > 1 && IndexLogic0.index_logic (Type.creusat_watches_watcher_Watcher_blocker (Seq.get w j)) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) -end -module CreuSat_Logic_LogicWatches_WatchesCrefsInRange_Interface - use seq.Seq - use Type - predicate watches_crefs_in_range (w : Seq.seq (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global))) (f : Type.creusat_formula_formula) - -end -module CreuSat_Logic_LogicWatches_WatchesCrefsInRange - use seq.Seq - use Type - use mach.int.Int - use mach.int.Int32 - clone CreuSat_Logic_LogicWatches_WatcherCrefsInRange_Interface as WatcherCrefsInRange0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . - predicate watches_crefs_in_range [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 43 0 43 71] (w : Seq.seq (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global))) (f : Type.creusat_formula_formula) - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 44 4 47 5] forall i : (int) . 0 <= i && i < Seq.length w -> WatcherCrefsInRange0.watcher_crefs_in_range (Model0.model (Seq.get w i)) f -end -module CreuSat_Logic_LogicWatches_LemmaPushMaintainsWatcherInvariant_Interface - use mach.int.UInt64 - use seq.Seq - use mach.int.Int - use Type - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_WatcherCrefsInRange_Interface as WatcherCrefsInRange0 - function lemma_push_maintains_watcher_invariant (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) (o : Type.creusat_watches_watcher) : () - -end -module CreuSat_Logic_LogicWatches_LemmaPushMaintainsWatcherInvariant - use mach.int.UInt64 - use seq.Seq - use mach.int.Int - use Type - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_WatcherCrefsInRange_Interface as WatcherCrefsInRange0 - function lemma_push_maintains_watcher_invariant [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 62 0 62 86] (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) (o : Type.creusat_watches_watcher) : () - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 57 0 57 8] () - axiom lemma_push_maintains_watcher_invariant_spec : forall w : Seq.seq (Type.creusat_watches_watcher), f : Type.creusat_formula_formula, o : Type.creusat_watches_watcher . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 59 0 59 41] WatcherCrefsInRange0.watcher_crefs_in_range w f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 60 0 60 41] UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref o) < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 61 0 61 48] WatcherCrefsInRange0.watcher_crefs_in_range (Seq.snoc w o) f) -end -module CreuSat_Logic_LogicWatches_LemmaPushMaintainsWatcherInvariant_Impl - use mach.int.UInt64 - use seq.Seq - use mach.int.Int - use Type - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = WatcherCrefsInRange0.model, axiom . - clone CreuSat_Logic_LogicWatches_WatcherCrefsInRange as WatcherCrefsInRange0 - let rec ghost function lemma_push_maintains_watcher_invariant (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) (o : Type.creusat_watches_watcher) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 59 0 59 41] WatcherCrefsInRange0.watcher_crefs_in_range w f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 60 0 60 41] UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref o) < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 61 0 61 48] WatcherCrefsInRange0.watcher_crefs_in_range (Seq.snoc w o) f } - - = - [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 57 0 57 8] () -end -module CreuSat_Solver_GetAssertingLevel_Interface - use mach.int.UInt64 - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use prelude.Prelude - use Type - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model1.modelTy - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner_Interface as NoDuplicateIndexesInner0 - clone CreuSat_Logic_LogicClause_VarsInRangeInner_Interface as VarsInRangeInner0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model1 with type t = Type.creusat_clause_clause - clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicClause_EquisatExtensionInner_Interface as EquisatExtensionInner0 - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_formula_formula - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val get_asserting_level [@cfg:stackify] (clause : Type.creusat_clause_clause) (trail : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) : (usize, usize) - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 32 0 32 26] Invariant0.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 33 0 33 32] Invariant1.invariant' trail f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 34 0 34 49] EquisatExtensionInner0.equisat_extension_inner clause (Model0.model f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 35 0 35 42] Invariant2.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 36 0 36 32] Seq.length (Model1.model clause) > 1} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 37 0 37 54] VarsInRangeInner0.vars_in_range_inner (Model1.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 38 0 38 48] NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model clause)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 39 0 39 39] UInt64.to_int (let (a, _) = result in a) < Seq.length (Model1.model clause) } - -end -module CreuSat_Solver_GetAssertingLevel - use mach.int.UInt64 - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use prelude.Prelude - use Type - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = Invariant3.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = SatInner0.index_logic, function IndexLogic0.index_logic = UnsatInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model5.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model5 with function Model0.model = Invariant2.model, - function Model0.model = Model1.model, function Model1.model = InvariantMirror0.model, - function Model0.model = FormulaInvariant0.model, function Model1.model = UnitAreSat0.model, - function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, - function Model1.model = Invariant6.model, function Model0.model = SatInner1.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner1 with predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, - function Model0.model = Model2.model, function Model3.model = InvariantNoDecisionMirror0.model, - function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant6.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant6 with predicate Invariant1.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model7.model, axiom . - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant', - predicate Invariant0.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss0.formula_sat_inner - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model7 with function Model2.model = InvariantNoDecision0.model, - function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant4.model, - function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model1.modelTy - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant2.invariant_internal - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Invariant0.model, - function Model0.model = Model0.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreusotContracts_Logic_Model_Impl0_Model as Model1 with type t = Type.creusat_clause_clause - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 - clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_formula_formula - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy2 with type t = usize - clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize, type Output0.output = Index2.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize, - predicate HasValue0.has_value = Index2.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize, - predicate InBounds0.in_bounds = Index2.in_bounds - clone CreuSat_Clause_Impl3_Len_Interface as Len0 - clone Alloc_Vec_Impl16_Index_Interface as Index2 with type t = usize, type i = usize, type a = Type.alloc_alloc_global - clone CreuSat_Lit_Impl1_Index_Interface as Index1 - clone CreuSat_Clause_Impl0_Index_Interface as Index0 - let rec cfg get_asserting_level [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 40 0 40 89] (clause : Type.creusat_clause_clause) (trail : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) : (usize, usize) - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 32 0 32 26] Invariant0.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 33 0 33 32] Invariant1.invariant' trail f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 34 0 34 49] EquisatExtensionInner0.equisat_extension_inner clause (Model0.model f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 35 0 35 42] Invariant2.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 36 0 36 32] Seq.length (Model1.model clause) > 1} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 37 0 37 54] VarsInRangeInner0.vars_in_range_inner (Model1.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 38 0 38 48] NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model clause)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 39 0 39 39] UInt64.to_int (let (a, _) = result in a) < Seq.length (Model1.model clause) } - - = - var _0 : (usize, usize); - var clause_1 : Type.creusat_clause_clause; - var trail_2 : Type.creusat_trail_trail; - var f_3 : Type.creusat_formula_formula; - var max_i_4 : usize; - var max_level_5 : usize; - var _6 : usize; - var _7 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _8 : usize; - var _9 : Type.creusat_lit_lit; - var _10 : Type.creusat_lit_lit; - var _11 : Type.creusat_clause_clause; - var i_12 : usize; - var _13 : (); - var _14 : (); - var _15 : bool; - var _16 : usize; - var _17 : usize; - var _18 : Type.creusat_clause_clause; - var level_19 : usize; - var _20 : usize; - var _21 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _22 : usize; - var _23 : Type.creusat_lit_lit; - var _24 : Type.creusat_lit_lit; - var _25 : Type.creusat_clause_clause; - var _26 : usize; - var _27 : (); - var _28 : bool; - var _29 : usize; - var _30 : usize; - var _31 : usize; - var _32 : usize; - var _33 : (); - var _34 : (); - var _35 : (); - var _36 : usize; - var _37 : usize; - { - clause_1 <- clause; - trail_2 <- trail; - f_3 <- f; - goto BB0 - } - BB0 { - max_i_4 <- (1 : usize); - _7 <- Type.creusat_trail_trail_Trail_lit_to_level trail_2; - _11 <- clause_1; - _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 42 43 42 52] Index0.index _11 (1 : usize)); - goto BB1 - } - BB1 { - _9 <- _10; - _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 42 43 42 60] Index1.index _9); - goto BB2 - } - BB2 { - _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 42 24 42 61] Index2.index _7 _8); - goto BB3 - } - BB3 { - max_level_5 <- _6; - i_12 <- (2 : usize); - goto BB4 - } - BB4 { - invariant max_i_less { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 44 4 44 54] UInt64.to_int max_i_4 < Seq.length (Model1.model clause_1) }; - _16 <- i_12; - _18 <- clause_1; - _17 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 45 14 45 26] Len0.len _18); - goto BB5 - } - BB5 { - _15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 45 10 45 26] _16 < _17); - switch (_15) - | False -> goto BB13 - | _ -> goto BB6 - end - } - BB6 { - _21 <- Type.creusat_trail_trail_Trail_lit_to_level trail_2; - _25 <- clause_1; - _26 <- i_12; - _24 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 46 39 46 48] Index0.index _25 _26); - goto BB7 - } - BB7 { - _23 <- _24; - _22 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 46 39 46 56] Index1.index _23); - goto BB8 - } - BB8 { - _20 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 46 20 46 57] Index2.index _21 _22); - goto BB9 - } - BB9 { - level_19 <- _20; - _29 <- level_19; - _30 <- max_level_5; - _28 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 47 11 47 28] _29 > _30); - switch (_28) - | False -> goto BB11 - | _ -> goto BB10 - end - } - BB10 { - _31 <- level_19; - max_level_5 <- _31; - _32 <- i_12; - max_i_4 <- _32; - _27 <- (); - goto BB12 - } - BB11 { - _27 <- (); - goto BB12 - } - BB12 { - i_12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 51 8 51 14] i_12 + (1 : usize)); - _14 <- (); - goto BB4 - } - BB13 { - _13 <- (); - _36 <- max_i_4; - _37 <- max_level_5; - _0 <- (_36, _37); - return _0 - } - -end -module Core_Ops_Index_IndexMut_IndexMut_Interface - type self - type idx - use prelude.Prelude - clone Core_Ops_Index_Index_Output as Output0 with type self = self, type idx = idx - val index_mut [@cfg:stackify] (self : borrowed self) (index : idx) : borrowed Output0.output - requires {false} - -end -module Core_Ops_Index_IndexMut_IndexMut - type self - type idx - use prelude.Prelude - clone Core_Ops_Index_Index_Output as Output0 with type self = self, type idx = idx - val index_mut [@cfg:stackify] (self : borrowed self) (index : idx) : borrowed Output0.output - requires {false} - -end -module CreuSat_Assignments_Impl1 - use mach.int.Int - use prelude.Prelude - use prelude.UInt8 - use Type - use mach.int.UInt64 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model1.model, axiom . - clone CreuSat_Assignments_Impl0_Output as Output0 with type Output0.output = IndexMut1.output - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model1.model = IndexMut0.model, - function Model0.model = Model0.model - clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_assignments_assignments, - function Model0.model = IndexMut0.model - clone CreuSat_Assignments_Impl1_IndexMut_Interface as IndexMut0 with val index_mut = IndexMut1.index_mut - clone Core_Ops_Index_IndexMut_IndexMut_Interface as IndexMut1 with type self = Type.creusat_assignments_assignments, - type idx = usize -end -module CreuSat_Trail_Impl0_Backstep_Interface - use mach.int.UInt64 - use mach.int.Int - use mach.int.Int32 - use prelude.Prelude - use Type - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror_Interface as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner_Interface as LongArePostUnitInner0 - clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model1 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision_Interface as InvariantNoDecision0 with axiom . - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val backstep [@cfg:stackify] (self : borrowed (Type.creusat_trail_trail)) (f : Type.creusat_formula_formula) : usize - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 58 4 58 30] Invariant0.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 59 4 59 32] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) > 0} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 60 4 60 54] InvariantNoDecision0.invariant_no_decision ( * self) f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 61 4 61 77] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 60 4 60 54] InvariantNoDecision0.invariant_no_decision ( ^ self) f } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 62 4 62 86] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 63 4 63 37] UInt64.to_int result < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) } - -end -module CreuSat_Trail_Impl0_Backstep - use mach.int.UInt64 - use mach.int.Int - use mach.int.Int32 - use prelude.Prelude - use Type - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, function IndexLogic0.index_logic = SatInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic, function IndexLogic0.index_logic = Invariant4.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = Invariant3.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model6.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model6 with function Model1.model = InvariantMirror0.model, - function Model0.model = FormulaInvariant0.model, function Model1.model = UnitAreSat0.model, - function Model0.model = ClausePostWithRegardsToInner0.model, function Model0.model = Invariant2.model, - function Model0.model = LitIdxIn0.model, function Model1.model = Invariant5.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = LongArePostUnitInner0.model, - function Model0.model = InvariantMirror0.model, function Model0.model = Model2.model, - function Model3.model = InvariantNoDecisionMirror0.model, function Model0.model = UnitAreSat0.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant5.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant5 with predicate Invariant1.invariant' = Invariant3.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant2.invariant_internal - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, - predicate SatInner0.sat_inner = Sat0.sat_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model2.model = InvariantNoDecision0.model, - function Model0.model = Invariant1.model, function Model1.model = TrailEntriesAreAssigned0.model, - function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = usize, type a = Type.alloc_alloc_global, - function Model1.model = InvariantNoDecision0.model, function Model2.model = InvariantNoDecisionMirror0.model, - function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model0.model = InvariantNoDecision0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, function Model1.model = InvariantNoDecisionMirror0.model, - axiom . - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Invariant0.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicUtil_Pop as Pop0 with type t = Type.creusat_trail_step, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with axiom . - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - use mach.int.Int64 - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = usize - clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize, type Output0.output = IndexMut1.output - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = usize, - predicate ResolveElswhere0.resolve_elswhere = IndexMut1.resolve_elswhere - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize, - predicate HasValue0.has_value = IndexMut1.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize, - predicate InBounds0.in_bounds = IndexMut1.in_bounds - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model8.modelTy - clone CreusotContracts_Logic_Model_Impl1_Model as Model8 with type t = Type.creusat_assignments_assignments, - function Model0.model = IndexMut0.model - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = usize - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut1 with type t = usize, type i = usize, - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = uint8 - clone CreuSat_Assignments_Impl1_IndexMut_Interface as IndexMut0 - clone CreuSat_Lit_Impl1_Index_Interface as Index0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_trail_trail - clone Alloc_Vec_Impl1_Pop_Interface as Pop1 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global - let rec cfg backstep [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 65 4 65 48] (self : borrowed (Type.creusat_trail_trail)) (f : Type.creusat_formula_formula) : usize - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 58 4 58 30] Invariant0.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 59 4 59 32] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) > 0} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 60 4 60 54] InvariantNoDecision0.invariant_no_decision ( * self) f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 61 4 61 77] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 60 4 60 54] InvariantNoDecision0.invariant_no_decision ( ^ self) f } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 62 4 62 86] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 63 4 63 37] UInt64.to_int result < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) } - - = - var _0 : usize; - var self_1 : borrowed (Type.creusat_trail_trail); - var f_2 : Type.creusat_formula_formula; - var _3 : (); - ghost var old_t_4 : borrowed (Type.creusat_trail_trail); - var _5 : (); - var last_6 : Type.core_option_option (Type.creusat_trail_step); - var _7 : borrowed (Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global)); - var _8 : (); - var _9 : isize; - var step_10 : Type.creusat_trail_step; - var _11 : (); - var _12 : borrowed uint8; - var _13 : borrowed (Type.creusat_assignments_assignments); - var _14 : usize; - var _15 : Type.creusat_lit_lit; - var _16 : (); - var _17 : (); - var _18 : borrowed usize; - var _19 : borrowed (Type.alloc_vec_vec usize (Type.alloc_alloc_global)); - var _20 : usize; - var _21 : Type.creusat_lit_lit; - var _22 : (); - var _23 : Type.creusat_lit_lit; - var _24 : (); - var _25 : (); - var _26 : (); - var _27 : (); - var _28 : (); - var _29 : (); - { - self_1 <- self; - f_2 <- f; - goto BB0 - } - BB0 { - _5 <- (); - old_t_4 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 66 20 66 35] self_1); - goto BB1 - } - BB1 { - _7 <- borrow_mut (Type.creusat_trail_trail_Trail_trail ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Trail_Trail a b c d e = * self_1 in Type.CreuSat_Trail_Trail a b ( ^ _7) d e) }; - last_6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 68 19 68 35] Pop1.pop _7); - goto BB2 - } - BB2 { - switch (last_6) - | Type.Core_Option_Option_None -> goto BB3 - | Type.Core_Option_Option_Some _ -> goto BB5 - end - } - BB3 { - assume { Resolve0.resolve self_1 }; - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 85 16 85 98] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) f_2 (Model1.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) && true }; - _24 <- (); - _8 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 88 8 88 53] Invariant1.invariant' (Type.creusat_trail_trail_Trail_assignments ( * self_1)) f_2 }; - _25 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 92 8 92 47] LitNotInLess0.lit_not_in_less ( * self_1) f_2 }; - _26 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 93 8 93 43] LitIsUnique0.lit_is_unique ( * self_1) }; - _27 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 94 8 94 83] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) f_2 (Model1.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) }; - _28 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 95 8 95 56] TrailEntriesAreAssigned0.trail_entries_are_assigned ( * self_1) }; - _29 <- (); - _0 <- (0 : usize); - goto BB11 - } - BB4 { - assume { Resolve0.resolve self_1 }; - absurd - } - BB5 { - step_10 <- Type.core_option_option_Some_0 last_6; - _13 <- borrow_mut (Type.creusat_trail_trail_Trail_assignments ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Trail_Trail a b c d e = * self_1 in Type.CreuSat_Trail_Trail ( ^ _13) b c d e) }; - _15 <- Type.creusat_trail_step_Step_lit step_10; - _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 72 33 72 49] Index0.index _15); - goto BB6 - } - BB6 { - _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 72 16 72 50] IndexMut0.index_mut _13 _14); - goto BB7 - } - BB7 { - _12 <- { _12 with current = ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 72 16 72 55] * _12 + (2 : uint8)) }; - assume { Resolve1.resolve _12 }; - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 74 16 74 63] Model0.model (Type.creusat_trail_trail_Trail_trail ( * self_1)) = Pop0.pop (Model0.model (Type.creusat_trail_trail_Trail_trail ( * old_t_4))) }; - _16 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 75 16 75 54] ^ old_t_4 = ^ self_1 }; - _17 <- (); - _19 <- borrow_mut (Type.creusat_trail_trail_Trail_lit_to_level ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Trail_Trail a b c d e = * self_1 in Type.CreuSat_Trail_Trail a ( ^ _19) c d e) }; - assume { Resolve0.resolve self_1 }; - _21 <- Type.creusat_trail_step_Step_lit step_10; - _20 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 77 34 77 50] Index0.index _21); - goto BB8 - } - BB8 { - _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 77 16 77 51] IndexMut1.index_mut _19 _20); - goto BB9 - } - BB9 { - _18 <- { _18 with current = (18446744073709551615 : usize) }; - assume { Resolve2.resolve _18 }; - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 79 16 79 91] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) f_2 (Model1.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) }; - _22 <- (); - _23 <- Type.creusat_trail_step_Step_lit step_10; - _0 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 80 23 80 39] Index0.index _23); - goto BB10 - } - BB10 { - goto BB11 - } - BB11 { - return _0 - } - -end -module CreuSat_Trail_Impl0_BacktrackTo_Interface - use seq.Seq - use mach.int.UInt64 - use mach.int.Int - use prelude.Prelude - use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner_Interface as LongArePostUnitInner0 - clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model2 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = usize, type a = Type.alloc_alloc_global, - axiom . - val backtrack_to [@cfg:stackify] (self : borrowed (Type.creusat_trail_trail)) (level : usize) (f : Type.creusat_formula_formula) (d : borrowed (Type.creusat_decision_decisions)) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 113 4 113 49] Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self))) > UInt64.to_int level} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 114 4 114 30] Invariant0.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 115 4 115 42] Invariant1.invariant' ( * self) f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 116 4 116 48] Invariant2.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 118 4 118 77] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 115 4 115 42] Invariant1.invariant' ( ^ self) f } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 116 4 116 48] Invariant2.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 119 4 119 86] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } - -end -module CreuSat_Trail_Impl0_BacktrackTo - use seq.Seq - use mach.int.UInt64 - use mach.int.Int - use prelude.Prelude - use Type - use mach.int.Int32 - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, function IndexLogic0.index_logic = SatInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic, function IndexLogic0.index_logic = Invariant6.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model7.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model7 with function Model1.model = InvariantMirror0.model, - function Model0.model = FormulaInvariant0.model, function Model0.model = ClausePostWithRegardsToInner0.model, - function Model1.model = UnitAreSat0.model, function Model0.model = Invariant4.model, - function Model0.model = LitIdxIn0.model, function Model1.model = Invariant7.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = LongArePostUnitInner0.model, - function Model0.model = InvariantMirror0.model, function Model0.model = Model4.model, - function Model3.model = InvariantNoDecisionMirror0.model, function Model0.model = UnitAreSat0.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant4.invariant_internal - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, - predicate SatInner0.sat_inner = Sat0.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model2.model, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model2.model = InvariantNoDecision0.model, - function Model0.model = Invariant3.model, function Model1.model = TrailEntriesAreAssigned0.model, - function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = LemmaPopMaintainsSorted0.sorted, - predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, - function Model0.model = InvariantNoDecision0.model, function Model0.model = LitNotInLess0.model, - function Model0.model = LitIsUnique0.model, function Model0.model = TrailEntriesAreAssigned0.model, - function Model1.model = InvariantNoDecisionMirror0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model4 with function Model0.model = Invariant0.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicUtil_Pop as Pop0 with type t = usize, function Pop0.pop = LemmaPopMaintainsSorted0.pop, - axiom . - clone CreuSat_Logic_LogicUtil_LemmaPopMaintainsSorted as LemmaPopMaintainsSorted0 with axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant2 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - use mach.int.Int64 - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_decision_node - clone Core_Slice_Index_Impl2_Output as Output1 with type t = Type.creusat_decision_node, - type Output0.output = Index1.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = Type.creusat_decision_node, - predicate HasValue0.has_value = Index1.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = Type.creusat_decision_node, - predicate InBounds0.in_bounds = Index1.in_bounds - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = usize - clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize, type Output0.output = Index0.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize, - predicate HasValue0.has_value = Index0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize, - predicate InBounds0.in_bounds = Index0.in_bounds - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_trail_trail - clone Alloc_Vec_Impl1_Pop_Interface as Pop1 with type t = usize, type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl1_Len_Interface as Len1 with type t = usize, type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_decision_decisions - clone CreuSat_Trail_Impl0_Backstep_Interface as Backstep0 - clone Alloc_Vec_Impl16_Index_Interface as Index1 with type t = Type.creusat_decision_node, type i = usize, - type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = usize, type i = usize, type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global - let rec cfg backtrack_to [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 121 4 121 80] (self : borrowed (Type.creusat_trail_trail)) (level : usize) (f : Type.creusat_formula_formula) (d : borrowed (Type.creusat_decision_decisions)) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 113 4 113 49] Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self))) > UInt64.to_int level} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 114 4 114 30] Invariant0.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 115 4 115 42] Invariant1.invariant' ( * self) f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 116 4 116 48] Invariant2.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 118 4 118 77] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 115 4 115 42] Invariant1.invariant' ( ^ self) f } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 116 4 116 48] Invariant2.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 119 4 119 86] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } - - = - var _0 : (); - var self_1 : borrowed (Type.creusat_trail_trail); - var level_2 : usize; - var f_3 : Type.creusat_formula_formula; - var d_4 : borrowed (Type.creusat_decision_decisions); - ghost var old_t_5 : borrowed (Type.creusat_trail_trail); - var _6 : (); - ghost var old_d_7 : borrowed (Type.creusat_decision_decisions); - var _8 : (); - var how_many_9 : usize; - var _10 : usize; - var _11 : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global); - var _12 : usize; - var _13 : usize; - var _14 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _15 : usize; - var des_16 : usize; - var _17 : usize; - var _18 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _19 : usize; - var i_20 : usize; - var curr_21 : usize; - var timestamp_22 : usize; - var _23 : bool; - var _24 : usize; - var _25 : Type.creusat_decision_node; - var _26 : Type.alloc_vec_vec (Type.creusat_decision_node) (Type.alloc_alloc_global); - var _27 : usize; - var _28 : (); - var _29 : (); - var _30 : bool; - var _31 : usize; - var _32 : usize; - var idx_33 : usize; - var _34 : borrowed (Type.creusat_trail_trail); - var _35 : Type.creusat_formula_formula; - var _36 : (); - var curr_timestamp_37 : usize; - var _38 : Type.creusat_decision_node; - var _39 : Type.alloc_vec_vec (Type.creusat_decision_node) (Type.alloc_alloc_global); - var _40 : usize; - var _41 : (); - var _42 : bool; - var _43 : usize; - var _44 : usize; - var _45 : usize; - var _46 : usize; - var _47 : (); - var _48 : (); - var _49 : (); - var _50 : usize; - var _51 : (); - var _52 : bool; - var _53 : usize; - var _54 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _55 : usize; - ghost var old_t2_56 : borrowed (Type.creusat_trail_trail); - var _57 : (); - var _58 : (); - var _59 : (); - var _60 : (); - var _61 : (); - var _62 : Type.core_option_option usize; - var _63 : borrowed (Type.alloc_vec_vec usize (Type.alloc_alloc_global)); - var _64 : isize; - var _65 : (); - var _66 : (); - var _67 : (); - var _68 : (); - var _69 : (); - var _70 : (); - var _71 : (); - var _72 : (); - var _73 : (); - var _74 : bool; - var _75 : bool; - var _76 : usize; - var _77 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _78 : bool; - var _79 : usize; - var _80 : usize; - var _81 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _82 : usize; - var _83 : usize; - var _84 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _85 : usize; - var _86 : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global); - ghost var old_t3_87 : borrowed (Type.creusat_trail_trail); - var _88 : (); - var _89 : (); - var _90 : (); - var _91 : (); - var _92 : (); - var _93 : Type.core_option_option usize; - var _94 : borrowed (Type.alloc_vec_vec usize (Type.alloc_alloc_global)); - var _95 : isize; - var _96 : (); - var _97 : (); - var _98 : (); - var _99 : (); - var _100 : (); - var _101 : (); - var _102 : (); - var _103 : (); - var _104 : (); - var _105 : (); - var _106 : (); - var _107 : (); - var _108 : (); - var _109 : (); - var _110 : (); - var _111 : usize; - { - self_1 <- self; - level_2 <- level; - f_3 <- f; - d_4 <- d; - goto BB0 - } - BB0 { - _6 <- (); - old_t_5 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 122 20 122 35] self_1); - goto BB1 - } - BB1 { - _8 <- (); - old_d_7 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 123 20 123 32] d_4); - goto BB2 - } - BB2 { - _11 <- Type.creusat_trail_trail_Trail_trail ( * self_1); - _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 124 23 124 39] Len0.len _11); - goto BB3 - } - BB3 { - _14 <- Type.creusat_trail_trail_Trail_decisions ( * self_1); - _15 <- level_2; - _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 124 42 124 63] Index0.index _14 _15); - goto BB4 - } - BB4 { - _12 <- _13; - how_many_9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 124 23 124 63] _10 - _12); - _18 <- Type.creusat_trail_trail_Trail_decisions ( * self_1); - _19 <- level_2; - _17 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 125 18 125 39] Index0.index _18 _19); - goto BB5 - } - BB5 { - des_16 <- _17; - i_20 <- (0 : usize); - curr_21 <- Type.creusat_decision_decisions_Decisions_search ( * d_4); - _24 <- curr_21; - _23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 128 31 128 49] _24 <> (18446744073709551615 : usize)); - switch (_23) - | False -> goto BB8 - | _ -> goto BB6 - end - } - BB6 { - _26 <- Type.creusat_decision_decisions_Decisions_linked_list ( * d_4); - _27 <- curr_21; - _25 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 128 52 128 71] Index1.index _26 _27); - goto BB7 - } - BB7 { - timestamp_22 <- Type.creusat_decision_node_Node_ts _25; - goto BB9 - } - BB8 { - timestamp_22 <- (0 : usize); - goto BB9 - } - BB9 { - goto BB10 - } - BB10 { - invariant i_less2 { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 129 8 129 57] UInt64.to_int i_20 <= Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail ( * old_t_5))) }; - invariant i_less { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 130 8 130 43] i_20 <= how_many_9 }; - invariant post_unit { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 131 8 131 93] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) f_3 (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) }; - invariant inv { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 132 8 132 57] InvariantNoDecision0.invariant_no_decision ( * self_1) f_3 }; - invariant d_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 133 8 133 53] Invariant2.invariant' ( * d_4) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_3)) }; - invariant proph { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 135 8 135 52] ^ old_t_5 = ^ self_1 }; - invariant proph_d { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 136 8 136 51] ^ old_d_7 = ^ d_4 }; - invariant curr_less { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 137 8 137 87] UInt64.to_int curr_21 < Seq.length (Model3.model (Type.creusat_decision_decisions_Decisions_linked_list ( * d_4))) || UInt64.to_int curr_21 = 18446744073709551615 }; - _31 <- i_20; - _32 <- how_many_9; - _30 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 139 14 139 26] _31 < _32); - switch (_30) - | False -> goto BB17 - | _ -> goto BB11 - end - } - BB11 { - _34 <- borrow_mut ( * self_1); - self_1 <- { self_1 with current = ( ^ _34) }; - _35 <- f_3; - idx_33 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 140 22 140 38] Backstep0.backstep _34 _35); - goto BB12 - } - BB12 { - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 141 12 141 45] UInt64.to_int idx_33 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_3) }; - _36 <- (); - _39 <- Type.creusat_decision_decisions_Decisions_linked_list ( * d_4); - _40 <- idx_33; - _38 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 142 33 142 51] Index1.index _39 _40); - goto BB13 - } - BB13 { - curr_timestamp_37 <- Type.creusat_decision_node_Node_ts _38; - _43 <- curr_timestamp_37; - _44 <- timestamp_22; - _42 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 143 15 143 41] _43 > _44); - switch (_42) - | False -> goto BB15 - | _ -> goto BB14 - end - } - BB14 { - _45 <- curr_timestamp_37; - timestamp_22 <- _45; - _46 <- idx_33; - curr_21 <- _46; - _41 <- (); - goto BB16 - } - BB15 { - _41 <- (); - goto BB16 - } - BB16 { - i_20 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 147 12 147 18] i_20 + (1 : usize)); - _29 <- (); - goto BB10 - } - BB17 { - _28 <- (); - _50 <- curr_21; - d_4 <- { d_4 with current = (let Type.CreuSat_Decision_Decisions a b c d = * d_4 in Type.CreuSat_Decision_Decisions a b c _50) }; - assume { Resolve0.resolve d_4 }; - goto BB18 - } - BB18 { - invariant post_unit { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 151 8 151 93] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) f_3 (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) }; - invariant inv { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 152 8 152 57] InvariantNoDecision0.invariant_no_decision ( * self_1) f_3 }; - invariant proph { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 153 8 153 52] ^ old_t_5 = ^ self_1 }; - _54 <- Type.creusat_trail_trail_Trail_decisions ( * self_1); - _53 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 154 14 154 34] Len1.len _54); - goto BB19 - } - BB19 { - _55 <- level_2; - _52 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 154 14 154 42] _53 > _55); - switch (_52) - | False -> goto BB26 - | _ -> goto BB20 - end - } - BB20 { - _57 <- (); - old_t2_56 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 155 25 155 40] self_1); - goto BB21 - } - BB21 { - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 156 12 156 50] Sorted0.sorted (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) }; - _58 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 157 12 157 54] Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) > 0 }; - _59 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 158 12 158 76] let _ = LemmaPopMaintainsSorted0.lemma_pop_maintains_sorted (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) in true }; - _60 <- (); - _63 <- borrow_mut (Type.creusat_trail_trail_Trail_decisions ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Trail_Trail a b c d e = * self_1 in Type.CreuSat_Trail_Trail a b c d ( ^ _63)) }; - _62 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 159 18 159 38] Pop1.pop _63); - goto BB22 - } - BB22 { - switch (_62) - | Type.Core_Option_Option_None -> goto BB23 - | Type.Core_Option_Option_Some _ -> goto BB25 - end - } - BB23 { - assume { Resolve1.resolve self_1 }; - absurd - } - BB24 { - assume { Resolve1.resolve self_1 }; - absurd - } - BB25 { - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 161 20 161 76] Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1)) = Pop0.pop (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * old_t2_56))) }; - _65 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 162 20 162 61] ^ old_t2_56 = ^ self_1 }; - _66 <- (); - _61 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 168 12 168 50] Sorted0.sorted (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) }; - _69 <- (); - _29 <- (); - goto BB18 - } - BB26 { - _51 <- (); - goto BB27 - } - BB27 { - invariant post_unit { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 171 8 171 93] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) f_3 (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) }; - invariant inv { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 172 8 172 57] InvariantNoDecision0.invariant_no_decision ( * self_1) f_3 }; - invariant proph { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 173 8 173 52] ^ old_t_5 = ^ self_1 }; - _77 <- Type.creusat_trail_trail_Trail_decisions ( * self_1); - _76 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 174 14 174 34] Len1.len _77); - goto BB31 - } - BB28 { - _74 <- false; - goto BB30 - } - BB29 { - _81 <- Type.creusat_trail_trail_Trail_decisions ( * self_1); - _84 <- Type.creusat_trail_trail_Trail_decisions ( * self_1); - _83 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 174 57 174 77] Len1.len _84); - goto BB32 - } - BB30 { - switch (_74) - | False -> goto BB41 - | _ -> goto BB35 - end - } - BB31 { - _75 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 174 14 174 38] _76 > (0 : usize)); - switch (_75) - | False -> goto BB28 - | _ -> goto BB29 - end - } - BB32 { - _82 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 174 57 174 81] _83 - (1 : usize)); - _80 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 174 42 174 82] Index0.index _81 _82); - goto BB33 - } - BB33 { - _79 <- _80; - _86 <- Type.creusat_trail_trail_Trail_trail ( * self_1); - _85 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 174 85 174 101] Len0.len _86); - goto BB34 - } - BB34 { - _78 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 174 42 174 101] _79 > _85); - _74 <- _78; - goto BB30 - } - BB35 { - _88 <- (); - old_t3_87 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 175 25 175 40] self_1); - goto BB36 - } - BB36 { - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 176 12 176 50] Sorted0.sorted (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) }; - _89 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 177 12 177 54] Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) > 0 }; - _90 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 178 12 178 76] let _ = LemmaPopMaintainsSorted0.lemma_pop_maintains_sorted (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) in true }; - _91 <- (); - _94 <- borrow_mut (Type.creusat_trail_trail_Trail_decisions ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Trail_Trail a b c d e = * self_1 in Type.CreuSat_Trail_Trail a b c d ( ^ _94)) }; - _93 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 180 18 180 38] Pop1.pop _94); - goto BB37 - } - BB37 { - switch (_93) - | Type.Core_Option_Option_None -> goto BB38 - | Type.Core_Option_Option_Some _ -> goto BB40 - end - } - BB38 { - assume { Resolve1.resolve self_1 }; - absurd - } - BB39 { - assume { Resolve1.resolve self_1 }; - absurd - } - BB40 { - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 182 20 182 78] Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1)) = Pop0.pop (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * old_t3_87))) }; - _96 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 183 20 183 61] ^ old_t3_87 = ^ self_1 }; - _97 <- (); - _92 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 189 12 189 78] let _ = LemmaPopMaintainsSorted0.lemma_pop_maintains_sorted (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * old_t3_87))) in true }; - _100 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 190 12 190 50] Sorted0.sorted (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) }; - _101 <- (); - _29 <- (); - goto BB27 - } - BB41 { - _73 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 192 8 195 9] Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) = 0 || UInt64.to_int (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) (Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self_1))) - 1)) <= Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) }; - _105 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 197 8 197 53] Invariant3.invariant' (Type.creusat_trail_trail_Trail_assignments ( * self_1)) f_3 }; - _106 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 200 8 200 47] LitNotInLess0.lit_not_in_less ( * self_1) f_3 }; - _107 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 201 8 201 43] LitIsUnique0.lit_is_unique ( * self_1) }; - _108 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 202 8 202 83] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) f_3 (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) }; - _109 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 203 8 203 56] TrailEntriesAreAssigned0.trail_entries_are_assigned ( * self_1) }; - _110 <- (); - _111 <- level_2; - self_1 <- { self_1 with current = (let Type.CreuSat_Trail_Trail a b c d e = * self_1 in Type.CreuSat_Trail_Trail a b c _111 e) }; - assume { Resolve1.resolve self_1 }; - _0 <- (); - return _0 - } - -end -module CreuSat_Trail_Impl0_BacktrackSafe_Interface - use mach.int.UInt64 - use prelude.Prelude - use Type - use mach.int.Int - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner_Interface as LongArePostUnitInner0 - clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model1 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val backtrack_safe [@cfg:stackify] (self : borrowed (Type.creusat_trail_trail)) (level : usize) (f : Type.creusat_formula_formula) (d : borrowed (Type.creusat_decision_decisions)) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 101 4 101 30] Invariant0.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 102 4 102 42] Invariant1.invariant' ( * self) f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 103 4 103 48] Invariant2.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 104 4 104 77] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 102 4 102 42] Invariant1.invariant' ( ^ self) f } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 103 4 103 48] Invariant2.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 105 4 105 86] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } - -end -module CreuSat_Trail_Impl0_BacktrackSafe - use mach.int.UInt64 - use prelude.Prelude - use Type - use mach.int.Int - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = SatInner0.index_logic, function IndexLogic0.index_logic = UnsatInner0.index_logic, - function IndexLogic0.index_logic = Invariant6.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model7.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model7 with function Model1.model = InvariantMirror0.model, - function Model0.model = FormulaInvariant0.model, function Model0.model = ClausePostWithRegardsToInner0.model, - function Model0.model = Invariant3.model, function Model1.model = UnitAreSat0.model, - function Model0.model = LitIdxIn0.model, function Model1.model = Invariant7.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = LongArePostUnitInner0.model, - function Model0.model = InvariantMirror0.model, function Model0.model = Model2.model, - function Model3.model = InvariantNoDecisionMirror0.model, function Model0.model = UnitAreSat0.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model2.model = InvariantNoDecision0.model, - function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant4.model, - function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Invariant0.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant2 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_decision_decisions - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_trail_trail - clone CreuSat_Trail_Impl0_BacktrackTo_Interface as BacktrackTo0 - clone CreuSat_Trail_Impl0_DecisionLevel_Interface as DecisionLevel0 - let rec cfg backtrack_safe [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 106 4 106 82] (self : borrowed (Type.creusat_trail_trail)) (level : usize) (f : Type.creusat_formula_formula) (d : borrowed (Type.creusat_decision_decisions)) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 101 4 101 30] Invariant0.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 102 4 102 42] Invariant1.invariant' ( * self) f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 103 4 103 48] Invariant2.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 104 4 104 77] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 102 4 102 42] Invariant1.invariant' ( ^ self) f } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 103 4 103 48] Invariant2.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 105 4 105 86] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } - - = - var _0 : (); - var self_1 : borrowed (Type.creusat_trail_trail); - var level_2 : usize; - var f_3 : Type.creusat_formula_formula; - var d_4 : borrowed (Type.creusat_decision_decisions); - var _5 : bool; - var _6 : usize; - var _7 : usize; - var _8 : Type.creusat_trail_trail; - var _9 : (); - var _10 : borrowed (Type.creusat_trail_trail); - var _11 : usize; - var _12 : Type.creusat_formula_formula; - var _13 : borrowed (Type.creusat_decision_decisions); - { - self_1 <- self; - level_2 <- level; - f_3 <- f; - d_4 <- d; - goto BB0 - } - BB0 { - _6 <- level_2; - _8 <- * self_1; - _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 107 19 107 40] DecisionLevel0.decision_level _8); - goto BB1 - } - BB1 { - _5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 107 11 107 40] _6 < _7); - switch (_5) - | False -> goto BB4 - | _ -> goto BB2 - end - } - BB2 { - _10 <- borrow_mut ( * self_1); - self_1 <- { self_1 with current = ( ^ _10) }; - _11 <- level_2; - _12 <- f_3; - _13 <- borrow_mut ( * d_4); - d_4 <- { d_4 with current = ( ^ _13) }; - _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 108 12 108 42] BacktrackTo0.backtrack_to _10 _11 _12 _13); - goto BB3 - } - BB3 { - assume { Resolve0.resolve self_1 }; - assume { Resolve1.resolve d_4 }; - _0 <- (); - goto BB5 - } - BB4 { - assume { Resolve0.resolve self_1 }; - assume { Resolve1.resolve d_4 }; - _0 <- (); - goto BB5 - } - BB5 { - return _0 - } - -end -module CreuSat_Trail_Impl0_EnqAssignment_Interface - use mach.int.UInt64 - use Type - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use prelude.Prelude - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant1.invariant_mirror - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToLit_Interface as ClausePostWithRegardsToLit0 - clone CreuSat_Logic_LogicLit_Impl1_Sat_Interface as Sat0 - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner_Interface as LongArePostUnitInner0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model3 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_Logic_Unset_Interface as Unset1 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model2 - clone CreuSat_Logic_LogicLit_Impl1_IdxInTrail_Interface as IdxInTrail0 - clone CreuSat_Logic_LogicLit_Impl1_Unsat_Interface as Unsat0 - clone CreuSat_Logic_LogicLit_Impl1_Unset_Interface as Unset0 - clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl1_Invariant_Interface as Invariant3 - clone CreuSat_Logic_LogicLit_Impl1_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant1 with axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant0 - val enq_assignment [@cfg:stackify] (self : borrowed (Type.creusat_trail_trail)) (step : Type.creusat_trail_step) (_f : Type.creusat_formula_formula) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 211 4 211 43] Invariant0.invariant' ( * self) _f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 212 4 212 31] Invariant1.invariant' _f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 213 4 213 49] Invariant2.invariant' (Type.creusat_trail_step_Step_lit step) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 214 4 214 36] Invariant3.invariant' step _f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 215 4 228 7] match (Type.creusat_trail_step_Step_reason step) with - | Type.CreuSat_Trail_Reason_Long cref -> UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) && Unset0.unset (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) 0) (Type.creusat_trail_trail_Trail_assignments ( * self)) && (forall i : (int) . 1 <= i && i < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) -> Unsat0.unsat (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) i) (Type.creusat_trail_trail_Trail_assignments ( * self))) && Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) 0 = Type.creusat_trail_step_Step_lit step - | Type.CreuSat_Trail_Reason_Unit cref -> UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) && Type.creusat_trail_step_Step_lit step = Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) 0 - | _ -> true - end} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 229 4 229 51] not IdxInTrail0.idx_in_trail (Type.creusat_trail_step_Step_lit step) (Type.creusat_trail_trail_Trail_trail ( * self))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 230 4 230 67] Unset1.unset (Seq.get (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self))) (IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit step)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 231 4 231 78] LongArePostUnitInner0.long_are_post_unit_inner (Model3.model (Type.creusat_trail_trail_Trail_trail ( * self))) _f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 211 4 211 43] Invariant0.invariant' ( ^ self) _f } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 232 4 233 94] forall j : (int) . 0 <= j && j < Seq.length (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self))) && j <> IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit step) -> Seq.get (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self))) j = Seq.get (Model2.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) j } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 234 4 234 49] Sat0.sat (Type.creusat_trail_step_Step_lit step) (Type.creusat_trail_trail_Trail_assignments ( ^ self)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 235 4 235 87] LongArePostUnitInner0.long_are_post_unit_inner (Model3.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) _f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 236 4 239 7] match (Type.creusat_trail_step_Step_reason step) with - | Type.CreuSat_Trail_Reason_Long k -> ClausePostWithRegardsToLit0.clause_post_with_regards_to_lit (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int k)) (Type.creusat_trail_trail_Trail_assignments ( ^ self)) (Type.creusat_trail_step_Step_lit step) - | _ -> true - end } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 240 4 240 65] Seq.length (Model3.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) = 1 + Seq.length (Model3.model (Type.creusat_trail_trail_Trail_trail ( * self))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 241 4 241 51] Type.creusat_trail_trail_Trail_decisions ( ^ self) = Type.creusat_trail_trail_Trail_decisions ( * self) } - -end -module CreuSat_Trail_Impl0_EnqAssignment - use mach.int.UInt64 - use Type - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use prelude.Prelude - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = Invariant2.index_logic, - function IndexLogic0.index_logic = IdxInTrail0.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LemmaPushMaintainsLitNotInLess0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = UnsetInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic, function IndexLogic0.index_logic = SatInner0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant2 with predicate Invariant0.invariant' = Invariant3.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant6.invariant_internal - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = ClausePostWithRegardsToInner0.model, - function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, - function Model1.model = Invariant4.model, function Model1.model = UnitAreSat0.model, - function Model0.model = LitIdxIn0.model, function Model0.model = Invariant6.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = LongArePostUnitInner0.model, - function Model3.model = InvariantNoDecisionMirror0.model, function Model0.model = InvariantMirror0.model, - function Model0.model = Model5.model, function Model0.model = Invariant4.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = UnitAreSat0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant4 with predicate Invariant1.invariant' = Invariant3.invariant' - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant3 with predicate Invariant2.invariant' = LemmaPushMaintainsLitNotInLess0.invariant', - predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant6 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model2.model, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model0.model = Unset0.model, - function Model0.model = Unsat0.model, function Model0.model = Sat0.model, - function Model0.model = ClausePostWithRegardsToLit0.model, - function Model0.model = LemmaPushMaintainsLitNotInLess0.model, function Model2.model = InvariantNoDecision0.model, - function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant5.model, - function Model1.model = TrailEntriesAreAssigned0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant0.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant0.model, function Model0.model = IdxInTrail0.model, - function Model1.model = LemmaPushMaintainsLitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = InvariantNoDecision0.model, - function Model1.model = InvariantNoDecisionMirror0.model, function Model0.model = TrailEntriesAreAssigned0.model, - axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LemmaPushMaintainsLitNotInLess0.lit_not_in_less_inner, - predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner, - predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_UnsetInner as UnsetInner0 with predicate UnsetInner0.unset_inner = Unset0.unset_inner - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant1.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model5 with function Model0.model = Invariant1.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant1.invariant_mirror, - predicate InvariantMirror0.invariant_mirror = LemmaPushMaintainsLitNotInLess0.invariant_mirror - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToLit0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant0.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant0.invariant_no_decision, - axiom . - clone CreuSat_Logic_Logic_Unset as Unset1 with predicate Unset0.unset = LemmaPushMaintainsLitNotInLess0.unset - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant0 with predicate Invariant1.invariant' = LemmaPushMaintainsLitNotInLess0.invariant' - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant1 with predicate Invariant0.invariant' = LemmaPushMaintainsLitNotInLess0.invariant', - axiom . - clone CreuSat_Logic_LogicTrail_LemmaPushMaintainsLitNotInLess as LemmaPushMaintainsLitNotInLess0 with axiom . - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToLit as ClausePostWithRegardsToLit0 - clone CreuSat_Logic_LogicLit_Impl1_IdxInTrail as IdxInTrail0 - clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat0 - clone CreuSat_Logic_LogicLit_Impl1_Unset as Unset0 - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy2 with type ModelTy0.modelTy = Model9.modelTy - clone CreusotContracts_Std1_Vec_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, type ModelTy0.modelTy = Model8.modelTy - clone CreusotContracts_Logic_Model_Impl1_Model as Model9 with type t = Type.creusat_assignments_assignments, - function Model1.model = SetAssignment0.model - clone CreusotContracts_Logic_Model_Impl0_Model as Model8 with type t = Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global), - function Model0.model = SetAssignment0.model - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = usize - clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize, type Output0.output = IndexMut0.output - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = usize, - predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize, - predicate HasValue0.has_value = IndexMut0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize, - predicate InBounds0.in_bounds = IndexMut0.in_bounds - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_trail_trail - clone Alloc_Vec_Impl1_Push_Interface as Push0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global - clone CreuSat_Assignments_Impl2_SetAssignment_Interface as SetAssignment0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = usize - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = usize, type i = usize, - type a = Type.alloc_alloc_global - clone CreuSat_Lit_Impl1_Index_Interface as Index0 - clone CreuSat_Trail_Impl0_DecisionLevel_Interface as DecisionLevel0 - let rec cfg enq_assignment [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 242 4 242 62] (self : borrowed (Type.creusat_trail_trail)) (step : Type.creusat_trail_step) (_f : Type.creusat_formula_formula) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 211 4 211 43] Invariant0.invariant' ( * self) _f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 212 4 212 31] Invariant1.invariant' _f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 213 4 213 49] Invariant2.invariant' (Type.creusat_trail_step_Step_lit step) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 214 4 214 36] Invariant3.invariant' step _f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 215 4 228 7] match (Type.creusat_trail_step_Step_reason step) with - | Type.CreuSat_Trail_Reason_Long cref -> UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) && Unset0.unset (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) 0) (Type.creusat_trail_trail_Trail_assignments ( * self)) && (forall i : (int) . 1 <= i && i < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) -> Unsat0.unsat (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) i) (Type.creusat_trail_trail_Trail_assignments ( * self))) && Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) 0 = Type.creusat_trail_step_Step_lit step - | Type.CreuSat_Trail_Reason_Unit cref -> UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) && Type.creusat_trail_step_Step_lit step = Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) 0 - | _ -> true - end} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 229 4 229 51] not IdxInTrail0.idx_in_trail (Type.creusat_trail_step_Step_lit step) (Type.creusat_trail_trail_Trail_trail ( * self))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 230 4 230 67] Unset1.unset (Seq.get (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self))) (IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit step)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 231 4 231 78] LongArePostUnitInner0.long_are_post_unit_inner (Model3.model (Type.creusat_trail_trail_Trail_trail ( * self))) _f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 211 4 211 43] Invariant0.invariant' ( ^ self) _f } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 232 4 233 94] forall j : (int) . 0 <= j && j < Seq.length (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self))) && j <> IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit step) -> Seq.get (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self))) j = Seq.get (Model2.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) j } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 234 4 234 49] Sat0.sat (Type.creusat_trail_step_Step_lit step) (Type.creusat_trail_trail_Trail_assignments ( ^ self)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 235 4 235 87] LongArePostUnitInner0.long_are_post_unit_inner (Model3.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) _f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 236 4 239 7] match (Type.creusat_trail_step_Step_reason step) with - | Type.CreuSat_Trail_Reason_Long k -> ClausePostWithRegardsToLit0.clause_post_with_regards_to_lit (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int k)) (Type.creusat_trail_trail_Trail_assignments ( ^ self)) (Type.creusat_trail_step_Step_lit step) - | _ -> true - end } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 240 4 240 65] Seq.length (Model3.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) = 1 + Seq.length (Model3.model (Type.creusat_trail_trail_Trail_trail ( * self))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 241 4 241 51] Type.creusat_trail_trail_Trail_decisions ( ^ self) = Type.creusat_trail_trail_Trail_decisions ( * self) } - - = - var _0 : (); - var self_1 : borrowed (Type.creusat_trail_trail); - var step_2 : Type.creusat_trail_step; - var _f_3 : Type.creusat_formula_formula; - var _4 : usize; - var _5 : Type.creusat_trail_trail; - var _6 : borrowed usize; - var _7 : borrowed (Type.alloc_vec_vec usize (Type.alloc_alloc_global)); - var _8 : usize; - var _9 : Type.creusat_lit_lit; - var trail_10 : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global); - var _11 : (); - var _12 : borrowed (Type.creusat_assignments_assignments); - var _13 : Type.creusat_lit_lit; - var _14 : Type.creusat_formula_formula; - var _15 : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global); - var _16 : (); - var _17 : (); - var _18 : (); - var _19 : borrowed (Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global)); - var _20 : Type.creusat_trail_step; - var _21 : (); - var _22 : (); - var _23 : (); - var _24 : (); - { - self_1 <- self; - step_2 <- step; - _f_3 <- _f; - goto BB0 - } - BB0 { - _5 <- * self_1; - _4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 243 46 243 67] DecisionLevel0.decision_level _5); - goto BB1 - } - BB1 { - _7 <- borrow_mut (Type.creusat_trail_trail_Trail_lit_to_level ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Trail_Trail a b c d e = * self_1 in Type.CreuSat_Trail_Trail a ( ^ _7) c d e) }; - _9 <- Type.creusat_trail_step_Step_lit step_2; - _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 243 26 243 42] Index0.index _9); - goto BB2 - } - BB2 { - _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 243 8 243 43] IndexMut0.index_mut _7 _8); - goto BB3 - } - BB3 { - _6 <- { _6 with current = _4 }; - assume { Resolve0.resolve _6 }; - trail_10 <- Type.creusat_trail_trail_Trail_trail ( * self_1); - _12 <- borrow_mut (Type.creusat_trail_trail_Trail_assignments ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Trail_Trail a b c d e = * self_1 in Type.CreuSat_Trail_Trail ( ^ _12) b c d e) }; - _13 <- Type.creusat_trail_step_Step_lit step_2; - _14 <- _f_3; - _15 <- trail_10; - _11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 246 8 246 60] SetAssignment0.set_assignment _12 _13 _14 _15); - goto BB4 - } - BB4 { - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 248 8 248 42] Invariant3.invariant' step_2 _f_3 }; - _16 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 249 8 249 83] let _ = LemmaPushMaintainsLitNotInLess0.lemma_push_maintains_lit_not_in_less ( * self_1) _f_3 step_2 in true }; - _17 <- (); - _19 <- borrow_mut (Type.creusat_trail_trail_Trail_trail ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Trail_Trail a b c d e = * self_1 in Type.CreuSat_Trail_Trail a b ( ^ _19) d e) }; - _20 <- step_2; - _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 250 8 250 29] Push0.push _19 _20); - goto BB5 - } - BB5 { - assume { Resolve1.resolve self_1 }; - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 251 8 256 9] match (Type.creusat_trail_step_Step_reason step_2) with - | Type.CreuSat_Trail_Reason_Long k -> ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f_3)) (UInt64.to_int k)) (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) (IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit step_2)) - | _ -> true - end }; - _21 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 258 8 258 43] LitIsUnique0.lit_is_unique ( * self_1) }; - _22 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 259 8 259 48] LitNotInLess0.lit_not_in_less ( * self_1) _f_3 }; - _23 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 261 8 261 84] LongArePostUnitInner0.long_are_post_unit_inner (Model3.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) _f_3 (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) }; - _24 <- (); - _0 <- (); - return _0 - } - -end -module CreuSat_Solver_Impl0_HandleLongClause_Interface - use mach.int.UInt64 - use mach.int.Int - use prelude.Prelude - use mach.int.Int32 - use seq.Seq - use Type - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 - clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 - clone CreuSat_Logic_LogicClause_EquisatExtensionInner_Interface as EquisatExtensionInner0 - clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_formula_formula - clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant4 - clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant3 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val handle_long_clause [@cfg:stackify] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (t : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) (d : borrowed (Type.creusat_decision_decisions)) (clause : Type.creusat_clause_clause) (s_idx : usize) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 106 4 106 37] Invariant0.invariant' ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 107 4 107 42] Invariant1.invariant' ( * t) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 108 4 108 42] Invariant2.invariant' ( * w) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 109 4 109 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 110 4 110 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 111 4 111 46] Invariant4.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 112 4 112 52] EquisatExtensionInner0.equisat_extension_inner clause (Model0.model f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 113 4 113 36] Seq.length (Model1.model clause) > 1} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 114 4 114 41] UInt64.to_int s_idx < Seq.length (Model1.model clause)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 106 4 106 37] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 107 4 107 42] Invariant1.invariant' ( ^ t) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 108 4 108 42] Invariant2.invariant' ( ^ w) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 109 4 109 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 115 4 115 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 116 4 116 29] Equisat0.equisat ( * f) ( ^ f) } - -end -module CreuSat_Solver_Impl0_HandleLongClause - use mach.int.UInt64 - use mach.int.Int - use prelude.Prelude - use mach.int.Int32 - use seq.Seq - use Type - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = Invariant7.index_logic, function IndexLogic0.index_logic = SatInner1.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Invariant4.model, - function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, - function Model2.model = WatchesInvariantInternal0.model, function Model1.model = UnitAreSat0.model, - function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, - function Model1.model = Invariant8.model, function Model0.model = SatInner2.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, - function Model0.model = Model2.model, function Model3.model = InvariantNoDecisionMirror0.model, - function Model1.model = WatchesInvariantInternal0.model, function Model0.model = LongArePostUnitInner0.model, - function Model0.model = UnitAreSat0.model, function Model0.model = SatInner0.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant8.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with predicate Invariant1.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with predicate Invariant0.invariant' = Invariant6.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model11 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model9.model, axiom . - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss1.sat_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss0.formula_sat_inner - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner, - predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss1.complete_inner - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model9 with function Model2.model = InvariantNoDecision0.model, - function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant5.model, - function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant4.invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, function Model0.model = Invariant3.model, axiom . - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant2.watches_invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Invariant0.model, - function Model0.model = Model0.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 - clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_formula_formula - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant3 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - clone CreuSat_Logic_LogicClause_Impl2_VarsInRange as VarsInRange0 with predicate VarsInRange0.vars_in_range = UnitInner0.vars_in_range - clone CreuSat_Logic_LogicLit_Impl1_UnsetInner as UnsetInner0 with predicate UnsetInner0.unset_inner = Unset1.unset_inner, - predicate UnsetInner0.unset_inner = UnitInner0.unset_inner - clone CreuSat_Logic_LogicClause_Impl2_UnitInner as UnitInner0 with predicate UnitInner0.unit_inner = Unit0.unit_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToLit as ClausePostWithRegardsToLit0 with predicate ClausePostWithRegardsToLit0.clause_post_with_regards_to_lit = EnqAssignment0.clause_post_with_regards_to_lit - clone CreuSat_Logic_LogicLit_Impl1_IdxInTrail as IdxInTrail0 with predicate IdxInTrail0.idx_in_trail = EnqAssignment0.idx_in_trail - clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat0 with predicate Unsat0.unsat = EnqAssignment0.unsat - clone CreuSat_Logic_LogicLit_Impl1_Unset as Unset1 with predicate Unset0.unset = UnitAndUnset0.unset, - predicate Unset0.unset = EnqAssignment0.unset - clone CreuSat_Logic_LogicClause_Impl2_Unit as Unit0 with predicate Unit0.unit = UnitAndUnset0.unit - clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve7 with type t = usize, - predicate Resolve0.resolve = Resolve0.resolve, predicate Resolve1.resolve = Resolve0.resolve - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model12.modelTy, - type ModelTy0.modelTy = Model14.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model14 with type t = Type.creusat_clause_clause, - function Model1.model = GetAssertingLevel0.model, function Model0.model = Index1.model, - function Model0.model = UnitAndUnset0.model - clone CreusotContracts_Logic_Model_Impl0_Model as Model13 with type t = Type.creusat_formula_formula, - function Model0.model = GetAssertingLevel0.model, function Model0.model = Index0.model - clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with predicate EquisatExtension0.equisat_extension = SwapLitsInClause0.equisat_extension - clone CreusotContracts_Logic_Model_Impl1_Model as Model12 with type t = Type.creusat_clause_clause, - function Model0.model = SwapLitsInClause0.model - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve6 with type t = Type.creusat_solver_solver - clone CreuSat_Solver_Impl0_IncreaseNumConflicts_Interface as IncreaseNumConflicts0 - clone CreuSat_Solver_Impl0_IncreaseNumLemmas_Interface as IncreaseNumLemmas0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve5 with type t = Type.creusat_trail_trail - clone CreuSat_Trail_Impl0_EnqAssignment_Interface as EnqAssignment0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve4 with type t = Type.creusat_formula_formula - clone CreuSat_Clause_Impl3_UnitAndUnset_Interface as UnitAndUnset0 - clone CreuSat_Clause_Impl0_Index_Interface as Index1 - clone CreuSat_Formula_Impl0_Index_Interface as Index0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve3 with type t = Type.creusat_decision_decisions - clone CreuSat_Trail_Impl0_BacktrackSafe_Interface as BacktrackSafe0 - clone CreuSat_Util_UpdateSlow_Interface as UpdateSlow0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = usize - clone CreuSat_Util_UpdateFast_Interface as UpdateFast0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_watches_watches - clone CreuSat_Formula_Impl2_AddClause_Interface as AddClause0 - clone CreuSat_Clause_Impl3_CalcLbd_Interface as CalcLbd0 - clone CreusotContracts_Logic_Resolve_Impl0_Resolve as Resolve0 with type t1 = usize, type t2 = usize - clone CreuSat_Solver_GetAssertingLevel_Interface as GetAssertingLevel0 - clone CreuSat_Clause_Impl3_SwapLitsInClause_Interface as SwapLitsInClause0 - let rec cfg handle_long_clause [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 117 4 119 5] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (t : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) (d : borrowed (Type.creusat_decision_decisions)) (clause : Type.creusat_clause_clause) (s_idx : usize) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 106 4 106 37] Invariant0.invariant' ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 107 4 107 42] Invariant1.invariant' ( * t) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 108 4 108 42] Invariant2.invariant' ( * w) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 109 4 109 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 110 4 110 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 111 4 111 46] Invariant4.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 112 4 112 52] EquisatExtensionInner0.equisat_extension_inner clause (Model0.model f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 113 4 113 36] Seq.length (Model1.model clause) > 1} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 114 4 114 41] UInt64.to_int s_idx < Seq.length (Model1.model clause)} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 106 4 106 37] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 107 4 107 42] Invariant1.invariant' ( ^ t) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 108 4 108 42] Invariant2.invariant' ( ^ w) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 109 4 109 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 115 4 115 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 116 4 116 29] Equisat0.equisat ( * f) ( ^ f) } - - = - var _0 : (); - var self_1 : borrowed (Type.creusat_solver_solver); - var f_2 : borrowed (Type.creusat_formula_formula); - var t_3 : borrowed (Type.creusat_trail_trail); - var w_4 : borrowed (Type.creusat_watches_watches); - var d_5 : borrowed (Type.creusat_decision_decisions); - var clause_6 : Type.creusat_clause_clause; - var s_idx_7 : usize; - var _8 : (); - var _9 : borrowed (Type.creusat_clause_clause); - var _10 : Type.creusat_formula_formula; - var _11 : usize; - var idx_12 : usize; - var level_13 : usize; - var _14 : (usize, usize); - var _15 : Type.creusat_clause_clause; - var _16 : Type.creusat_clause_clause; - var _17 : Type.creusat_trail_trail; - var _18 : Type.creusat_formula_formula; - var _19 : (); - var _20 : borrowed (Type.creusat_clause_clause); - var _21 : Type.creusat_formula_formula; - var _22 : usize; - var lbd_23 : usize; - var _24 : Type.creusat_clause_clause; - var _25 : Type.creusat_formula_formula; - var _26 : borrowed (Type.creusat_solver_solver); - var _27 : Type.creusat_trail_trail; - var cref_28 : usize; - var _29 : borrowed (Type.creusat_formula_formula); - var _30 : Type.creusat_clause_clause; - var _31 : borrowed (Type.creusat_watches_watches); - var _32 : Type.creusat_trail_trail; - var _33 : (); - var _34 : borrowed usize; - var _35 : borrowed usize; - var _36 : usize; - var _37 : (); - var _38 : borrowed usize; - var _39 : borrowed usize; - var _40 : usize; - var _41 : (); - var _42 : borrowed (Type.creusat_trail_trail); - var _43 : usize; - var _44 : Type.creusat_formula_formula; - var _45 : borrowed (Type.creusat_decision_decisions); - var lit_46 : Type.creusat_lit_lit; - var _47 : Type.creusat_lit_lit; - var _48 : Type.creusat_clause_clause; - var _49 : Type.creusat_clause_clause; - var _50 : Type.creusat_formula_formula; - var _51 : usize; - var step_52 : Type.creusat_trail_step; - var _53 : Type.creusat_lit_lit; - var _54 : usize; - var _55 : Type.creusat_trail_reason; - var _56 : usize; - var _57 : (); - var _58 : bool; - var _59 : Type.creusat_clause_clause; - var _60 : Type.creusat_clause_clause; - var _61 : Type.creusat_formula_formula; - var _62 : usize; - var _63 : Type.creusat_assignments_assignments; - var _64 : Type.creusat_assignments_assignments; - var _65 : Type.creusat_formula_formula; - var _66 : (); - var _67 : borrowed (Type.creusat_trail_trail); - var _68 : Type.creusat_trail_step; - var _69 : Type.creusat_formula_formula; - var _70 : (); - var _71 : borrowed (Type.creusat_solver_solver); - var _72 : (); - var _73 : borrowed (Type.creusat_solver_solver); - { - self_1 <- self; - f_2 <- f; - t_3 <- t; - w_4 <- w; - d_5 <- d; - clause_6 <- clause; - s_idx_7 <- s_idx; - goto BB0 - } - BB0 { - goto BB1 - } - BB1 { - goto BB2 - } - BB2 { - goto BB3 - } - BB3 { - goto BB4 - } - BB4 { - _9 <- borrow_mut clause_6; - clause_6 <- ^ _9; - _10 <- * f_2; - _11 <- s_idx_7; - _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 120 8 120 47] SwapLitsInClause0.swap_lits_in_clause _9 _10 _11 (0 : usize)); - goto BB5 - } - BB5 { - _16 <- clause_6; - _15 <- _16; - _17 <- * t_3; - _18 <- * f_2; - _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 121 27 121 61] GetAssertingLevel0.get_asserting_level _15 _17 _18); - goto BB6 - } - BB6 { - idx_12 <- (let (a, _) = _14 in a); - level_13 <- (let (_, a) = _14 in a); - assume { Resolve0.resolve _14 }; - _20 <- borrow_mut clause_6; - clause_6 <- ^ _20; - _21 <- * f_2; - _22 <- idx_12; - _19 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 122 8 122 45] SwapLitsInClause0.swap_lits_in_clause _20 _21 _22 (1 : usize)); - goto BB7 - } - BB7 { - _24 <- clause_6; - _25 <- * f_2; - _26 <- borrow_mut ( * self_1); - self_1 <- { self_1 with current = ( ^ _26) }; - _27 <- * t_3; - lbd_23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 125 18 125 45] CalcLbd0.calc_lbd _24 _25 _26 _27); - goto BB8 - } - BB8 { - _29 <- borrow_mut ( * f_2); - f_2 <- { f_2 with current = ( ^ _29) }; - _30 <- clause_6; - _31 <- borrow_mut ( * w_4); - w_4 <- { w_4 with current = ( ^ _31) }; - _32 <- * t_3; - cref_28 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 126 19 126 45] AddClause0.add_clause _29 _30 _31 _32); - goto BB9 - } - BB9 { - assume { Resolve1.resolve w_4 }; - _35 <- borrow_mut (Type.creusat_solver_solver_Solver_fast ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Solver_Solver a b c d e f g h = * self_1 in Type.CreuSat_Solver_Solver a b c d e ( ^ _35) g h) }; - _34 <- borrow_mut ( * _35); - _35 <- { _35 with current = ( ^ _34) }; - _36 <- lbd_23; - _33 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 127 8 127 40] UpdateFast0.update_fast _34 _36); - goto BB10 - } - BB10 { - assume { Resolve2.resolve _35 }; - _39 <- borrow_mut (Type.creusat_solver_solver_Solver_slow ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Solver_Solver a b c d e f g h = * self_1 in Type.CreuSat_Solver_Solver a b c d e f ( ^ _39) h) }; - _38 <- borrow_mut ( * _39); - _39 <- { _39 with current = ( ^ _38) }; - _40 <- lbd_23; - _37 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 128 8 128 40] UpdateSlow0.update_slow _38 _40); - goto BB11 - } - BB11 { - assume { Resolve2.resolve _39 }; - _42 <- borrow_mut ( * t_3); - t_3 <- { t_3 with current = ( ^ _42) }; - _43 <- level_13; - _44 <- * f_2; - _45 <- borrow_mut ( * d_5); - d_5 <- { d_5 with current = ( ^ _45) }; - _41 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 131 8 131 37] BacktrackSafe0.backtrack_safe _42 _43 _44 _45); - goto BB12 - } - BB12 { - assume { Resolve3.resolve d_5 }; - _50 <- * f_2; - _51 <- cref_28; - _49 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 133 18 133 25] Index0.index _50 _51); - goto BB13 - } - BB13 { - _48 <- _49; - _47 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 133 18 133 28] Index1.index _48 (0 : usize)); - goto BB14 - } - BB14 { - lit_46 <- _47; - _53 <- lit_46; - _54 <- level_13; - _56 <- cref_28; - _55 <- Type.CreuSat_Trail_Reason_Long _56; - step_52 <- Type.CreuSat_Trail_Step _53 _54 _55; - _61 <- * f_2; - _62 <- cref_28; - _60 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 140 11 140 18] Index0.index _61 _62); - goto BB15 - } - BB15 { - _59 <- _60; - _64 <- Type.creusat_trail_trail_Trail_assignments ( * t_3); - _63 <- _64; - _65 <- * f_2; - _58 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 140 11 140 52] UnitAndUnset0.unit_and_unset _59 _63 _65); - goto BB16 - } - BB16 { - switch (_58) - | False -> goto BB19 - | _ -> goto BB17 - end - } - BB17 { - _67 <- borrow_mut ( * t_3); - t_3 <- { t_3 with current = ( ^ _67) }; - _68 <- step_52; - _69 <- * f_2; - assume { Resolve4.resolve f_2 }; - _66 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 141 12 141 37] EnqAssignment0.enq_assignment _67 _68 _69); - goto BB18 - } - BB18 { - assume { Resolve5.resolve t_3 }; - _57 <- (); - goto BB20 - } - BB19 { - assume { Resolve4.resolve f_2 }; - assume { Resolve5.resolve t_3 }; - _57 <- (); - goto BB20 - } - BB20 { - _71 <- borrow_mut ( * self_1); - self_1 <- { self_1 with current = ( ^ _71) }; - _70 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 144 8 144 34] IncreaseNumLemmas0.increase_num_lemmas _71); - goto BB21 - } - BB21 { - _73 <- borrow_mut ( * self_1); - self_1 <- { self_1 with current = ( ^ _73) }; - _72 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 145 8 145 37] IncreaseNumConflicts0.increase_num_conflicts _73); - goto BB22 - } - BB22 { - assume { Resolve6.resolve self_1 }; - _0 <- (); - goto BB23 - } - BB23 { - return _0 - } - -end -module CreuSat_Trail_Impl0_LearnUnit_Interface - use mach.int.UInt64 - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use Type - use prelude.Prelude - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant2.invariant_mirror - clone CreuSat_Logic_LogicLit_Impl1_Sat_Interface as Sat0 - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner_Interface as LongArePostUnitInner0 - clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model3 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model2 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant3 - clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant2 with axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant0 - val learn_unit [@cfg:stackify] (self : borrowed (Type.creusat_trail_trail)) (cref : usize) (f : Type.creusat_formula_formula) (d : borrowed (Type.creusat_decision_decisions)) : Type.core_result_result () () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 302 4 302 42] Invariant0.invariant' ( * self) f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 303 4 303 48] Invariant1.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 304 4 304 30] Invariant2.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 305 4 305 43] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 306 4 306 50] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) = 1} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 307 4 307 59] Invariant3.invariant' (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 313 4 313 77] LongArePostUnitInner0.long_are_post_unit_inner (Model2.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model3.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 302 4 302 42] Invariant0.invariant' ( ^ self) f } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 303 4 303 48] Invariant1.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 310 4 312 70] match (result) with - | Type.Core_Result_Result_Err _ -> true - | Type.Core_Result_Result_Ok _ -> Sat0.sat (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) 0) (Type.creusat_trail_trail_Trail_assignments ( ^ self)) - end } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 314 4 314 86] LongArePostUnitInner0.long_are_post_unit_inner (Model2.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model3.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } - -end -module CreuSat_Trail_Impl0_LearnUnit - use mach.int.UInt64 - use seq.Seq - use mach.int.Int - use mach.int.Int32 - use Type - use prelude.Prelude - use prelude.UInt8 - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Invariant3.model, - function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, - function Model0.model = ClausePostWithRegardsToInner0.model, function Model1.model = UnitAreSat0.model, - function Model0.model = LitIdxIn0.model, function Model1.model = Invariant7.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = LongArePostUnitInner0.model, - function Model3.model = InvariantNoDecisionMirror0.model, function Model0.model = InvariantMirror0.model, - function Model0.model = Model6.model, function Model0.model = UnitAreSat0.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = SatInner0.index_logic, function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic, function IndexLogic0.index_logic = Invariant6.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model3.model, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model3 with function Model0.model = Sat0.model, - function Model2.model = InvariantNoDecision0.model, function Model0.model = InvariantNoDecisionMirror0.model, - function Model0.model = Invariant4.model, function Model1.model = TrailEntriesAreAssigned0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant0.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant0.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant2.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model6 with function Model0.model = Invariant2.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant2.invariant_mirror - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, function Model0.model = Invariant1.model, axiom . - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant0.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant0.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant2 with axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant1 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant0 - clone CreuSat_Logic_LogicLit_Impl1_UnsetInner as UnsetInner0 with predicate UnsetInner0.unset_inner = Unset0.unset_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToLit as ClausePostWithRegardsToLit0 with predicate ClausePostWithRegardsToLit0.clause_post_with_regards_to_lit = EnqAssignment0.clause_post_with_regards_to_lit - clone CreuSat_Logic_Logic_Unset as Unset1 with predicate Unset1.unset = EnqAssignment0.unset - clone CreuSat_Logic_LogicLit_Impl1_IdxInTrail as IdxInTrail0 with predicate IdxInTrail0.idx_in_trail = EnqAssignment0.idx_in_trail - clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat0 with predicate Unsat0.unsat = EnqAssignment0.unsat - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy2 with type ModelTy0.modelTy = Model11.modelTy - clone CreuSat_Logic_LogicLit_Impl1_Unset as Unset0 with predicate Unset0.unset = LitSet0.unset, - predicate Unset0.unset = EnqAssignment0.unset - clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_assignments_assignments, - function Model0.model = LitSet0.model - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model10.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model10 with type t = Type.creusat_clause_clause, - function Model0.model = Index1.model - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model9.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model9 with type t = Type.creusat_formula_formula, - function Model0.model = Index0.model - clone CreuSat_Trail_Impl0_EnqAssignment_Interface as EnqAssignment0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_trail_trail - clone CreuSat_Lit_Impl1_LitSet_Interface as LitSet0 - clone CreuSat_Clause_Impl0_Index_Interface as Index1 - clone CreuSat_Formula_Impl0_Index_Interface as Index0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_decision_decisions - clone CreuSat_Trail_Impl0_BacktrackTo_Interface as BacktrackTo0 - clone CreuSat_Trail_Impl0_DecisionLevel_Interface as DecisionLevel0 - let rec cfg learn_unit [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 315 4 315 95] (self : borrowed (Type.creusat_trail_trail)) (cref : usize) (f : Type.creusat_formula_formula) (d : borrowed (Type.creusat_decision_decisions)) : Type.core_result_result () () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 302 4 302 42] Invariant0.invariant' ( * self) f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 303 4 303 48] Invariant1.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 304 4 304 30] Invariant2.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 305 4 305 43] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 306 4 306 50] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) = 1} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 307 4 307 59] Invariant3.invariant' (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 313 4 313 77] LongArePostUnitInner0.long_are_post_unit_inner (Model2.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model3.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 302 4 302 42] Invariant0.invariant' ( ^ self) f } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 303 4 303 48] Invariant1.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 310 4 312 70] match (result) with - | Type.Core_Result_Result_Err _ -> true - | Type.Core_Result_Result_Ok _ -> Sat0.sat (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) 0) (Type.creusat_trail_trail_Trail_assignments ( ^ self)) - end } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 314 4 314 86] LongArePostUnitInner0.long_are_post_unit_inner (Model2.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model3.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } - - = - var _0 : Type.core_result_result () (); - var self_1 : borrowed (Type.creusat_trail_trail); - var cref_2 : usize; - var f_3 : Type.creusat_formula_formula; - var d_4 : borrowed (Type.creusat_decision_decisions); - var _5 : (); - var _6 : bool; - var _7 : usize; - var _8 : Type.creusat_trail_trail; - var _9 : (); - var _10 : borrowed (Type.creusat_trail_trail); - var _11 : Type.creusat_formula_formula; - var _12 : borrowed (Type.creusat_decision_decisions); - var _13 : (); - var _14 : bool; - var _15 : Type.creusat_lit_lit; - var _16 : Type.creusat_lit_lit; - var _17 : Type.creusat_clause_clause; - var _18 : Type.creusat_clause_clause; - var _19 : Type.creusat_formula_formula; - var _20 : usize; - var _21 : Type.creusat_assignments_assignments; - var _22 : Type.creusat_assignments_assignments; - var _23 : (); - var _24 : (); - var _25 : (); - var _26 : borrowed (Type.creusat_trail_trail); - var _27 : Type.creusat_trail_step; - var _28 : Type.creusat_lit_lit; - var _29 : Type.creusat_lit_lit; - var _30 : Type.creusat_clause_clause; - var _31 : Type.creusat_clause_clause; - var _32 : Type.creusat_formula_formula; - var _33 : usize; - var _34 : Type.creusat_trail_reason; - var _35 : usize; - var _36 : Type.creusat_formula_formula; - var _37 : (); - { - self_1 <- self; - cref_2 <- cref; - f_3 <- f; - d_4 <- d; - goto BB0 - } - BB0 { - _8 <- * self_1; - _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 316 11 316 32] DecisionLevel0.decision_level _8); - goto BB1 - } - BB1 { - _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 316 11 316 36] _7 > (0 : usize)); - switch (_6) - | False -> goto BB4 - | _ -> goto BB2 - end - } - BB2 { - _10 <- borrow_mut ( * self_1); - self_1 <- { self_1 with current = ( ^ _10) }; - _11 <- f_3; - _12 <- borrow_mut ( * d_4); - d_4 <- { d_4 with current = ( ^ _12) }; - _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 317 12 317 38] BacktrackTo0.backtrack_to _10 (0 : usize) _11 _12); - goto BB3 - } - BB3 { - assume { Resolve0.resolve d_4 }; - _5 <- (); - goto BB5 - } - BB4 { - assume { Resolve0.resolve d_4 }; - _5 <- (); - goto BB5 - } - BB5 { - _19 <- f_3; - _20 <- cref_2; - _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 321 11 321 18] Index0.index _19 _20); - goto BB6 - } - BB6 { - _17 <- _18; - _16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 321 11 321 21] Index1.index _17 (0 : usize)); - goto BB7 - } - BB7 { - _15 <- _16; - _22 <- Type.creusat_trail_trail_Trail_assignments ( * self_1); - _21 <- _22; - _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 321 11 321 48] LitSet0.lit_set _15 _21); - goto BB8 - } - BB8 { - switch (_14) - | False -> goto BB10 - | _ -> goto BB9 - end - } - BB9 { - assume { Resolve1.resolve self_1 }; - _24 <- (); - _0 <- Type.Core_Result_Result_Err _24; - goto BB14 - } - BB10 { - _13 <- (); - _26 <- borrow_mut ( * self_1); - self_1 <- { self_1 with current = ( ^ _26) }; - _32 <- f_3; - _33 <- cref_2; - _31 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 324 40 324 47] Index0.index _32 _33); - goto BB11 - } - BB11 { - _30 <- _31; - _29 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 324 40 324 50] Index1.index _30 (0 : usize)); - goto BB12 - } - BB12 { - _28 <- _29; - _35 <- cref_2; - _34 <- Type.CreuSat_Trail_Reason_Unit _35; - _27 <- Type.CreuSat_Trail_Step _28 (0 : usize) _34; - _36 <- f_3; - _25 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 324 8 324 103] EnqAssignment0.enq_assignment _26 _27 _36); - goto BB13 - } - BB13 { - assume { Resolve1.resolve self_1 }; - _37 <- (); - _0 <- Type.Core_Result_Result_Ok _37; - goto BB14 - } - BB14 { - return _0 - } - -end -module CreuSat_Solver_Impl0_HandleConflict_Interface - use mach.int.UInt64 - use mach.int.Int - use prelude.Prelude - use mach.int.Int32 - use seq.Seq - use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface as NotSatisfiable0 - clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 - clone CreuSat_Logic_LogicClause_Impl2_Unsat_Interface as Unsat0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant3 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val handle_conflict [@cfg:stackify] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (t : borrowed (Type.creusat_trail_trail)) (cref : usize) (w : borrowed (Type.creusat_watches_watches)) (d : borrowed (Type.creusat_decision_decisions)) : Type.core_option_option bool - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 149 4 149 37] Invariant0.invariant' ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 150 4 150 42] Invariant1.invariant' ( * t) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 151 4 151 42] Invariant2.invariant' ( * w) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 152 4 152 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 153 4 153 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 154 4 154 43] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 155 4 155 57] Unsat0.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref)) (Type.creusat_trail_trail_Trail_assignments ( * t))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 149 4 149 37] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 150 4 150 42] Invariant1.invariant' ( ^ t) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 151 4 151 42] Invariant2.invariant' ( ^ w) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 152 4 152 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 156 4 156 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 157 4 157 29] Equisat0.equisat ( * f) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 158 4 162 7] match (result) with - | Type.Core_Option_Option_Some (False) -> NotSatisfiable0.not_satisfiable ( ^ f) - | Type.Core_Option_Option_Some (True) -> true - | Type.Core_Option_Option_None -> true - end } - -end -module CreuSat_Solver_Impl0_HandleConflict - use mach.int.UInt64 - use mach.int.Int - use prelude.Prelude - use mach.int.Int32 - use seq.Seq - use Type - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner1.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = Invariant7.index_logic, function IndexLogic0.index_logic = SatInner1.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = UnsatInner1.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model7.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model7 with function Model0.model = NotSatisfiable0.model, - function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, - function Model2.model = WatchesInvariantInternal0.model, function Model0.model = UnsatInner0.model, - function Model0.model = Invariant4.model, function Model1.model = UnitAreSat0.model, - function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, - function Model1.model = Invariant8.model, function Model0.model = SatInner2.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = SatInner0.sat_inner, - predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss1.formula_sat_inner - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with predicate Invariant0.invariant' = Invariant6.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner, - predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss1.complete_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, - function Model0.model = Model1.model, function Model3.model = InvariantNoDecisionMirror0.model, - function Model1.model = WatchesInvariantInternal0.model, function Model0.model = LongArePostUnitInner0.model, - function Model0.model = UnitAreSat0.model, function Model0.model = SatInner0.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant8.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with predicate Invariant1.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner1 with predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner, - predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant4.invariant_internal - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtension0.equisat_extension_inner - clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model6.model, axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model6 with function Model0.model = Unsat0.model, - function Model2.model = InvariantNoDecision0.model, function Model0.model = InvariantNoDecisionMirror0.model, - function Model0.model = Invariant5.model, function Model1.model = TrailEntriesAreAssigned0.model, - function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Invariant0.model, - function Model0.model = EquisatExtension0.model - clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with predicate EquisatExtension0.equisat_extension = NotSatisfiable0.equisat_extension - clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, function Model0.model = Invariant3.model, axiom . - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant2.watches_invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable as NotSatisfiable0 - clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 - clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat0 - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant3 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - use mach.int.Int64 - clone CreuSat_Logic_LogicClause_Impl2_Equals as Equals0 with predicate Equals0.equals = Compatible0.equals - clone CreuSat_Logic_LogicFormula_Equisat as Equisat1 with predicate Equisat0.equisat = EquisatCompatibleInner0.equisat - clone CreuSat_Logic_LogicFormula_Compatible as Compatible0 with predicate Compatible0.compatible = EquisatCompatibleInner0.compatible - clone CreuSat_Logic_LogicFormula_EquisatCompatibleInner as EquisatCompatibleInner0 with predicate EquisatCompatibleInner0.equisat_compatible_inner = EquisatCompatible0.equisat_compatible_inner - clone CreuSat_Logic_LogicFormula_Impl2_EquisatCompatible as EquisatCompatible0 with predicate EquisatCompatible0.equisat_compatible = AddUnit0.equisat_compatible - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model11.modelTy, - type ModelTy0.modelTy = Model12.modelTy - clone CreusotContracts_Logic_Model_Impl1_Model as Model12 with type t = Type.creusat_formula_formula, - function Model1.model = AddClause0.model, function Model0.model = HandleLongClause0.model, - function Model1.model = AddUnit0.model - clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_formula_formula, - function Model2.model = AnalyzeConflict0.model - clone CreuSat_Formula_Impl2_SimplifyFormula_Interface as SimplifyFormula0 - clone CreuSat_Formula_Impl2_ReduceDb_Interface as ReduceDb0 - clone CreuSat_Trail_Impl0_LearnUnit_Interface as LearnUnit0 - clone CreuSat_Formula_Impl2_AddUnit_Interface as AddUnit0 - clone CreuSat_Solver_Impl0_HandleLongClause_Interface as HandleLongClause0 - clone CreuSat_Trail_Impl0_BacktrackSafe_Interface as BacktrackSafe0 - clone CreuSat_Formula_Impl2_AddClause_Interface as AddClause0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve4 with type t = Type.creusat_decision_decisions - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve3 with type t = Type.creusat_watches_watches - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_trail_trail - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_formula_formula - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_solver_solver - clone CreuSat_ConflictAnalysis_AnalyzeConflict_Interface as AnalyzeConflict0 - let rec cfg handle_conflict [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 163 4 165 21] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (t : borrowed (Type.creusat_trail_trail)) (cref : usize) (w : borrowed (Type.creusat_watches_watches)) (d : borrowed (Type.creusat_decision_decisions)) : Type.core_option_option bool - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 149 4 149 37] Invariant0.invariant' ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 150 4 150 42] Invariant1.invariant' ( * t) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 151 4 151 42] Invariant2.invariant' ( * w) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 152 4 152 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 153 4 153 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 154 4 154 43] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 155 4 155 57] Unsat0.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref)) (Type.creusat_trail_trail_Trail_assignments ( * t))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 149 4 149 37] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 150 4 150 42] Invariant1.invariant' ( ^ t) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 151 4 151 42] Invariant2.invariant' ( ^ w) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 152 4 152 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 156 4 156 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 157 4 157 29] Equisat0.equisat ( * f) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 158 4 162 7] match (result) with - | Type.Core_Option_Option_Some (False) -> NotSatisfiable0.not_satisfiable ( ^ f) - | Type.Core_Option_Option_Some (True) -> true - | Type.Core_Option_Option_None -> true - end } - - = - var _0 : Type.core_option_option bool; - var self_1 : borrowed (Type.creusat_solver_solver); - var f_2 : borrowed (Type.creusat_formula_formula); - var t_3 : borrowed (Type.creusat_trail_trail); - var cref_4 : usize; - var w_5 : borrowed (Type.creusat_watches_watches); - var d_6 : borrowed (Type.creusat_decision_decisions); - var res_7 : Type.creusat_conflictanalysis_conflict; - var _8 : Type.creusat_formula_formula; - var _9 : Type.creusat_trail_trail; - var _10 : usize; - var _11 : borrowed (Type.creusat_decision_decisions); - var _12 : (); - var _13 : isize; - var _14 : (); - var clause_15 : Type.creusat_clause_clause; - var cref_16 : usize; - var _17 : borrowed (Type.creusat_formula_formula); - var _18 : Type.creusat_clause_clause; - var _19 : Type.creusat_trail_trail; - var _20 : (); - var _21 : Type.core_result_result () (); - var _22 : borrowed (Type.creusat_trail_trail); - var _23 : usize; - var _24 : Type.creusat_formula_formula; - var _25 : borrowed (Type.creusat_decision_decisions); - var _26 : isize; - var _27 : (); - var _28 : (); - var _29 : borrowed (Type.creusat_formula_formula); - var _30 : borrowed (Type.creusat_watches_watches); - var _31 : Type.creusat_trail_trail; - var _32 : borrowed (Type.creusat_solver_solver); - var _33 : (); - var _34 : borrowed (Type.creusat_formula_formula); - var _35 : borrowed (Type.creusat_watches_watches); - var _36 : Type.creusat_trail_trail; - var s_idx_37 : usize; - var clause_38 : Type.creusat_clause_clause; - var _39 : (); - var _40 : borrowed (Type.creusat_solver_solver); - var _41 : borrowed (Type.creusat_formula_formula); - var _42 : borrowed (Type.creusat_trail_trail); - var _43 : borrowed (Type.creusat_watches_watches); - var _44 : borrowed (Type.creusat_decision_decisions); - var _45 : Type.creusat_clause_clause; - var _46 : usize; - var clause_47 : Type.creusat_clause_clause; - var _48 : usize; - var _49 : borrowed (Type.creusat_formula_formula); - var _50 : Type.creusat_clause_clause; - var _51 : borrowed (Type.creusat_watches_watches); - var _52 : Type.creusat_trail_trail; - var _53 : (); - var _54 : borrowed (Type.creusat_trail_trail); - var _55 : Type.creusat_formula_formula; - var _56 : borrowed (Type.creusat_decision_decisions); - { - self_1 <- self; - f_2 <- f; - t_3 <- t; - cref_4 <- cref; - w_5 <- w; - d_6 <- d; - goto BB0 - } - BB0 { - _8 <- * f_2; - _9 <- * t_3; - _10 <- cref_4; - _11 <- borrow_mut ( * d_6); - d_6 <- { d_6 with current = ( ^ _11) }; - res_7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 166 18 166 49] AnalyzeConflict0.analyze_conflict _8 _9 _10 _11); - goto BB1 - } - BB1 { - switch (res_7) - | Type.CreuSat_ConflictAnalysis_Conflict_Ground -> goto BB4 - | Type.CreuSat_ConflictAnalysis_Conflict_Unit _ -> goto BB5 - | Type.CreuSat_ConflictAnalysis_Conflict_Learned _ _ -> goto BB14 - | Type.CreuSat_ConflictAnalysis_Conflict_Restart _ -> goto BB2 - end - } - BB2 { - assume { Resolve0.resolve self_1 }; - clause_47 <- Type.creusat_conflictanalysis_conflict_Restart_0 res_7; - _49 <- borrow_mut ( * f_2); - f_2 <- { f_2 with current = ( ^ _49) }; - _50 <- clause_47; - _51 <- borrow_mut ( * w_5); - w_5 <- { w_5 with current = ( ^ _51) }; - _52 <- * t_3; - _48 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 187 16 187 42] AddClause0.add_clause _49 _50 _51 _52); - goto BB17 - } - BB3 { - assume { Resolve0.resolve self_1 }; - assume { Resolve1.resolve f_2 }; - assume { Resolve2.resolve t_3 }; - assume { Resolve3.resolve w_5 }; - assume { Resolve4.resolve d_6 }; - absurd - } - BB4 { - assume { Resolve0.resolve self_1 }; - assume { Resolve1.resolve f_2 }; - assume { Resolve2.resolve t_3 }; - assume { Resolve3.resolve w_5 }; - assume { Resolve4.resolve d_6 }; - _0 <- Type.Core_Option_Option_Some false; - goto BB23 - } - BB5 { - clause_15 <- Type.creusat_conflictanalysis_conflict_Unit_0 res_7; - _17 <- borrow_mut ( * f_2); - f_2 <- { f_2 with current = ( ^ _17) }; - _18 <- clause_15; - _19 <- * t_3; - cref_16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 175 27 175 48] AddUnit0.add_unit _17 _18 _19); - goto BB6 - } - BB6 { - _22 <- borrow_mut ( * t_3); - t_3 <- { t_3 with current = ( ^ _22) }; - _23 <- cref_16; - _24 <- * f_2; - _25 <- borrow_mut ( * d_6); - d_6 <- { d_6 with current = ( ^ _25) }; - _21 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 176 22 176 46] LearnUnit0.learn_unit _22 _23 _24 _25); - goto BB7 - } - BB7 { - assume { Resolve4.resolve d_6 }; - switch (_21) - | Type.Core_Result_Result_Ok _ -> goto BB8 - | Type.Core_Result_Result_Err _ -> goto BB10 - end - } - BB8 { - _20 <- (); - _29 <- borrow_mut ( * f_2); - f_2 <- { f_2 with current = ( ^ _29) }; - _30 <- borrow_mut ( * w_5); - w_5 <- { w_5 with current = ( ^ _30) }; - _31 <- * t_3; - _32 <- borrow_mut ( * self_1); - self_1 <- { self_1 with current = ( ^ _32) }; - _28 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 180 16 180 38] ReduceDb0.reduceDB _29 _30 _31 _32); - goto BB11 - } - BB9 { - assume { Resolve0.resolve self_1 }; - assume { Resolve1.resolve f_2 }; - assume { Resolve2.resolve t_3 }; - assume { Resolve3.resolve w_5 }; - absurd - } - BB10 { - assume { Resolve0.resolve self_1 }; - assume { Resolve1.resolve f_2 }; - assume { Resolve2.resolve t_3 }; - assume { Resolve3.resolve w_5 }; - _0 <- Type.Core_Option_Option_Some true; - goto BB22 - } - BB11 { - assume { Resolve0.resolve self_1 }; - _34 <- borrow_mut ( * f_2); - f_2 <- { f_2 with current = ( ^ _34) }; - _35 <- borrow_mut ( * w_5); - w_5 <- { w_5 with current = ( ^ _35) }; - _36 <- * t_3; - assume { Resolve2.resolve t_3 }; - _33 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 181 16 181 40] SimplifyFormula0.simplify_formula _34 _35 _36); - goto BB12 - } - BB12 { - assume { Resolve1.resolve f_2 }; - assume { Resolve3.resolve w_5 }; - _12 <- (); - goto BB13 - } - BB13 { - goto BB20 - } - BB14 { - s_idx_37 <- Type.creusat_conflictanalysis_conflict_Learned_0 res_7; - clause_38 <- Type.creusat_conflictanalysis_conflict_Learned_1 res_7; - _40 <- borrow_mut ( * self_1); - self_1 <- { self_1 with current = ( ^ _40) }; - _41 <- borrow_mut ( * f_2); - f_2 <- { f_2 with current = ( ^ _41) }; - _42 <- borrow_mut ( * t_3); - t_3 <- { t_3 with current = ( ^ _42) }; - _43 <- borrow_mut ( * w_5); - w_5 <- { w_5 with current = ( ^ _43) }; - _44 <- borrow_mut ( * d_6); - d_6 <- { d_6 with current = ( ^ _44) }; - _45 <- clause_38; - _46 <- s_idx_37; - _39 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 184 16 184 66] HandleLongClause0.handle_long_clause _40 _41 _42 _43 _44 _45 _46); - goto BB15 - } - BB15 { - assume { Resolve0.resolve self_1 }; - assume { Resolve1.resolve f_2 }; - assume { Resolve2.resolve t_3 }; - assume { Resolve3.resolve w_5 }; - assume { Resolve4.resolve d_6 }; - _12 <- (); - goto BB16 - } - BB16 { - goto BB20 - } - BB17 { - assume { Resolve3.resolve w_5 }; - _54 <- borrow_mut ( * t_3); - t_3 <- { t_3 with current = ( ^ _54) }; - _55 <- * f_2; - assume { Resolve1.resolve f_2 }; - _56 <- borrow_mut ( * d_6); - d_6 <- { d_6 with current = ( ^ _56) }; - _53 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 188 16 188 41] BacktrackSafe0.backtrack_safe _54 (0 : usize) _55 _56); - goto BB18 - } - BB18 { - assume { Resolve2.resolve t_3 }; - assume { Resolve4.resolve d_6 }; - _12 <- (); - goto BB19 - } - BB19 { - goto BB20 - } - BB20 { - _0 <- Type.Core_Option_Option_None; - goto BB21 - } - BB21 { - goto BB25 - } - BB22 { - goto BB23 - } - BB23 { - goto BB24 - } - BB24 { - goto BB25 - } - BB25 { - return _0 - } - -end -module CreuSat_Util_MinLog_Interface - use mach.int.Int - function min_log (a : int) (b : int) : int + use mach.int.Int32 + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic_Interface as IsPositiveLogic0 + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 + function to_watchidx_logic [@inline:trivial] [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 33 4 33 41] (self : Type.creusat_lit_lit) : int + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 34 8 34 91] IndexLogic0.index_logic self * 2 + (if IsPositiveLogic0.is_positive_logic self then + 0 + else + 1 + ) end -module CreuSat_Util_MinLog +module CreuSat_Lit_Impl1_ToWatchidx_Interface use mach.int.Int - function min_log [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 88 0 88 33] (a : int) (b : int) : int = - [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 87 0 87 8] if a <= b then a else b + use prelude.Prelude + use mach.int.UInt64 + use mach.int.Int32 + use Type + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic_Interface as IsPositiveLogic0 + clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic_Interface as ToWatchidxLogic0 + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 + val to_watchidx [@cfg:stackify] (self : Type.creusat_lit_lit) : usize + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 89 4 89 51] IndexLogic0.index_logic self < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 90 4 90 51] UInt64.to_int result = ToWatchidxLogic0.to_watchidx_logic self } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 91 4 91 96] UInt64.to_int result = IndexLogic0.index_logic self * 2 + (if IsPositiveLogic0.is_positive_logic self then + 0 + else + 1 + ) } + end -module CreuSat_Util_Min_Interface +module CreuSat_Lit_Impl1_PhaseSaved_Interface use mach.int.UInt64 + use seq.Seq use mach.int.Int + use prelude.UInt8 + use mach.int.Int32 use prelude.Prelude - clone CreuSat_Util_MinLog_Interface as MinLog0 - val min [@cfg:stackify] (a : usize) (b : usize) : usize - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 96 0 96 38] UInt64.to_int result = MinLog0.min_log (UInt64.to_int a) (UInt64.to_int b) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 97 0 97 38] UInt64.to_int a <= UInt64.to_int b -> UInt64.to_int result = UInt64.to_int a } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 98 0 98 37] UInt64.to_int b < UInt64.to_int a -> UInt64.to_int result = UInt64.to_int b } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 99 0 99 42] UInt64.to_int result <= UInt64.to_int b && UInt64.to_int result <= UInt64.to_int a } + use Type + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic_Interface as IsPositiveLogic0 + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_assignments_assignments, + type ModelTy0.modelTy = ModelTy0.modelTy + val phase_saved [@cfg:stackify] (idx : usize) (assignments : Type.creusat_assignments_assignments) : Type.creusat_lit_lit + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 105 4 105 44] UInt64.to_int idx < Seq.length (Model0.model assignments)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 106 4 106 44] IndexLogic0.index_logic result = UInt64.to_int idx } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 107 4 107 74] IsPositiveLogic0.is_positive_logic result = (UInt8.to_int (Seq.get (Model0.model assignments) (UInt64.to_int idx)) = 1) } + +end +module CreuSat_Lit_Impl2_Eq_Interface + use prelude.Prelude + use Type + val eq [@cfg:stackify] (self : Type.creusat_lit_lit) (other : Type.creusat_lit_lit) : bool + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 120 4 120 41] result = (self = other) } + +end +module CreuSat_Lit_Impl3_Not_Interface + use Type + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic_Interface as IsPositiveLogic0 + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 + val not' [@cfg:stackify] (self : Type.creusat_lit_lit) : Type.creusat_lit_lit + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 132 4 132 58] IndexLogic0.index_logic result = IndexLogic0.index_logic self } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/lit.rs" 133 4 133 71] IsPositiveLogic0.is_positive_logic result = (not IsPositiveLogic0.is_positive_logic self) } end -module CreuSat_Util_Min +module CreuSat_Logic_Logic_Inner_Impl0_SatisfiesClause_Interface + use Type + use seq.Seq + predicate satisfies_clause (self : Type.creusat_logic_logic_inner_m) (cl : Seq.seq (Type.creusat_lit_lit)) +end +module CreuSat_Logic_Logic_Inner_Impl0_SatisfiesClause + use Type + use seq.Seq + use mach.int.Int + use mach.int.Int32 use mach.int.UInt64 + use map.Map + predicate satisfies_clause [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 17 8 17 55] (self : Type.creusat_logic_logic_inner_m) (cl : Seq.seq (Type.creusat_lit_lit)) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 18 12 20 13] exists i : (int) . 0 <= i /\ i < Seq.length cl /\ Map.get (Type.creusat_logic_logic_inner_m_M_0 self) (UInt64.to_int (Type.creusat_lit_lit_Lit_idx (Seq.get cl i))) = Type.creusat_lit_lit_Lit_polarity (Seq.get cl i) +end +module CreuSat_Logic_Logic_Inner_Impl0_Satisfies_Interface + use Type + use seq.Seq + predicate satisfies (self : Type.creusat_logic_logic_inner_m) (fml : Seq.seq (Seq.seq (Type.creusat_lit_lit))) +end +module CreuSat_Logic_Logic_Inner_Impl0_Satisfies + use Type + use seq.Seq use mach.int.Int - use prelude.Prelude - clone CreuSat_Util_MinLog as MinLog0 - let rec cfg min [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 100 0 100 39] (a : usize) (b : usize) : usize - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 96 0 96 38] UInt64.to_int result = MinLog0.min_log (UInt64.to_int a) (UInt64.to_int b) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 97 0 97 38] UInt64.to_int a <= UInt64.to_int b -> UInt64.to_int result = UInt64.to_int a } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 98 0 98 37] UInt64.to_int b < UInt64.to_int a -> UInt64.to_int result = UInt64.to_int b } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 99 0 99 42] UInt64.to_int result <= UInt64.to_int b && UInt64.to_int result <= UInt64.to_int a } + use mach.int.Int32 + clone CreuSat_Logic_Logic_Inner_Impl0_SatisfiesClause_Interface as SatisfiesClause0 + predicate satisfies [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 24 8 24 54] (self : Type.creusat_logic_logic_inner_m) (fml : Seq.seq (Seq.seq (Type.creusat_lit_lit))) = - var _0 : usize; - var a_1 : usize; - var b_2 : usize; - var _3 : bool; - var _4 : usize; - var _5 : usize; - { - a_1 <- a; - b_2 <- b; - goto BB0 - } - BB0 { - _4 <- a_1; - _5 <- b_2; - _3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 101 7 101 13] _4 <= _5); - switch (_3) - | False -> goto BB2 - | _ -> goto BB1 - end - } - BB1 { - _0 <- a_1; - goto BB3 - } - BB2 { - _0 <- b_2; - goto BB3 - } - BB3 { - return _0 - } - + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 25 12 27 13] forall c : (int) . 0 <= c /\ c < Seq.length fml -> SatisfiesClause0.satisfies_clause self (Seq.get fml c) end -module CreuSat_Util_MaxLog_Interface +module CreuSat_Logic_LogicFormula_Impl1_RealModel_Interface + use Type + use seq.Seq + function real_model (self : Type.creusat_formula_formula) : Seq.seq (Seq.seq (Type.creusat_lit_lit)) +end +module CreuSat_Logic_LogicFormula_Impl1_RealModel + use Type + use seq.Seq + function real_model [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 22 4 22 44] (self : Type.creusat_formula_formula) : Seq.seq (Seq.seq (Type.creusat_lit_lit)) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 23 8 23 18] Seq.empty +end +module CreuSat_Logic_Logic_Inner_Impl1_Unsat2_Interface + use Type + predicate unsat2 (self : Type.creusat_formula_formula) +end +module CreuSat_Logic_Logic_Inner_Impl1_Unsat2 + use Type + clone CreuSat_Logic_Logic_Inner_Impl0_Satisfies_Interface as Satisfies0 + clone CreuSat_Logic_LogicFormula_Impl1_RealModel_Interface as RealModel0 + predicate unsat2 [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 34 8 34 31] (self : Type.creusat_formula_formula) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 35 12 35 80] forall m : (Type.creusat_logic_logic_inner_m) . Satisfies0.satisfies m (RealModel0.real_model self) -> false +end +module CreuSat_Logic_Logic_Inner_Impl1_Sat2_Interface + use Type + predicate sat2 (self : Type.creusat_formula_formula) +end +module CreuSat_Logic_Logic_Inner_Impl1_Sat2 + use Type + clone CreuSat_Logic_Logic_Inner_Impl0_Satisfies_Interface as Satisfies0 + clone CreuSat_Logic_LogicFormula_Impl1_RealModel_Interface as RealModel0 + predicate sat2 [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 39 8 39 29] (self : Type.creusat_formula_formula) + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 40 12 40 70] exists m : (Type.creusat_logic_logic_inner_m) . Satisfies0.satisfies m (RealModel0.real_model self) +end +module CreuSat_Logic_Logic_Inner_Impl1_Equisat2_Interface + use Type + predicate equisat2 (self : Type.creusat_formula_formula) (f : Type.creusat_formula_formula) +end +module CreuSat_Logic_Logic_Inner_Impl1_Equisat2 + use Type + clone CreuSat_Logic_Logic_Inner_Impl0_Satisfies_Interface as Satisfies0 + clone CreuSat_Logic_LogicFormula_Impl1_RealModel_Interface as RealModel0 + predicate equisat2 [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 44 8 44 42] (self : Type.creusat_formula_formula) (f : Type.creusat_formula_formula) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 45 12 47 13] forall m : (Type.creusat_logic_logic_inner_m) . Satisfies0.satisfies m (RealModel0.real_model self) -> Satisfies0.satisfies m (RealModel0.real_model f) /\ Satisfies0.satisfies m (RealModel0.real_model f) -> Satisfies0.satisfies m (RealModel0.real_model self) +end +module CreuSat_Logic_Logic_Pos_Interface use mach.int.Int - function max_log (a : int) (b : int) : int + use prelude.Prelude + use prelude.UInt8 + function pos (_ : ()) : uint8 end -module CreuSat_Util_MaxLog +module CreuSat_Logic_Logic_Pos use mach.int.Int - function max_log [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 109 0 109 33] (a : int) (b : int) : int = - [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 108 0 108 8] if a >= b then a else b + use prelude.Prelude + use prelude.UInt8 + function pos [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 56 0 56 25] (_ : ()) : uint8 = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 57 4 57 7] (1 : uint8) end -module CreuSat_Util_Max_Interface - use mach.int.UInt64 +module CreuSat_Logic_Logic_Neg_Interface use mach.int.Int use prelude.Prelude - clone CreuSat_Util_MaxLog_Interface as MaxLog0 - val max [@cfg:stackify] (a : usize) (b : usize) : usize - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 117 0 117 38] UInt64.to_int result = MaxLog0.max_log (UInt64.to_int a) (UInt64.to_int b) } - + use prelude.UInt8 + function neg (_ : ()) : uint8 end -module CreuSat_Util_Max - use mach.int.UInt64 +module CreuSat_Logic_Logic_Neg use mach.int.Int use prelude.Prelude - clone CreuSat_Util_MaxLog as MaxLog0 - let rec cfg max [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 118 0 118 39] (a : usize) (b : usize) : usize - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 117 0 117 38] UInt64.to_int result = MaxLog0.max_log (UInt64.to_int a) (UInt64.to_int b) } - - = - var _0 : usize; - var a_1 : usize; - var b_2 : usize; - var _3 : bool; - var _4 : usize; - var _5 : usize; - { - a_1 <- a; - b_2 <- b; - goto BB0 - } - BB0 { - _4 <- a_1; - _5 <- b_2; - _3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 119 7 119 13] _4 >= _5); - switch (_3) - | False -> goto BB2 - | _ -> goto BB1 - end - } - BB1 { - _0 <- a_1; - goto BB3 - } - BB2 { - _0 <- b_2; - goto BB3 - } - BB3 { - return _0 - } - + use prelude.UInt8 + function neg [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 61 0 61 25] (_ : ()) : uint8 = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 62 4 62 7] (0 : uint8) end -module CreuSat_UnitProp_Swap_Interface - use mach.int.UInt64 - use seq.Seq +module CreuSat_Logic_Logic_BoolToAssignedstate_Interface + use prelude.UInt8 use mach.int.Int use mach.int.Int32 - use seq.Permut use prelude.Prelude - use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 - clone CreuSat_Logic_LogicLit_Impl1_SatInner_Interface as SatInner0 - clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model2 - clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val swap [@cfg:stackify] (f : borrowed (Type.creusat_formula_formula)) (trail : Type.creusat_trail_trail) (watches : Type.creusat_watches_watches) (cref : usize) (j : usize) (k : usize) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 52 0 52 33] Invariant0.invariant' ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 53 0 53 39] Invariant1.invariant' trail ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 54 0 54 41] Invariant2.invariant' watches ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 55 0 55 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) >= 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 56 0 56 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 57 0 57 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) > UInt64.to_int j} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 58 0 58 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) > UInt64.to_int k} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 59 0 59 69] not SatInner0.sat_inner (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) 0) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 52 0 52 33] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 53 0 53 39] Invariant1.invariant' trail ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 54 0 54 41] Invariant2.invariant' watches ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 61 0 61 78] Permut.exchange (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref))) (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) (UInt64.to_int j) (UInt64.to_int k) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 62 0 62 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 63 0 63 55] Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) = Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 65 0 65 25] Equisat0.equisat ( * f) ( ^ f) } + function bool_to_assignedstate (b : bool) : uint8 +end +module CreuSat_Logic_Logic_BoolToAssignedstate + use prelude.UInt8 + use mach.int.Int + use mach.int.Int32 + use prelude.Prelude + function bool_to_assignedstate [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 80 0 80 54] (b : bool) : uint8 = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 77 0 77 8] if b then (1 : uint8) else (0 : uint8) + axiom bool_to_assignedstate_spec : forall b : bool . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 79 0 79 31] not b -> UInt8.to_int (bool_to_assignedstate b) = 0) && ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 78 0 78 30] b -> UInt8.to_int (bool_to_assignedstate b) = 1) +end +module CreuSat_Logic_Logic_FlipV_Interface + use mach.int.Int + use prelude.Prelude + use prelude.UInt8 + function flip_v (v : uint8) : uint8 +end +module CreuSat_Logic_Logic_FlipV + use mach.int.Int + use prelude.Prelude + use prelude.UInt8 + use mach.int.Int32 + function flip_v [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 89 0 89 44] (v : uint8) : uint8 = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic.rs" 90 4 98 5] if UInt8.to_int v = 0 then + (1 : uint8) + else + if UInt8.to_int v = 1 then (0 : uint8) else v end -module CreuSat_UnitProp_Swap - use mach.int.UInt64 +module CreuSat_Logic_LogicAssignments_CompatibleInner_Interface use seq.Seq use mach.int.Int - use mach.int.Int32 - use seq.Permut use prelude.Prelude - use Type use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = SatInner0.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = Invariant3.index_logic, function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model1.model = InvariantMirror0.model, - function Model0.model = FormulaInvariant0.model, function Model2.model = WatchesInvariantInternal0.model, - function Model0.model = ClausePostWithRegardsToInner0.model, function Model0.model = Invariant5.model, - function Model1.model = UnitAreSat0.model, function Model0.model = LitIdxIn0.model, - function Model1.model = Invariant7.model, function Model0.model = SatInner2.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = LongArePostUnitInner0.model, - function Model0.model = InvariantMirror0.model, function Model0.model = Model4.model, - function Model3.model = InvariantNoDecisionMirror0.model, function Model1.model = WatchesInvariantInternal0.model, - function Model0.model = UnitAreSat0.model, function Model0.model = SatInner1.model, - function Model0.model = Invariant7.model, function Model0.model = LitNotInLessInner0.model, axiom . - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant', - predicate Invariant0.invariant' = Invariant4.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant5.invariant_internal - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant4.invariant' - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner1 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model2.model, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model2.model = InvariantNoDecision0.model, - function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant6.model, - function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = CrefsInRange0.invariant', - predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant2.watches_invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model4 with function Model0.model = Invariant0.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_lit_lit, - type ModelTy0.modelTy = Model11.modelTy - clone CreusotContracts_Std1_Slice_Impl0_Model as Model10 with type t = Type.creusat_lit_lit, - function Model0.model = DerefMut0.model, function Model1.model = Swap0.model, function Model0.model = Model11.model, - axiom . - clone CreusotContracts_Logic_Model_Impl1_Model as Model11 with type t = seq (Type.creusat_lit_lit), - function Model0.model = Swap0.model - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_clause_clause - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause, - type Output0.output = IndexMut0.output - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.creusat_clause_clause, - predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause, - predicate HasValue0.has_value = IndexMut0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause, - predicate InBounds0.in_bounds = IndexMut0.in_bounds - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = seq (Type.creusat_lit_lit) - clone Core_Slice_Impl0_Swap_Interface as Swap0 with type t = Type.creusat_lit_lit - clone Alloc_Vec_Impl11_DerefMut_Interface as DerefMut0 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_clause_clause - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.creusat_clause_clause, type i = usize, - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula - let rec cfg swap [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 66 0 66 91] (f : borrowed (Type.creusat_formula_formula)) (trail : Type.creusat_trail_trail) (watches : Type.creusat_watches_watches) (cref : usize) (j : usize) (k : usize) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 52 0 52 33] Invariant0.invariant' ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 53 0 53 39] Invariant1.invariant' trail ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 54 0 54 41] Invariant2.invariant' watches ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 55 0 55 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) >= 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 56 0 56 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 57 0 57 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) > UInt64.to_int j} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 58 0 58 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) > UInt64.to_int k} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 59 0 59 69] not SatInner0.sat_inner (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) 0) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 52 0 52 33] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 53 0 53 39] Invariant1.invariant' trail ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 54 0 54 41] Invariant2.invariant' watches ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 61 0 61 78] Permut.exchange (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref))) (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) (UInt64.to_int j) (UInt64.to_int k) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 62 0 62 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 63 0 63 55] Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) = Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 65 0 65 25] Equisat0.equisat ( * f) ( ^ f) } - - = - var _0 : (); - var f_1 : borrowed (Type.creusat_formula_formula); - var trail_2 : Type.creusat_trail_trail; - var watches_3 : Type.creusat_watches_watches; - var cref_4 : usize; - var j_5 : usize; - var k_6 : usize; - ghost var old_f_7 : borrowed (Type.creusat_formula_formula); - var _8 : (); - var _9 : (); - var _10 : (); - var _11 : (); - var _12 : borrowed (seq (Type.creusat_lit_lit)); - var _13 : borrowed (seq (Type.creusat_lit_lit)); - var _14 : borrowed (Type.alloc_vec_vec (Type.creusat_lit_lit) (Type.alloc_alloc_global)); - var _15 : borrowed (Type.creusat_clause_clause); - var _16 : borrowed (Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global)); - var _17 : usize; - var _18 : usize; - var _19 : usize; - var _20 : (); - var _21 : (); - var _22 : (); - var _23 : (); - var _24 : (); - var _25 : (); - { - f_1 <- f; - trail_2 <- trail; - watches_3 <- watches; - cref_4 <- cref; - j_5 <- j; - k_6 <- k; - goto BB0 - } - BB0 { - _8 <- (); - old_f_7 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 67 16 67 28] f_1); - goto BB1 - } - BB1 { - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 68 4 68 67] NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) }; - _9 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 69 4 69 89] LongArePostUnitInner0.long_are_post_unit_inner (Model3.model (Type.creusat_trail_trail_Trail_trail trail_2)) ( * f_1) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail_2)) && true }; - _10 <- (); - _16 <- borrow_mut (Type.creusat_formula_formula_Formula_clauses ( * f_1)); - f_1 <- { f_1 with current = (let Type.CreuSat_Formula_Formula a b = * f_1 in Type.CreuSat_Formula_Formula ( ^ _16) b) }; - assume { Resolve0.resolve f_1 }; - _17 <- cref_4; - _15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 71 4 71 19] IndexMut0.index_mut _16 _17); - goto BB2 - } - BB2 { - _14 <- borrow_mut (Type.creusat_clause_clause_Clause_lits ( * _15)); - _15 <- { _15 with current = (let Type.CreuSat_Clause_Clause a b c d = * _15 in Type.CreuSat_Clause_Clause a b c ( ^ _14)) }; - assume { Resolve1.resolve _15 }; - _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 71 4 71 35] DerefMut0.deref_mut _14); - goto BB3 - } - BB3 { - _12 <- borrow_mut ( * _13); - _13 <- { _13 with current = ( ^ _12) }; - _18 <- j_5; - _19 <- k_6; - _11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 71 4 71 35] Swap0.swap _12 _18 _19); - goto BB4 - } - BB4 { - assume { Resolve2.resolve _13 }; - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 72 4 72 84] Permut.exchange (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * old_f_7))) (UInt64.to_int cref_4))) (UInt64.to_int j_5) (UInt64.to_int k_6) }; - _20 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 73 4 77 6] forall i : (int) . 0 <= i && i < Seq.length (Model3.model (Type.creusat_trail_trail_Trail_trail trail_2)) -> match (Type.creusat_trail_step_Step_reason (Seq.get (Model3.model (Type.creusat_trail_trail_Trail_trail trail_2)) i)) with - | Type.CreuSat_Trail_Reason_Long cref2 -> UInt64.to_int cref_4 <> UInt64.to_int cref2 - | _ -> true - end }; - _21 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 78 4 78 73] VarsInRangeInner0.vars_in_range_inner (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f_1))) }; - _22 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 79 4 79 67] NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) }; - _23 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 80 4 80 81] LongArePostUnitInner0.long_are_post_unit_inner (Model3.model (Type.creusat_trail_trail_Trail_trail trail_2)) ( * f_1) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail_2)) }; - _24 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 81 4 81 51] CrefsInRange0.crefs_in_range (Model3.model (Type.creusat_trail_trail_Trail_trail trail_2)) ( * f_1) }; - _25 <- (); - _0 <- (); - return _0 - } - + predicate compatible_inner (a : Seq.seq uint8) (a2 : Seq.seq uint8) end -module CreuSat_Watches_UpdateWatch_Interface - use mach.int.UInt64 +module CreuSat_Logic_LogicAssignments_CompatibleInner + use seq.Seq use mach.int.Int use prelude.Prelude + use prelude.UInt8 use mach.int.Int32 - use seq.Seq - use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant1.invariant_mirror - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model3 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic_Interface as ToWatchidxLogic0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model2 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant1 with axiom . - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant0 - val update_watch [@cfg:stackify] (f : Type.creusat_formula_formula) (trail : Type.creusat_trail_trail) (watches : borrowed (Type.creusat_watches_watches)) (cref : usize) (j : usize) (k : usize) (lit : Type.creusat_lit_lit) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 30 0 30 41] Invariant0.invariant' ( * watches) f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 31 0 31 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 32 0 32 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 33 0 33 26] Invariant1.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 34 0 34 32] Invariant2.invariant' trail f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 35 0 35 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 36 0 36 57] 0 <= UInt64.to_int k && UInt64.to_int k < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 37 0 37 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) >= 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 38 0 38 70] Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 30 0 30 41] Invariant0.invariant' ( ^ watches) f } + clone CreuSat_Logic_Logic_Unset_Interface as Unset0 + predicate compatible_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 25 0 25 78] (a : Seq.seq uint8) (a2 : Seq.seq uint8) + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 26 4 29 5] Seq.length a = Seq.length a2 /\ (forall i : (int) . 0 <= i /\ i < Seq.length a -> Unset0.unset (Seq.get a i) \/ Seq.get a i = Seq.get a2 i) end -module CreuSat_Watches_UpdateWatch - use mach.int.UInt64 +module CreuSat_Logic_LogicAssignments_CompatibleCompleteInner_Interface + use seq.Seq use mach.int.Int use prelude.Prelude - use mach.int.Int32 + use prelude.UInt8 + predicate compatible_complete_inner (a : Seq.seq uint8) (a2 : Seq.seq uint8) +end +module CreuSat_Logic_LogicAssignments_CompatibleCompleteInner use seq.Seq - use Type + use mach.int.Int + use prelude.Prelude use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = ToWatchidxLogic0.index_logic, - function IndexLogic0.index_logic = ToNegWatchidxLogic0.index_logic, - function IndexLogic0.index_logic = WatchValid0.index_logic, - function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = Invariant6.index_logic, function IndexLogic0.index_logic = SatInner0.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = ToWatchidxLogic0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = ToNegWatchidxLogic0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model1.model = WatchValid0.model, - function Model2.model = WatchesInvariantInternal0.model, function Model1.model = InvariantMirror0.model, - function Model0.model = FormulaInvariant0.model, function Model0.model = Invariant3.model, - function Model1.model = UnitAreSat0.model, function Model0.model = LitIdxIn0.model, - function Model0.model = ClausePostWithRegardsToInner0.model, function Model1.model = Invariant7.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = WatcherCrefsInRange0.model, - function Model0.model = LemmaPushMaintainsWatcherInvariant0.model, function Model0.model = WatchValid0.model, - function Model1.model = WatchesInvariantInternal0.model, function Model0.model = InvariantMirror0.model, - function Model0.model = Model4.model, function Model3.model = InvariantNoDecisionMirror0.model, - function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model8.model, axiom . - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model8 with function Model2.model = InvariantNoDecision0.model, - function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant4.model, - function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant2.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant2.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant2.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant2.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant1.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model4 with function Model0.model = Invariant1.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant1.invariant_mirror - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant0.watches_invariant_internal - clone CreuSat_Logic_LogicWatches_WatchValid as WatchValid0 - clone CreuSat_Logic_LogicWatches_WatcherCrefsInRange as WatcherCrefsInRange0 with predicate WatcherCrefsInRange0.watcher_crefs_in_range = LemmaPopWatchMaintainsWatcherInvariant0.watcher_crefs_in_range, - predicate WatcherCrefsInRange0.watcher_crefs_in_range = LemmaPushMaintainsWatcherInvariant0.watcher_crefs_in_range - clone CreuSat_Logic_LogicWatches_LemmaPushMaintainsWatcherInvariant as LemmaPushMaintainsWatcherInvariant0 with axiom . - clone CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic as ToNegWatchidxLogic0 - clone CreuSat_Logic_LogicUtil_Pop as Pop0 with type t = Type.creusat_watches_watcher, - function Pop0.pop = LemmaPopWatchMaintainsWatcherInvariant0.pop, axiom . - clone CreuSat_Logic_LogicWatches_LemmaPopWatchMaintainsWatcherInvariant as LemmaPopWatchMaintainsWatcherInvariant0 with axiom . - clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic as ToWatchidxLogic0 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, function Model0.model = Invariant0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant1 with axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant0 - use mach.int.Int64 - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy3 with type ModelTy0.modelTy = Model13.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model13 with type t = Type.creusat_clause_clause, - function Model0.model = Index2.model - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy2 with type ModelTy0.modelTy = Model12.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model12 with type t = Type.creusat_formula_formula, - function Model0.model = Index1.model - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_watches_watcher, - type ModelTy0.modelTy = Model11.modelTy - clone CreusotContracts_Std1_Slice_Impl0_Model as Model10 with type t = Type.creusat_watches_watcher, - function Model0.model = DerefMut0.model, function Model1.model = Swap0.model, function Model0.model = Model11.model, - axiom . - clone CreusotContracts_Logic_Model_Impl1_Model as Model11 with type t = seq (Type.creusat_watches_watcher), - function Model0.model = Swap0.model - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type Output0.output = Index0.output, type Output0.output = IndexMut0.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - predicate HasValue0.has_value = Index0.has_value, predicate HasValue0.has_value = IndexMut0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - predicate InBounds0.in_bounds = Index0.in_bounds, predicate InBounds0.in_bounds = IndexMut0.in_bounds - clone Alloc_Vec_Impl1_Push_Interface as Push0 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global - clone CreuSat_Lit_Impl1_ToNegWatchidx_Interface as ToNegWatchidx0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_watches_watches - clone Alloc_Vec_Impl1_Pop_Interface as Pop1 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global - clone CreuSat_Clause_Impl0_Index_Interface as Index2 - clone CreuSat_Formula_Impl0_Index_Interface as Index1 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = seq (Type.creusat_watches_watcher) - clone Core_Slice_Impl0_Swap_Interface as Swap0 with type t = Type.creusat_watches_watcher - clone Alloc_Vec_Impl11_DerefMut_Interface as DerefMut0 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type i = usize, type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type i = usize, type a = Type.alloc_alloc_global - clone CreuSat_Lit_Impl1_ToWatchidx_Interface as ToWatchidx0 - let rec cfg update_watch [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 39 0 39 113] (f : Type.creusat_formula_formula) (trail : Type.creusat_trail_trail) (watches : borrowed (Type.creusat_watches_watches)) (cref : usize) (j : usize) (k : usize) (lit : Type.creusat_lit_lit) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 30 0 30 41] Invariant0.invariant' ( * watches) f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 31 0 31 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 32 0 32 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 33 0 33 26] Invariant1.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 34 0 34 32] Invariant2.invariant' trail f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 35 0 35 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 36 0 36 57] 0 <= UInt64.to_int k && UInt64.to_int k < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 37 0 37 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) >= 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 38 0 38 70] Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 30 0 30 41] Invariant0.invariant' ( ^ watches) f } + clone CreuSat_Logic_LogicAssignments_CompleteInner_Interface as CompleteInner0 + clone CreuSat_Logic_LogicAssignments_CompatibleInner_Interface as CompatibleInner0 + predicate compatible_complete_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 40 0 40 87] (a : Seq.seq uint8) (a2 : Seq.seq uint8) = - var _0 : (); - var f_1 : Type.creusat_formula_formula; - var trail_2 : Type.creusat_trail_trail; - var watches_3 : borrowed (Type.creusat_watches_watches); - var cref_4 : usize; - var j_5 : usize; - var k_6 : usize; - var lit_7 : Type.creusat_lit_lit; - var watchidx_8 : usize; - var _9 : Type.creusat_lit_lit; - var end'_10 : usize; - var _11 : usize; - var _12 : Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global); - var _13 : Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global); - var _14 : Type.alloc_vec_vec (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)) (Type.alloc_alloc_global); - var _15 : usize; - var _16 : (); - var _17 : borrowed (seq (Type.creusat_watches_watcher)); - var _18 : borrowed (seq (Type.creusat_watches_watcher)); - var _19 : borrowed (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)); - var _20 : borrowed (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)); - var _21 : borrowed (Type.alloc_vec_vec (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)) (Type.alloc_alloc_global)); - var _22 : usize; - var _23 : usize; - var _24 : usize; - var curr_lit_25 : Type.creusat_lit_lit; - var _26 : Type.creusat_lit_lit; - var _27 : Type.creusat_clause_clause; - var _28 : Type.creusat_clause_clause; - var _29 : Type.creusat_formula_formula; - var _30 : usize; - var _31 : usize; - var _32 : (); - ghost var old_w_33 : borrowed (Type.creusat_watches_watches); - var _34 : (); - var _35 : (); - var _36 : Type.core_option_option (Type.creusat_watches_watcher); - var _37 : borrowed (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)); - var _38 : borrowed (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)); - var _39 : borrowed (Type.alloc_vec_vec (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)) (Type.alloc_alloc_global)); - var _40 : usize; - var _41 : isize; - var w_42 : Type.creusat_watches_watcher; - var _43 : (); - var _44 : (); - var _45 : (); - var _46 : (); - var _47 : (); - var _48 : (); - var _49 : (); - var _50 : (); - var watch_lit_51 : usize; - var _52 : Type.creusat_lit_lit; - var _53 : (); - var _54 : borrowed (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)); - var _55 : borrowed (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)); - var _56 : borrowed (Type.alloc_vec_vec (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)) (Type.alloc_alloc_global)); - var _57 : usize; - var _58 : Type.creusat_watches_watcher; - var _59 : (); - var _60 : (); - var _61 : (); - var _62 : (); - var _63 : (); - { - f_1 <- f; - trail_2 <- trail; - watches_3 <- watches; - cref_4 <- cref; - j_5 <- j; - k_6 <- k; - lit_7 <- lit; - goto BB0 - } - BB0 { - _9 <- lit_7; - watchidx_8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 40 19 40 36] ToWatchidx0.to_watchidx _9); - goto BB1 - } - BB1 { - _14 <- Type.creusat_watches_watches_Watches_watches ( * watches_3); - _15 <- watchidx_8; - _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 41 14 41 39] Index0.index _14 _15); - goto BB2 - } - BB2 { - _12 <- _13; - _11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 41 14 41 45] Len0.len _12); - goto BB3 - } - BB3 { - end'_10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 41 14 41 49] _11 - (1 : usize)); - _21 <- borrow_mut (Type.creusat_watches_watches_Watches_watches ( * watches_3)); - watches_3 <- { watches_3 with current = (let Type.CreuSat_Watches_Watches a = * watches_3 in Type.CreuSat_Watches_Watches ( ^ _21)) }; - _22 <- watchidx_8; - _20 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 42 4 42 29] IndexMut0.index_mut _21 _22); - goto BB4 - } - BB4 { - _19 <- borrow_mut ( * _20); - _20 <- { _20 with current = ( ^ _19) }; - assume { Resolve0.resolve _20 }; - _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 42 4 42 42] DerefMut0.deref_mut _19); - goto BB5 - } - BB5 { - _17 <- borrow_mut ( * _18); - _18 <- { _18 with current = ( ^ _17) }; - _23 <- j_5; - _24 <- end'_10; - _16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 42 4 42 42] Swap0.swap _17 _23 _24); - goto BB6 - } - BB6 { - assume { Resolve1.resolve _18 }; - _29 <- f_1; - _30 <- cref_4; - _28 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 43 19 43 26] Index1.index _29 _30); - goto BB7 - } - BB7 { - _27 <- _28; - _31 <- k_6; - _26 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 43 19 43 29] Index2.index _27 _31); - goto BB8 - } - BB8 { - curr_lit_25 <- _26; - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 44 4 44 55] UInt64.to_int watchidx_8 < Seq.length (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) }; - _32 <- (); - _34 <- (); - old_w_33 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 45 16 45 31] watches_3); - goto BB9 - } - BB9 { - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 46 4 46 77] WatcherCrefsInRange0.watcher_crefs_in_range (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) (UInt64.to_int watchidx_8))) f_1 }; - _35 <- (); - _39 <- borrow_mut (Type.creusat_watches_watches_Watches_watches ( * watches_3)); - watches_3 <- { watches_3 with current = (let Type.CreuSat_Watches_Watches a = * watches_3 in Type.CreuSat_Watches_Watches ( ^ _39)) }; - _40 <- watchidx_8; - _38 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 47 10 47 35] IndexMut0.index_mut _39 _40); - goto BB10 - } - BB10 { - _37 <- borrow_mut ( * _38); - _38 <- { _38 with current = ( ^ _37) }; - _36 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 47 10 47 41] Pop1.pop _37); - goto BB11 - } - BB11 { - assume { Resolve0.resolve _38 }; - switch (_36) - | Type.Core_Option_Option_None -> goto BB12 - | Type.Core_Option_Option_Some _ -> goto BB14 - end - } - BB12 { - assume { Resolve2.resolve watches_3 }; - absurd - } - BB13 { - assume { Resolve2.resolve watches_3 }; - absurd - } - BB14 { - w_42 <- Type.core_option_option_Some_0 _36; - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 49 12 49 110] let _ = LemmaPopWatchMaintainsWatcherInvariant0.lemma_pop_watch_maintains_watcher_invariant (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * old_w_33))) (UInt64.to_int watchidx_8))) f_1 in true }; - _43 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 50 12 50 94] Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) (UInt64.to_int watchidx_8)) = Pop0.pop (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * old_w_33))) (UInt64.to_int watchidx_8))) }; - _44 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 51 12 51 85] WatcherCrefsInRange0.watcher_crefs_in_range (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) (UInt64.to_int watchidx_8))) f_1 }; - _45 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 52 12 52 48] Invariant0.invariant' ( * watches_3) f_1 }; - _46 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 53 12 53 86] ToNegWatchidxLogic0.to_neg_watchidx_logic curr_lit_25 < Seq.length (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) }; - _47 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 54 12 54 108] WatcherCrefsInRange0.watcher_crefs_in_range (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) (ToNegWatchidxLogic0.to_neg_watchidx_logic curr_lit_25))) f_1 }; - _48 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 55 12 55 55] UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref w_42) < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f_1)) }; - _49 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 56 12 56 133] let _ = LemmaPushMaintainsWatcherInvariant0.lemma_push_maintains_watcher_invariant (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) (ToNegWatchidxLogic0.to_neg_watchidx_logic curr_lit_25))) f_1 w_42 in true }; - _50 <- (); - _52 <- curr_lit_25; - watch_lit_51 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 58 28 58 54] ToNegWatchidx0.to_neg_watchidx _52); - goto BB15 - } - BB15 { - _56 <- borrow_mut (Type.creusat_watches_watches_Watches_watches ( * watches_3)); - watches_3 <- { watches_3 with current = (let Type.CreuSat_Watches_Watches a = * watches_3 in Type.CreuSat_Watches_Watches ( ^ _56)) }; - assume { Resolve2.resolve watches_3 }; - _57 <- watch_lit_51; - _55 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 59 12 59 38] IndexMut0.index_mut _56 _57); - goto BB16 - } - BB16 { - _54 <- borrow_mut ( * _55); - _55 <- { _55 with current = ( ^ _54) }; - _58 <- w_42; - _53 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 59 12 59 46] Push0.push _54 _58); - goto BB17 - } - BB17 { - assume { Resolve0.resolve _55 }; - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 61 12 61 77] WatchValid0.watch_valid (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) (UInt64.to_int watch_lit_51))) f_1 }; - _59 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 62 12 62 108] WatcherCrefsInRange0.watcher_crefs_in_range (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) (ToNegWatchidxLogic0.to_neg_watchidx_logic curr_lit_25))) f_1 }; - _60 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 63 12 63 48] Invariant0.invariant' ( * watches_3) f_1 }; - _61 <- (); - _0 <- (); - return _0 - } - + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_assignments.rs" 39 0 39 12] CompatibleInner0.compatible_inner a a2 /\ CompleteInner0.complete_inner a2 +end +module CreuSat_Logic_LogicClause_Impl1_PostUnitInner_Interface + use Type + use seq.Seq + use mach.int.Int + use prelude.Prelude + use prelude.UInt8 + predicate post_unit_inner (self : Type.creusat_clause_clause) (a : Seq.seq uint8) +end +module CreuSat_Logic_LogicClause_Impl1_PostUnitInner + use Type + use seq.Seq + use mach.int.Int + use prelude.Prelude + use prelude.UInt8 + use mach.int.Int32 + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner_Interface as UnsatInner0 + clone CreuSat_Logic_LogicLit_Impl1_SatInner_Interface as SatInner0 + clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 + predicate post_unit_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 56 4 56 63] (self : Type.creusat_clause_clause) (a : Seq.seq uint8) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 57 8 61 9] exists i : (int) . 0 <= i /\ i < Seq.length (Model0.model self) /\ SatInner0.sat_inner (Seq.get (Model0.model self) i) a /\ (forall j : (int) . 0 <= j /\ j < Seq.length (Model0.model self) /\ j <> i -> UnsatInner0.unsat_inner (Seq.get (Model0.model self) j) a) end -module CreuSat_UnitProp_CheckAndMoveWatch_Interface - use mach.int.UInt64 +module CreuSat_Logic_LogicClause_Impl1_NoUnsetInner_Interface + use Type + use seq.Seq + use mach.int.Int + use prelude.Prelude + use prelude.UInt8 + predicate no_unset_inner (self : Type.creusat_clause_clause) (a : Seq.seq uint8) +end +module CreuSat_Logic_LogicClause_Impl1_NoUnsetInner + use Type + use seq.Seq use mach.int.Int use prelude.Prelude + use prelude.UInt8 use mach.int.Int32 + clone CreuSat_Logic_LogicLit_Impl1_UnsetInner_Interface as UnsetInner0 + clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 + predicate no_unset_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 65 4 65 62] (self : Type.creusat_clause_clause) (a : Seq.seq uint8) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 66 8 68 9] forall j : (int) . 0 <= j /\ j < Seq.length (Model0.model self) -> not UnsetInner0.unset_inner (Seq.get (Model0.model self) j) a +end +module CreuSat_Logic_LogicClause_Impl1_PostUnit_Interface + use Type + predicate post_unit (self : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) +end +module CreuSat_Logic_LogicClause_Impl1_PostUnit + use Type + clone CreuSat_Logic_LogicClause_Impl1_PostUnitInner_Interface as PostUnitInner0 + clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 + predicate post_unit [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 72 4 72 50] (self : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 73 8 73 46] PostUnitInner0.post_unit_inner self (Model0.model a) +end +module CreuSat_Logic_LogicClause_Impl1_EqAssnInner_Interface + use Type use seq.Seq + use mach.int.Int + use prelude.Prelude + use prelude.UInt8 + predicate eq_assn_inner (self : Type.creusat_clause_clause) (a : Seq.seq uint8) (a2 : Seq.seq uint8) +end +module CreuSat_Logic_LogicClause_Impl1_EqAssnInner use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicLit_Impl1_Unsat_Interface as Unsat0 - clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model4 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic_Interface as ToWatchidxLogic0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model3 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicLit_Impl1_SatInner_Interface as SatInner0 - clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model2 - clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . + use seq.Seq + use mach.int.Int + use prelude.Prelude + use prelude.UInt8 + use mach.int.Int32 clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val check_and_move_watch [@cfg:stackify] (f : borrowed (Type.creusat_formula_formula)) (trail : Type.creusat_trail_trail) (watches : borrowed (Type.creusat_watches_watches)) (cref : usize) (j : usize) (k : usize) (lit : Type.creusat_lit_lit) : bool - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 16 0 16 33] Invariant0.invariant' ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 17 0 17 36] Invariant1.invariant' trail ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 18 0 18 44] Invariant2.invariant' ( * watches) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 19 0 19 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 20 0 20 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 21 0 21 69] not SatInner0.sat_inner (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) 0) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 22 0 22 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 23 0 23 57] 2 <= UInt64.to_int k && UInt64.to_int k < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 24 0 24 70] Seq.length (Model4.model (Seq.get (Model3.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 16 0 16 33] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 17 0 17 36] Invariant1.invariant' trail ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 18 0 18 44] Invariant2.invariant' ( ^ watches) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 25 0 25 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 26 0 26 25] Equisat0.equisat ( * f) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 27 0 27 55] Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) = Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 28 0 28 114] not result -> Unsat0.unsat (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref))) (UInt64.to_int k)) (Type.creusat_trail_trail_Trail_assignments trail) && ^ f = * f && * watches = ^ watches } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 29 0 29 75] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref))) = Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) } + clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 + predicate eq_assn_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 77 4 77 85] (self : Type.creusat_clause_clause) (a : Seq.seq uint8) (a2 : Seq.seq uint8) + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 78 8 81 9] forall i : (int) . 0 <= i /\ i < Seq.length (Model0.model self) -> Seq.get a (IndexLogic0.index_logic (Seq.get (Model0.model self) i)) = Seq.get a2 (IndexLogic0.index_logic (Seq.get (Model0.model self) i)) end -module CreuSat_UnitProp_CheckAndMoveWatch - use mach.int.UInt64 +module CreuSat_Logic_LogicClause_Impl2_Unknown_Interface + use Type + predicate unknown (self : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) +end +module CreuSat_Logic_LogicClause_Impl2_Unknown + use Type + clone CreuSat_Logic_LogicClause_Impl2_Unsat_Interface as Unsat0 + clone CreuSat_Logic_LogicClause_Impl2_Sat_Interface as Sat0 + predicate unknown [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 173 4 173 48] (self : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 172 4 172 16] not Sat0.sat self a /\ not Unsat0.unsat self a +end +module CreuSat_Logic_LogicClause_Impl2_SearchIdxInRange_Interface + use Type + predicate search_idx_in_range (self : Type.creusat_clause_clause) +end +module CreuSat_Logic_LogicClause_Impl2_SearchIdxInRange + use Type use mach.int.Int - use prelude.Prelude use mach.int.Int32 + use mach.int.UInt64 use seq.Seq + clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model0 + predicate search_idx_in_range [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 188 4 188 44] (self : Type.creusat_clause_clause) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 189 8 191 9] 2 <= UInt64.to_int (Type.creusat_clause_clause_Clause_search self) /\ UInt64.to_int (Type.creusat_clause_clause_Clause_search self) <= Seq.length (Model0.model self) +end +module CreuSat_Logic_LogicClause_Impl2_InvariantUnaryOk_Interface use Type - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = SatInner0.index_logic, - function IndexLogic0.index_logic = ToWatchidxLogic0.index_logic, - function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = Invariant6.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = ToWatchidxLogic0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model1.model = InvariantMirror0.model, - function Model0.model = FormulaInvariant0.model, function Model2.model = WatchesInvariantInternal0.model, - function Model0.model = Invariant3.model, function Model1.model = UnitAreSat0.model, - function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, - function Model1.model = Invariant7.model, function Model0.model = SatInner2.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, - function Model0.model = Model5.model, function Model3.model = InvariantNoDecisionMirror0.model, - function Model1.model = WatchesInvariantInternal0.model, function Model0.model = LongArePostUnitInner0.model, - function Model0.model = UnitAreSat0.model, function Model0.model = SatInner1.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner, - predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal - clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner1 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model2.model, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model2 with function Model0.model = Unsat0.model, - function Model2.model = InvariantNoDecision0.model, function Model0.model = InvariantNoDecisionMirror0.model, - function Model0.model = Invariant4.model, function Model1.model = TrailEntriesAreAssigned0.model, - function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant2.watches_invariant_internal - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model5 with function Model0.model = Invariant0.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat0 - clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 - clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic as ToWatchidxLogic0 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy2 with type ModelTy0.modelTy = Model12.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model12 with type t = Type.creusat_assignments_assignments, - function Model0.model = LitUnsat0.model - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model11.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_clause_clause, - function Model0.model = Index1.model - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model10.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model10 with type t = Type.creusat_formula_formula, - function Model0.model = Index0.model - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_watches_watches - clone CreuSat_Watches_UpdateWatch_Interface as UpdateWatch0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula - clone CreuSat_UnitProp_Swap_Interface as Swap0 - clone CreuSat_Lit_Impl1_Index_Interface as Index2 - clone CreuSat_Lit_Impl1_LitUnsat_Interface as LitUnsat0 - clone CreuSat_Clause_Impl0_Index_Interface as Index1 - clone CreuSat_Formula_Impl0_Index_Interface as Index0 - let rec cfg check_and_move_watch [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 30 0 32 9] (f : borrowed (Type.creusat_formula_formula)) (trail : Type.creusat_trail_trail) (watches : borrowed (Type.creusat_watches_watches)) (cref : usize) (j : usize) (k : usize) (lit : Type.creusat_lit_lit) : bool - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 16 0 16 33] Invariant0.invariant' ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 17 0 17 36] Invariant1.invariant' trail ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 18 0 18 44] Invariant2.invariant' ( * watches) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 19 0 19 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 20 0 20 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 21 0 21 69] not SatInner0.sat_inner (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) 0) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 22 0 22 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 23 0 23 57] 2 <= UInt64.to_int k && UInt64.to_int k < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 24 0 24 70] Seq.length (Model4.model (Seq.get (Model3.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 16 0 16 33] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 17 0 17 36] Invariant1.invariant' trail ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 18 0 18 44] Invariant2.invariant' ( ^ watches) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 25 0 25 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 26 0 26 25] Equisat0.equisat ( * f) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 27 0 27 55] Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) = Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 28 0 28 114] not result -> Unsat0.unsat (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref))) (UInt64.to_int k)) (Type.creusat_trail_trail_Trail_assignments trail) && ^ f = * f && * watches = ^ watches } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 29 0 29 75] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref))) = Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) } + use mach.int.Int + predicate invariant_unary_ok (self : Type.creusat_clause_clause) (n : int) +end +module CreuSat_Logic_LogicClause_Impl2_InvariantUnaryOk + use Type + use mach.int.Int + clone CreuSat_Logic_LogicClause_Impl2_SearchIdxInRange_Interface as SearchIdxInRange0 + clone CreuSat_Logic_LogicClause_Impl2_NoDuplicateIndexes_Interface as NoDuplicateIndexes0 + clone CreuSat_Logic_LogicClause_Impl2_VarsInRange_Interface as VarsInRange0 + predicate invariant_unary_ok [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 203 4 203 51] (self : Type.creusat_clause_clause) (n : int) = - var _0 : bool; - var f_1 : borrowed (Type.creusat_formula_formula); - var trail_2 : Type.creusat_trail_trail; - var watches_3 : borrowed (Type.creusat_watches_watches); - var cref_4 : usize; - var j_5 : usize; - var k_6 : usize; - var lit_7 : Type.creusat_lit_lit; - var _8 : (); - var curr_lit_9 : Type.creusat_lit_lit; - var _10 : Type.creusat_lit_lit; - var _11 : Type.creusat_clause_clause; - var _12 : Type.creusat_clause_clause; - var _13 : Type.creusat_formula_formula; - var _14 : usize; - var _15 : usize; - var _16 : (); - var _17 : bool; - var _18 : bool; - var _19 : Type.creusat_lit_lit; - var _20 : Type.creusat_assignments_assignments; - var _21 : Type.creusat_assignments_assignments; - var _22 : (); - var _23 : (); - var _24 : bool; - var _25 : usize; - var _26 : Type.creusat_lit_lit; - var _27 : Type.creusat_lit_lit; - var _28 : Type.creusat_clause_clause; - var _29 : Type.creusat_clause_clause; - var _30 : Type.creusat_formula_formula; - var _31 : usize; - var _32 : usize; - var _33 : Type.creusat_lit_lit; - var _34 : (); - var _35 : borrowed (Type.creusat_formula_formula); - var _36 : Type.creusat_trail_trail; - var _37 : Type.creusat_watches_watches; - var _38 : usize; - var _39 : usize; - var _40 : (); - var _41 : Type.creusat_formula_formula; - var _42 : Type.creusat_trail_trail; - var _43 : borrowed (Type.creusat_watches_watches); - var _44 : usize; - var _45 : usize; - var _46 : Type.creusat_lit_lit; - var _47 : (); - var _48 : borrowed (Type.creusat_formula_formula); - var _49 : Type.creusat_trail_trail; - var _50 : Type.creusat_watches_watches; - var _51 : usize; - var _52 : usize; - var _53 : (); - var _54 : borrowed (Type.creusat_formula_formula); - var _55 : Type.creusat_trail_trail; - var _56 : Type.creusat_watches_watches; - var _57 : usize; - var _58 : (); - var _59 : Type.creusat_formula_formula; - var _60 : Type.creusat_trail_trail; - var _61 : borrowed (Type.creusat_watches_watches); - var _62 : usize; - var _63 : usize; - var _64 : Type.creusat_lit_lit; - { - f_1 <- f; - trail_2 <- trail; - watches_3 <- watches; - cref_4 <- cref; - j_5 <- j; - k_6 <- k; - lit_7 <- lit; - goto BB0 - } - BB0 { - _13 <- * f_1; - _14 <- cref_4; - _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 33 19 33 26] Index0.index _13 _14); - goto BB1 - } - BB1 { - _11 <- _12; - _15 <- k_6; - _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 33 19 33 29] Index1.index _11 _15); - goto BB2 - } - BB2 { - curr_lit_9 <- _10; - _19 <- curr_lit_9; - _21 <- Type.creusat_trail_trail_Trail_assignments trail_2; - _20 <- _21; - _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 34 8 34 46] LitUnsat0.lit_unsat _19 _20); - goto BB3 - } - BB3 { - _17 <- not _18; - switch (_17) - | False -> goto BB17 - | _ -> goto BB4 - end - } - BB4 { - _30 <- * f_1; - _31 <- cref_4; - _29 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 36 11 36 18] Index0.index _30 _31); - goto BB5 - } - BB5 { - _28 <- _29; - _27 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 36 11 36 21] Index1.index _28 (0 : usize)); - goto BB6 - } - BB6 { - _26 <- _27; - _25 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 36 11 36 29] Index2.index _26); - goto BB7 - } - BB7 { - _33 <- lit_7; - _32 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 36 33 36 44] Index2.index _33); - goto BB8 - } - BB8 { - _24 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 36 11 36 44] _25 = _32); - switch (_24) - | False -> goto BB12 - | _ -> goto BB9 - end - } - BB9 { - _35 <- borrow_mut ( * f_1); - f_1 <- { f_1 with current = ( ^ _35) }; - _36 <- trail_2; - _37 <- * watches_3; - _38 <- cref_4; - _39 <- k_6; - _34 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 38 12 38 47] Swap0.swap _35 _36 _37 _38 _39 (0 : usize)); - goto BB10 - } - BB10 { - _41 <- * f_1; - assume { Resolve0.resolve f_1 }; - _42 <- trail_2; - _43 <- borrow_mut ( * watches_3); - watches_3 <- { watches_3 with current = ( ^ _43) }; - _44 <- cref_4; - _45 <- j_5; - _46 <- lit_7; - _40 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 39 12 39 60] UpdateWatch0.update_watch _41 _42 _43 _44 _45 (0 : usize) _46); - goto BB11 - } - BB11 { - assume { Resolve1.resolve watches_3 }; - _23 <- (); - goto BB16 - } - BB12 { - _48 <- borrow_mut ( * f_1); - f_1 <- { f_1 with current = ( ^ _48) }; - _49 <- trail_2; - _50 <- * watches_3; - _51 <- cref_4; - _52 <- k_6; - _47 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 41 12 41 47] Swap0.swap _48 _49 _50 _51 _52 (1 : usize)); - goto BB13 - } - BB13 { - _54 <- borrow_mut ( * f_1); - f_1 <- { f_1 with current = ( ^ _54) }; - _55 <- trail_2; - _56 <- * watches_3; - _57 <- cref_4; - _53 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 42 12 42 47] Swap0.swap _54 _55 _56 _57 (1 : usize) (0 : usize)); - goto BB14 - } - BB14 { - _59 <- * f_1; - assume { Resolve0.resolve f_1 }; - _60 <- trail_2; - _61 <- borrow_mut ( * watches_3); - watches_3 <- { watches_3 with current = ( ^ _61) }; - _62 <- cref_4; - _63 <- j_5; - _64 <- lit_7; - _58 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 44 12 44 60] UpdateWatch0.update_watch _59 _60 _61 _62 _63 (0 : usize) _64); - goto BB15 - } - BB15 { - assume { Resolve1.resolve watches_3 }; - _23 <- (); - goto BB16 - } - BB16 { - _0 <- true; - goto BB18 - } - BB17 { - assume { Resolve0.resolve f_1 }; - assume { Resolve1.resolve watches_3 }; - _16 <- (); - _0 <- false; - goto BB18 - } - BB18 { - return _0 - } - + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_clause.rs" 205 8 205 104] VarsInRange0.vars_in_range self n /\ NoDuplicateIndexes0.no_duplicate_indexes self /\ SearchIdxInRange0.search_idx_in_range self end -module CreuSat_UnitProp_ExistsNewWatchableLit_Interface +module CreuSat_Logic_LogicFormula_Impl2_Compatible_Interface + use Type + predicate compatible (self : Type.creusat_formula_formula) (o : Type.creusat_formula_formula) +end +module CreuSat_Logic_LogicFormula_Impl2_Compatible + use Type + use mach.int.UInt64 + use seq.Seq + use mach.int.Int + use mach.int.Int32 + clone CreuSat_Logic_LogicClause_Impl2_Equals_Interface as Equals0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + predicate compatible [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 91 4 91 47] (self : Type.creusat_formula_formula) (o : Type.creusat_formula_formula) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 92 8 97 9] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars o) /\ Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses o)) >= Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) /\ (forall i : (int) . 0 <= i /\ i < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) -> Equals0.equals (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) i) (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses o)) i)) +end +module CreuSat_Logic_LogicFormula_Impl2_EventuallySatInner_Interface + use Type + use seq.Seq + use mach.int.Int + use prelude.Prelude + use prelude.UInt8 + predicate eventually_sat_inner (self : Type.creusat_formula_formula) (a : Seq.seq uint8) +end +module CreuSat_Logic_LogicFormula_Impl2_EventuallySatInner + use Type + use seq.Seq + use mach.int.Int + use prelude.Prelude + use prelude.UInt8 use mach.int.UInt64 + clone CreuSat_Logic_LogicFormula_Impl2_SatInner_Interface as SatInner0 + clone CreuSat_Logic_LogicAssignments_CompatibleInner_Interface as CompatibleInner0 + predicate eventually_sat_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 125 4 125 64] (self : Type.creusat_formula_formula) (a : Seq.seq uint8) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 126 8 128 9] exists a2 : (Seq.seq uint8) . Seq.length a2 = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self) /\ CompatibleInner0.compatible_inner a a2 /\ SatInner0.sat_inner self a2 +end +module CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteInner_Interface + use Type + use seq.Seq use mach.int.Int use prelude.Prelude - use mach.int.Int32 + use prelude.UInt8 + predicate eventually_sat_complete_inner (self : Type.creusat_formula_formula) (a : Seq.seq uint8) +end +module CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteInner + use Type use seq.Seq + use mach.int.Int + use prelude.Prelude + use prelude.UInt8 + use mach.int.UInt64 + clone CreuSat_Logic_LogicFormula_Impl2_SatInner_Interface as SatInner0 + clone CreuSat_Logic_LogicAssignments_CompatibleCompleteInner_Interface as CompatibleCompleteInner0 + predicate eventually_sat_complete_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 132 4 132 73] (self : Type.creusat_formula_formula) (a : Seq.seq uint8) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 133 8 135 9] exists a2 : (Seq.seq uint8) . Seq.length a2 = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars self) /\ CompatibleCompleteInner0.compatible_complete_inner a a2 /\ SatInner0.sat_inner self a2 +end +module CreuSat_Logic_LogicFormula_Impl2_EventuallySatComplete_Interface use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 - clone CreuSat_Logic_LogicLit_Impl1_Unsat_Interface as Unsat0 - clone CreuSat_Logic_LogicLit_Impl1_SatInner_Interface as SatInner0 - clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model4 - clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model3 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic_Interface as ToWatchidxLogic0 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val exists_new_watchable_lit [@cfg:stackify] (f : borrowed (Type.creusat_formula_formula)) (trail : Type.creusat_trail_trail) (watches : borrowed (Type.creusat_watches_watches)) (cref : usize) (j : usize) (lit : Type.creusat_lit_lit) : bool - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 86 0 86 33] Invariant0.invariant' ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 87 0 87 38] Invariant1.invariant' trail ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 88 0 88 44] Invariant2.invariant' ( * watches) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 89 0 89 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 90 0 90 63] ToWatchidxLogic0.to_watchidx_logic lit < Seq.length (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 91 0 91 70] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 92 0 92 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 93 0 93 39] UInt64.to_int cref < Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 94 0 94 46] Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) >= 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 95 0 95 69] not SatInner0.sat_inner (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) 0) (Model4.model (Type.creusat_trail_trail_Trail_assignments trail))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 86 0 86 33] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 87 0 87 38] Invariant1.invariant' trail ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 88 0 88 44] Invariant2.invariant' ( ^ watches) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 96 0 96 136] not result -> (forall m : (int) . 2 <= m && m < Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) -> Unsat0.unsat (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) m) (Type.creusat_trail_trail_Trail_assignments trail)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 97 0 97 75] not result -> Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref)) = Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 98 0 98 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 99 0 99 55] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 100 0 100 25] Equisat0.equisat ( * f) ( ^ f) } + predicate eventually_sat_complete (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) +end +module CreuSat_Logic_LogicFormula_Impl2_EventuallySatComplete + use Type + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteInner_Interface as EventuallySatCompleteInner0 + clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 + predicate eventually_sat_complete [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 139 4 139 60] (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 140 8 140 59] EventuallySatCompleteInner0.eventually_sat_complete_inner self (Model0.model a) end -module CreuSat_UnitProp_ExistsNewWatchableLit - use mach.int.UInt64 +module CreuSat_Logic_LogicFormula_Impl2_EventuallySat_Interface + use Type + predicate eventually_sat (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) +end +module CreuSat_Logic_LogicFormula_Impl2_EventuallySat + use Type + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatInner_Interface as EventuallySatInner0 + clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 + predicate eventually_sat [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 144 4 144 51] (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 145 8 145 50] EventuallySatInner0.eventually_sat_inner self (Model0.model a) +end +module CreuSat_Logic_LogicFormula_Impl2_UnsatInner_Interface + use Type + use seq.Seq use mach.int.Int use prelude.Prelude - use mach.int.Int32 - use seq.Seq + use prelude.UInt8 + predicate unsat_inner (self : Type.creusat_formula_formula) (a : Seq.seq uint8) +end +module CreuSat_Logic_LogicFormula_Impl2_UnsatInner use Type + use seq.Seq + use mach.int.Int + use prelude.Prelude use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = ToWatchidxLogic0.index_logic, - function IndexLogic0.index_logic = SatInner0.index_logic, - function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = Invariant6.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant3.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = ToWatchidxLogic0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model3.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model3 with function Model1.model = InvariantMirror0.model, - function Model0.model = FormulaInvariant0.model, function Model2.model = WatchesInvariantInternal0.model, - function Model0.model = Invariant4.model, function Model1.model = UnitAreSat0.model, - function Model0.model = LitIdxIn0.model, function Model1.model = Invariant7.model, - function Model0.model = ClausePostWithRegardsToInner0.model, function Model0.model = SatInner2.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner, - predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, - function Model0.model = Model6.model, function Model3.model = InvariantNoDecisionMirror0.model, - function Model1.model = WatchesInvariantInternal0.model, function Model0.model = LongArePostUnitInner0.model, - function Model0.model = UnitAreSat0.model, function Model0.model = SatInner1.model, - function Model0.model = Invariant7.model, function Model0.model = LitNotInLessInner0.model, axiom . - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant4.invariant_internal - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant3.invariant' - clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner1 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model4.model, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model4 with function Model0.model = Unsat0.model, - function Model2.model = InvariantNoDecision0.model, function Model0.model = InvariantNoDecisionMirror0.model, - function Model0.model = Invariant5.model, function Model1.model = TrailEntriesAreAssigned0.model, - function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = CrefsInRange0.invariant', - predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant2.watches_invariant_internal - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model6 with function Model0.model = Invariant0.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 - clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat0 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . - clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic as ToWatchidxLogic0 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.creusat_clause_clause, - predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere - clone CreuSat_Util_MaxLog as MaxLog0 with function MaxLog0.max_log = Max0.max_log - clone CreuSat_Util_MinLog as MinLog0 with function MinLog0.min_log = Min0.min_log - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy2 with type ModelTy0.modelTy = Model11.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_formula_formula, - function Model0.model = Index1.model - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model10.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model10 with type t = Type.creusat_clause_clause, - function Model0.model = Len0.model - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_clause_clause - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause, - type Output0.output = Index0.output, type Output0.output = IndexMut0.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause, - predicate HasValue0.has_value = Index0.has_value, predicate HasValue0.has_value = IndexMut0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause, - predicate InBounds0.in_bounds = Index0.in_bounds, predicate InBounds0.in_bounds = IndexMut0.in_bounds - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_clause_clause - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.creusat_clause_clause, type i = usize, - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_formula_formula - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_watches_watches - clone CreuSat_UnitProp_CheckAndMoveWatch_Interface as CheckAndMoveWatch0 - clone CreuSat_Util_Max_Interface as Max0 - clone CreuSat_Util_Min_Interface as Min0 - clone CreuSat_Formula_Impl0_Index_Interface as Index1 - clone CreuSat_Clause_Impl3_Len_Interface as Len0 - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.creusat_clause_clause, type i = usize, - type a = Type.alloc_alloc_global - let rec cfg exists_new_watchable_lit [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 101 0 103 9] (f : borrowed (Type.creusat_formula_formula)) (trail : Type.creusat_trail_trail) (watches : borrowed (Type.creusat_watches_watches)) (cref : usize) (j : usize) (lit : Type.creusat_lit_lit) : bool - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 86 0 86 33] Invariant0.invariant' ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 87 0 87 38] Invariant1.invariant' trail ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 88 0 88 44] Invariant2.invariant' ( * watches) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 89 0 89 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 90 0 90 63] ToWatchidxLogic0.to_watchidx_logic lit < Seq.length (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 91 0 91 70] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 92 0 92 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 93 0 93 39] UInt64.to_int cref < Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 94 0 94 46] Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) >= 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 95 0 95 69] not SatInner0.sat_inner (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) 0) (Model4.model (Type.creusat_trail_trail_Trail_assignments trail))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 86 0 86 33] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 87 0 87 38] Invariant1.invariant' trail ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 88 0 88 44] Invariant2.invariant' ( ^ watches) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 96 0 96 136] not result -> (forall m : (int) . 2 <= m && m < Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) -> Unsat0.unsat (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) m) (Type.creusat_trail_trail_Trail_assignments trail)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 97 0 97 75] not result -> Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref)) = Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 98 0 98 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 99 0 99 55] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 100 0 100 25] Equisat0.equisat ( * f) ( ^ f) } + use mach.int.Int32 + clone CreuSat_Logic_LogicClause_Impl2_UnsatInner_Interface as UnsatInner0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + predicate unsat_inner [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 162 4 162 55] (self : Type.creusat_formula_formula) (a : Seq.seq uint8) = - var _0 : bool; - var f_1 : borrowed (Type.creusat_formula_formula); - var trail_2 : Type.creusat_trail_trail; - var watches_3 : borrowed (Type.creusat_watches_watches); - var cref_4 : usize; - var j_5 : usize; - var lit_6 : Type.creusat_lit_lit; - ghost var old_w_7 : borrowed (Type.creusat_watches_watches); - var _8 : (); - ghost var old_f_9 : borrowed (Type.creusat_formula_formula); - var _10 : (); - var clause_len_11 : usize; - var _12 : Type.creusat_clause_clause; - var _13 : Type.creusat_clause_clause; - var _14 : Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global); - var _15 : usize; - var init_search_16 : usize; - var _17 : usize; - var _18 : usize; - var _19 : Type.creusat_clause_clause; - var _20 : Type.creusat_formula_formula; - var _21 : usize; - var _22 : usize; - var search_23 : usize; - var _24 : (); - var _25 : (); - var _26 : bool; - var _27 : usize; - var _28 : usize; - var _29 : (); - var _30 : bool; - var _31 : borrowed (Type.creusat_formula_formula); - var _32 : Type.creusat_trail_trail; - var _33 : borrowed (Type.creusat_watches_watches); - var _34 : usize; - var _35 : usize; - var _36 : usize; - var _37 : Type.creusat_lit_lit; - var _38 : (); - ghost var old_f2_39 : borrowed (Type.creusat_formula_formula); - var _40 : (); - var _41 : usize; - var _42 : borrowed (Type.creusat_clause_clause); - var _43 : borrowed (Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global)); - var _44 : usize; - var _45 : (); - var _46 : (); - var _47 : (); - var _48 : (); - var _49 : (); - var _50 : (); - var _51 : (); - var _52 : bool; - var _53 : usize; - var _54 : usize; - var _55 : (); - var _56 : bool; - var _57 : borrowed (Type.creusat_formula_formula); - var _58 : Type.creusat_trail_trail; - var _59 : borrowed (Type.creusat_watches_watches); - var _60 : usize; - var _61 : usize; - var _62 : usize; - var _63 : Type.creusat_lit_lit; - var _64 : (); - ghost var old_f2_65 : borrowed (Type.creusat_formula_formula); - var _66 : (); - var _67 : usize; - var _68 : borrowed (Type.creusat_clause_clause); - var _69 : borrowed (Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global)); - var _70 : usize; - var _71 : (); - var _72 : (); - var _73 : (); - var _74 : (); - var _75 : (); - var _76 : (); - { - f_1 <- f; - trail_2 <- trail; - watches_3 <- watches; - cref_4 <- cref; - j_5 <- j; - lit_6 <- lit; - goto BB0 - } - BB0 { - _8 <- (); - old_w_7 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 104 16 104 34] watches_3); - goto BB1 - } - BB1 { - _10 <- (); - old_f_9 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 105 16 105 28] f_1); - goto BB2 - } - BB2 { - _14 <- Type.creusat_formula_formula_Formula_clauses ( * f_1); - _15 <- cref_4; - _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 106 28 106 43] Index0.index _14 _15); - goto BB3 - } - BB3 { - _12 <- _13; - clause_len_11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 106 28 106 49] Len0.len _12); - goto BB4 - } - BB4 { - _20 <- * f_1; - _21 <- cref_4; - _19 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 107 42 107 49] Index1.index _20 _21); - goto BB5 - } - BB5 { - _18 <- Type.creusat_clause_clause_Clause_search _19; - _22 <- clause_len_11; - _17 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 107 32 107 69] Min0.min _18 _22); - goto BB6 - } - BB6 { - init_search_16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 107 22 107 73] Max0.max _17 (2 : usize)); - goto BB7 - } - BB7 { - search_23 <- init_search_16; - goto BB8 - } - BB8 { - invariant search { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 109 4 109 38] UInt64.to_int search_23 >= 2 }; - invariant f_unchanged { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 110 4 110 42] f_1 = old_f_9 }; - invariant w_unchanged { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 111 4 111 48] watches_3 = old_w_7 }; - invariant uns { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 112 4 112 125] forall m : (int) . UInt64.to_int init_search_16 <= m && m < UInt64.to_int search_23 -> Unsat0.unsat (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) m) (Type.creusat_trail_trail_Trail_assignments trail_2) }; - invariant first_not_sat { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 114 4 114 89] not SatInner0.sat_inner (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) 0) (Model4.model (Type.creusat_trail_trail_Trail_assignments trail_2)) }; - _27 <- search_23; - _28 <- clause_len_11; - _26 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 115 10 115 29] _27 < _28); - switch (_26) - | False -> goto BB15 - | _ -> goto BB9 - end - } - BB9 { - _31 <- borrow_mut ( * f_1); - f_1 <- { f_1 with current = ( ^ _31) }; - _32 <- trail_2; - _33 <- borrow_mut ( * watches_3); - watches_3 <- { watches_3 with current = ( ^ _33) }; - _34 <- cref_4; - _35 <- j_5; - _36 <- search_23; - _37 <- lit_6; - _30 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 116 11 116 72] CheckAndMoveWatch0.check_and_move_watch _31 _32 _33 _34 _35 _36 _37); - goto BB10 - } - BB10 { - switch (_30) - | False -> goto BB14 - | _ -> goto BB11 - end - } - BB11 { - assume { Resolve0.resolve watches_3 }; - _40 <- (); - old_f2_39 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 117 25 117 37] f_1); - goto BB12 - } - BB12 { - _41 <- search_23; - _43 <- borrow_mut (Type.creusat_formula_formula_Formula_clauses ( * f_1)); - f_1 <- { f_1 with current = (let Type.CreuSat_Formula_Formula a b = * f_1 in Type.CreuSat_Formula_Formula ( ^ _43) b) }; - assume { Resolve1.resolve f_1 }; - _44 <- cref_4; - _42 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 118 12 118 27] IndexMut0.index_mut _43 _44); - goto BB13 - } - BB13 { - _42 <- { _42 with current = (let Type.CreuSat_Clause_Clause a b c d = * _42 in Type.CreuSat_Clause_Clause a b _41 d) }; - assume { Resolve2.resolve _42 }; - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 119 12 119 130] forall j : (int) . 0 <= j && j < Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) -> Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) j) = Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * old_f2_39))) j) }; - _45 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 120 12 120 53] Equisat0.equisat ( * old_f2_39) ( * f_1) }; - _46 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 121 12 121 59] CrefsInRange0.crefs_in_range (Model5.model (Type.creusat_trail_trail_Trail_trail trail_2)) ( * f_1) }; - _47 <- (); - _0 <- true; - goto BB24 - } - BB14 { - _29 <- (); - search_23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 124 8 124 19] search_23 + (1 : usize)); - _25 <- (); - goto BB8 - } - BB15 { - _24 <- (); - search_23 <- (2 : usize); - goto BB16 - } - BB16 { - invariant search_bound { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 127 4 127 70] 2 <= UInt64.to_int search_23 && UInt64.to_int search_23 <= UInt64.to_int clause_len_11 }; - invariant f_unchanged { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 128 4 128 42] f_1 = old_f_9 }; - invariant w_unchanged { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 129 4 129 48] watches_3 = old_w_7 }; - invariant uns { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 130 4 130 131] forall m : (int) . UInt64.to_int init_search_16 <= m && m < UInt64.to_int clause_len_11 -> Unsat0.unsat (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) m) (Type.creusat_trail_trail_Trail_assignments trail_2) }; - invariant uns2 { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 131 4 131 117] forall m : (int) . 2 <= m && m < UInt64.to_int search_23 -> Unsat0.unsat (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) m) (Type.creusat_trail_trail_Trail_assignments trail_2) }; - invariant first_not_sat { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 133 4 133 89] not SatInner0.sat_inner (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) 0) (Model4.model (Type.creusat_trail_trail_Trail_assignments trail_2)) }; - _53 <- search_23; - _54 <- init_search_16; - _52 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 134 10 134 30] _53 < _54); - switch (_52) - | False -> goto BB23 - | _ -> goto BB17 - end - } - BB17 { - _57 <- borrow_mut ( * f_1); - f_1 <- { f_1 with current = ( ^ _57) }; - _58 <- trail_2; - _59 <- borrow_mut ( * watches_3); - watches_3 <- { watches_3 with current = ( ^ _59) }; - _60 <- cref_4; - _61 <- j_5; - _62 <- search_23; - _63 <- lit_6; - _56 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 135 11 135 72] CheckAndMoveWatch0.check_and_move_watch _57 _58 _59 _60 _61 _62 _63); - goto BB18 - } - BB18 { - switch (_56) - | False -> goto BB22 - | _ -> goto BB19 - end - } - BB19 { - assume { Resolve0.resolve watches_3 }; - _66 <- (); - old_f2_65 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 136 25 136 37] f_1); - goto BB20 - } - BB20 { - _67 <- search_23; - _69 <- borrow_mut (Type.creusat_formula_formula_Formula_clauses ( * f_1)); - f_1 <- { f_1 with current = (let Type.CreuSat_Formula_Formula a b = * f_1 in Type.CreuSat_Formula_Formula ( ^ _69) b) }; - assume { Resolve1.resolve f_1 }; - _70 <- cref_4; - _68 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 137 12 137 27] IndexMut0.index_mut _69 _70); - goto BB21 - } - BB21 { - _68 <- { _68 with current = (let Type.CreuSat_Clause_Clause a b c d = * _68 in Type.CreuSat_Clause_Clause a b _67 d) }; - assume { Resolve2.resolve _68 }; - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 138 12 138 130] forall j : (int) . 0 <= j && j < Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) -> Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) j) = Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * old_f2_65))) j) }; - _71 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 139 12 139 53] Equisat0.equisat ( * old_f2_65) ( * f_1) }; - _72 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 140 12 140 59] CrefsInRange0.crefs_in_range (Model5.model (Type.creusat_trail_trail_Trail_trail trail_2)) ( * f_1) }; - _73 <- (); - _0 <- true; - goto BB24 - } - BB22 { - _55 <- (); - search_23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 143 8 143 19] search_23 + (1 : usize)); - _25 <- (); - goto BB16 - } - BB23 { - assume { Resolve1.resolve f_1 }; - assume { Resolve0.resolve watches_3 }; - _51 <- (); - _0 <- false; - goto BB25 - } - BB24 { - goto BB25 - } - BB25 { - return _0 - } - + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 163 8 166 9] exists i : (int) . 0 <= i /\ i < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) /\ UnsatInner0.unsat_inner (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses self)) i) a +end +module CreuSat_Logic_LogicFormula_Impl2_Unsat_Interface + use Type + predicate unsat (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) +end +module CreuSat_Logic_LogicFormula_Impl2_Unsat + use Type + clone CreuSat_Logic_LogicFormula_Impl2_UnsatInner_Interface as UnsatInner0 + clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 + predicate unsat [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 170 4 170 46] (self : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_formula.rs" 171 8 171 42] UnsatInner0.unsat_inner self (Model0.model a) +end +module CreuSat_Logic_LogicLit_Impl1_LitInInternal_Interface + use Type + use seq.Seq + predicate lit_in_internal (self : Type.creusat_lit_lit) (c : Seq.seq (Type.creusat_lit_lit)) end -module CreuSat_UnitProp_PropagateLitWithRegardToClause_Interface +module CreuSat_Logic_LogicLit_Impl1_LitInInternal + use Type use seq.Seq use mach.int.Int - use mach.int.UInt64 - use prelude.Prelude use mach.int.Int32 + predicate lit_in_internal [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 54 4 54 53] (self : Type.creusat_lit_lit) (c : Seq.seq (Type.creusat_lit_lit)) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 55 8 57 9] exists i : (int) . 0 <= i /\ i < Seq.length c /\ Seq.get c i = self +end +module CreuSat_Logic_LogicLit_Impl1_IdxInTrail_Interface use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 - clone CreuSat_Logic_LogicClause_Impl2_Unsat_Interface as Unsat1 - clone CreuSat_Logic_LogicFormula_Impl2_Unsat_Interface as Unsat0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model4 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model3 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . + predicate idx_in_trail (self : Type.creusat_lit_lit) (t : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global)) + +end +module CreuSat_Logic_LogicLit_Impl1_IdxInTrail + use Type + use mach.int.Int + use mach.int.Int32 + use seq.Seq clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic_Interface as ToWatchidxLogic0 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val propagate_lit_with_regard_to_clause [@cfg:stackify] (f : borrowed (Type.creusat_formula_formula)) (trail : borrowed (Type.creusat_trail_trail)) (watches : borrowed (Type.creusat_watches_watches)) (cref : usize) (lit : Type.creusat_lit_lit) (j : usize) : Type.core_result_result bool usize - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 149 0 149 33] Invariant0.invariant' ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 150 0 150 42] Invariant1.invariant' ( * trail) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 151 0 151 44] Invariant2.invariant' ( * watches) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 152 0 152 63] ToWatchidxLogic0.to_watchidx_logic lit < Seq.length (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 153 0 153 70] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 154 0 154 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 155 0 155 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 156 0 156 39] UInt64.to_int cref < Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 157 0 157 46] Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) >= 2} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 149 0 149 33] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 150 0 150 42] Invariant1.invariant' ( ^ trail) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 151 0 151 44] Invariant2.invariant' ( ^ watches) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 158 0 158 49] Type.creusat_trail_trail_Trail_decisions ( ^ trail) = Type.creusat_trail_trail_Trail_decisions ( * trail) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 159 0 163 3] match (result) with - | Type.Core_Result_Result_Ok (True) -> true - | Type.Core_Result_Result_Ok (False) -> Seq.length (Model4.model (Type.creusat_trail_trail_Trail_trail ( ^ trail))) = Seq.length (Model4.model (Type.creusat_trail_trail_Trail_trail ( * trail))) - | Type.Core_Result_Result_Err n -> UInt64.to_int n < Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) && Unsat0.unsat ( ^ f) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) && Unsat1.unsat (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int n)) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) - end } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 164 0 164 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 165 0 165 25] Equisat0.equisat ( * f) ( ^ f) } + predicate idx_in_trail [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 121 4 121 51] (self : Type.creusat_lit_lit) (t : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global)) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_lit.rs" 122 8 125 9] exists i : (int) . 0 <= i /\ i < Seq.length (Model0.model t) /\ IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit (Seq.get (Model0.model t) i)) = IndexLogic0.index_logic self +end +module CreuSat_Logic_LogicTrail_Impl0_InvariantReasonNew_Interface + use Type + predicate invariant_reason_new (self : Type.creusat_trail_reason) (f : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) end -module CreuSat_UnitProp_PropagateLitWithRegardToClause - use seq.Seq +module CreuSat_Logic_LogicTrail_Impl0_InvariantReasonNew + use Type use mach.int.Int - use mach.int.UInt64 - use prelude.Prelude use mach.int.Int32 - use Type - use seq.Permut - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = ToWatchidxLogic0.index_logic, - function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, - function IndexLogic0.index_logic = UnsetInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner2.index_logic, function IndexLogic0.index_logic = SatInner2.index_logic, - function IndexLogic0.index_logic = Invariant6.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRange0.vars_in_range_inner, - predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_Logic_Unset as Unset1 with predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model3.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model3 with function Model1.model = InvariantMirror0.model, - function Model0.model = FormulaInvariant0.model, function Model2.model = WatchesInvariantInternal0.model, - function Model0.model = UnsatInner1.model, function Model0.model = UnitInner0.model, - function Model0.model = PostUnitInner0.model, function Model0.model = ClausePostWithRegardsToInner0.model, - function Model0.model = Invariant3.model, function Model1.model = UnitAreSat0.model, - function Model0.model = LitIdxIn0.model, function Model0.model = VarsInRange0.model, - function Model0.model = SatInner1.model, function Model1.model = Invariant7.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = Index0.model, - function Model0.model = InvariantMirror0.model, function Model0.model = Model5.model, - function Model3.model = InvariantNoDecisionMirror0.model, function Model1.model = WatchesInvariantInternal0.model, - function Model0.model = UnsatInner0.model, function Model0.model = LongArePostUnitInner0.model, - function Model0.model = UnitAreSat0.model, function Model0.model = SatInner0.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = ToWatchidxLogic0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner2.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = SatInner2.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner2 with predicate SatInner0.sat_inner = PostUnitInner0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = Sat0.sat_inner, predicate SatInner0.sat_inner = SatInner1.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner1 with predicate SatInner0.sat_inner = UnitInner0.sat_inner, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicClause_Impl2_VarsInRange as VarsInRange0 with predicate VarsInRange0.vars_in_range = UnitInner0.vars_in_range - clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner2 with predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner, - predicate UnsatInner0.unsat_inner = PostUnitInner0.unsat_inner, - predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model8.model, axiom . - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model8 with function Model0.model = Unsat0.model, - function Model0.model = Unsat1.model, function Model0.model = Unset0.model, function Model0.model = Unit0.model, - function Model0.model = PostUnit0.model, function Model0.model = ClausePostWithRegardsToLit0.model, - function Model2.model = InvariantNoDecision0.model, function Model0.model = InvariantNoDecisionMirror0.model, - function Model0.model = Invariant4.model, function Model1.model = TrailEntriesAreAssigned0.model, - function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToLit0.clause_post_with_regards_to_inner, - predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_clause_clause - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_clause_clause, - type Output0.output = Index0.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_clause_clause, - predicate HasValue0.has_value = Index0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_clause_clause, - predicate InBounds0.in_bounds = Index0.in_bounds - clone CreuSat_Logic_LogicClause_Impl1_PostUnitInner as PostUnitInner0 with predicate PostUnitInner0.post_unit_inner = PostUnit0.post_unit_inner - clone CreuSat_Logic_LogicLit_Impl1_UnsetInner as UnsetInner0 with predicate UnsetInner0.unset_inner = Unset0.unset_inner, - predicate UnsetInner0.unset_inner = UnitInner0.unset_inner - clone CreuSat_Logic_LogicClause_Impl2_UnitInner as UnitInner0 with predicate UnitInner0.unit_inner = Unit0.unit_inner - clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner1 with predicate UnsatInner0.unsat_inner = Unsat1.unsat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicFormula_Impl2_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant2.watches_invariant_internal - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model5 with function Model0.model = Invariant0.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.creusat_clause_clause, type i = usize, - type a = Type.alloc_alloc_global - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToLit as ClausePostWithRegardsToLit0 - clone CreuSat_Logic_LogicClause_Impl1_PostUnit as PostUnit0 - clone CreuSat_Logic_LogicClause_Impl2_Unit as Unit0 - clone CreuSat_Logic_LogicLit_Impl1_Unset as Unset0 - clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 - clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat1 - clone CreuSat_Logic_LogicFormula_Impl2_Unsat as Unsat0 - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . - clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic as ToWatchidxLogic0 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - clone CreuSat_Logic_LogicLit_Impl1_IdxInTrail as IdxInTrail0 with predicate IdxInTrail0.idx_in_trail = EnqAssignment0.idx_in_trail - clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat2 with predicate Unsat0.unsat = ExistsNewWatchableLit0.unsat, - predicate Unsat0.unsat = EnqAssignment0.unsat - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy5 with type t = Type.creusat_watches_watcher - clone Core_Slice_Index_Impl2_Output as Output2 with type t = Type.creusat_watches_watcher, - type Output0.output = IndexMut1.output - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere1 with type t = Type.creusat_watches_watcher, - predicate ResolveElswhere0.resolve_elswhere = IndexMut1.resolve_elswhere - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue2 with type t = Type.creusat_watches_watcher, - predicate HasValue0.has_value = IndexMut1.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds2 with type t = Type.creusat_watches_watcher, - predicate InBounds0.in_bounds = IndexMut1.in_bounds - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy4 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone Core_Slice_Index_Impl2_Output as Output1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type Output0.output = IndexMut0.output - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - predicate HasValue0.has_value = IndexMut0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - predicate InBounds0.in_bounds = IndexMut0.in_bounds - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy3 with type ModelTy0.modelTy = Model12.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model12 with type t = Type.creusat_assignments_assignments, - function Model0.model = LitSat0.model, function Model0.model = LitUnset0.model - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy2 with type ModelTy0.modelTy = Model11.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_clause_clause, - function Model0.model = Index2.model - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model10.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model10 with type t = Type.creusat_formula_formula, - function Model0.model = Index1.model - clone CreuSat_UnitProp_Swap_Interface as Swap0 - clone CreuSat_Trail_Impl0_EnqAssignment_Interface as EnqAssignment0 - clone CreuSat_Trail_Impl0_DecisionLevel_Interface as DecisionLevel0 - clone CreuSat_Lit_Impl1_LitUnset_Interface as LitUnset0 - clone CreuSat_UnitProp_ExistsNewWatchableLit_Interface as ExistsNewWatchableLit0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve4 with type t = Type.creusat_watches_watcher - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut1 with type t = Type.creusat_watches_watcher, type i = usize, - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve3 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type i = usize, type a = Type.alloc_alloc_global - clone CreuSat_Lit_Impl1_ToWatchidx_Interface as ToWatchidx0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_watches_watches - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_trail_trail - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula - clone CreuSat_Lit_Impl1_LitSat_Interface as LitSat0 - clone CreuSat_Clause_Impl0_Index_Interface as Index2 - clone CreuSat_Formula_Impl0_Index_Interface as Index1 - let rec cfg propagate_lit_with_regard_to_clause [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 166 0 168 24] (f : borrowed (Type.creusat_formula_formula)) (trail : borrowed (Type.creusat_trail_trail)) (watches : borrowed (Type.creusat_watches_watches)) (cref : usize) (lit : Type.creusat_lit_lit) (j : usize) : Type.core_result_result bool usize - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 149 0 149 33] Invariant0.invariant' ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 150 0 150 42] Invariant1.invariant' ( * trail) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 151 0 151 44] Invariant2.invariant' ( * watches) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 152 0 152 63] ToWatchidxLogic0.to_watchidx_logic lit < Seq.length (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 153 0 153 70] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 154 0 154 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 155 0 155 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 156 0 156 39] UInt64.to_int cref < Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 157 0 157 46] Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) >= 2} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 149 0 149 33] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 150 0 150 42] Invariant1.invariant' ( ^ trail) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 151 0 151 44] Invariant2.invariant' ( ^ watches) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 158 0 158 49] Type.creusat_trail_trail_Trail_decisions ( ^ trail) = Type.creusat_trail_trail_Trail_decisions ( * trail) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 159 0 163 3] match (result) with - | Type.Core_Result_Result_Ok (True) -> true - | Type.Core_Result_Result_Ok (False) -> Seq.length (Model4.model (Type.creusat_trail_trail_Trail_trail ( ^ trail))) = Seq.length (Model4.model (Type.creusat_trail_trail_Trail_trail ( * trail))) - | Type.Core_Result_Result_Err n -> UInt64.to_int n < Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) && Unsat0.unsat ( ^ f) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) && Unsat1.unsat (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int n)) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) - end } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 164 0 164 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 165 0 165 25] Equisat0.equisat ( * f) ( ^ f) } + use mach.int.UInt64 + use seq.Seq + clone CreuSat_Logic_LogicLit_Impl1_SatInner_Interface as SatInner0 + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner_Interface as UnsatInner0 + clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model2 + clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + predicate invariant_reason_new [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 27 4 27 73] (self : Type.creusat_trail_reason) (f : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) = - var _0 : Type.core_result_result bool usize; - var f_1 : borrowed (Type.creusat_formula_formula); - var trail_2 : borrowed (Type.creusat_trail_trail); - var watches_3 : borrowed (Type.creusat_watches_watches); - var cref_4 : usize; - var lit_5 : Type.creusat_lit_lit; - var j_6 : usize; - ghost var old_w_7 : borrowed (Type.creusat_watches_watches); - var _8 : (); - var clause_9 : Type.creusat_clause_clause; - var _10 : Type.creusat_clause_clause; - var _11 : Type.creusat_formula_formula; - var _12 : usize; - var first_lit_13 : Type.creusat_lit_lit; - var _14 : Type.creusat_lit_lit; - var _15 : Type.creusat_clause_clause; - var _16 : (); - var _17 : bool; - var _18 : Type.creusat_lit_lit; - var _19 : Type.creusat_assignments_assignments; - var _20 : Type.creusat_assignments_assignments; - var _21 : (); - var _22 : (); - var _23 : (); - var _24 : Type.creusat_lit_lit; - var _25 : borrowed (Type.creusat_watches_watcher); - var _26 : borrowed (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)); - var _27 : borrowed (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)); - var _28 : borrowed (Type.alloc_vec_vec (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)) (Type.alloc_alloc_global)); - var _29 : usize; - var _30 : Type.creusat_lit_lit; - var _31 : usize; - var second_lit_32 : Type.creusat_lit_lit; - var _33 : Type.creusat_lit_lit; - var _34 : Type.creusat_clause_clause; - var _35 : (); - var _36 : bool; - var _37 : Type.creusat_lit_lit; - var _38 : Type.creusat_assignments_assignments; - var _39 : Type.creusat_assignments_assignments; - var _40 : (); - var _41 : (); - var _42 : (); - var _43 : Type.creusat_lit_lit; - var _44 : borrowed (Type.creusat_watches_watcher); - var _45 : borrowed (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)); - var _46 : borrowed (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)); - var _47 : borrowed (Type.alloc_vec_vec (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)) (Type.alloc_alloc_global)); - var _48 : usize; - var _49 : Type.creusat_lit_lit; - var _50 : usize; - var _51 : (); - var _52 : bool; - var _53 : borrowed (Type.creusat_formula_formula); - var _54 : Type.creusat_trail_trail; - var _55 : borrowed (Type.creusat_watches_watches); - var _56 : usize; - var _57 : usize; - var _58 : Type.creusat_lit_lit; - var _59 : (); - var _60 : (); - var _61 : bool; - var _62 : Type.creusat_lit_lit; - var _63 : Type.creusat_assignments_assignments; - var _64 : Type.creusat_assignments_assignments; - var _65 : (); - var _66 : (); - var _67 : bool; - var _68 : Type.creusat_lit_lit; - var _69 : Type.creusat_assignments_assignments; - var _70 : Type.creusat_assignments_assignments; - var _71 : (); - var _72 : (); - var _73 : (); - var _74 : (); - var step_75 : Type.creusat_trail_step; - var _76 : Type.creusat_lit_lit; - var _77 : usize; - var _78 : Type.creusat_trail_trail; - var _79 : Type.creusat_trail_reason; - var _80 : usize; - var _81 : (); - var _82 : borrowed (Type.creusat_trail_trail); - var _83 : Type.creusat_trail_step; - var _84 : Type.creusat_formula_formula; - var _85 : (); - var _86 : (); - var _87 : bool; - var _88 : Type.creusat_lit_lit; - var _89 : Type.creusat_assignments_assignments; - var _90 : Type.creusat_assignments_assignments; - var _91 : (); - var step_92 : Type.creusat_trail_step; - var _93 : Type.creusat_lit_lit; - var _94 : usize; - var _95 : Type.creusat_trail_trail; - var _96 : Type.creusat_trail_reason; - var _97 : usize; - ghost var old_c_98 : Type.creusat_clause_clause; - var _99 : (); - var _100 : (); - var _101 : (); - var _102 : borrowed (Type.creusat_formula_formula); - var _103 : Type.creusat_trail_trail; - var _104 : Type.creusat_watches_watches; - var _105 : usize; - var _106 : (); - var _107 : (); - var _108 : (); - var _109 : borrowed (Type.creusat_trail_trail); - var _110 : Type.creusat_trail_step; - var _111 : Type.creusat_formula_formula; - var _112 : (); - var _113 : (); - var _114 : (); - var _115 : usize; - { - f_1 <- f; - trail_2 <- trail; - watches_3 <- watches; - cref_4 <- cref; - lit_5 <- lit; - j_6 <- j; - goto BB0 - } - BB0 { - _8 <- (); - old_w_7 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 169 16 169 34] watches_3); - goto BB1 - } - BB1 { - _11 <- * f_1; - _12 <- cref_4; - _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 170 18 170 25] Index1.index _11 _12); - goto BB2 - } - BB2 { - clause_9 <- _10; - _15 <- clause_9; - _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 171 20 171 29] Index2.index _15 (0 : usize)); - goto BB3 - } - BB3 { - first_lit_13 <- _14; - _18 <- first_lit_13; - _20 <- Type.creusat_trail_trail_Trail_assignments ( * trail_2); - _19 <- _20; - _17 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 172 7 172 44] LitSat0.lit_sat _18 _19); - goto BB4 - } - BB4 { - switch (_17) - | False -> goto BB9 - | _ -> goto BB5 - end - } - BB5 { - assume { Resolve0.resolve f_1 }; - assume { Resolve1.resolve trail_2 }; - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 174 8 174 49] ^ watches_3 = ^ old_w_7 }; - _22 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 175 8 175 60] IndexLogic0.index_logic first_lit_13 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f_1)) }; - _23 <- (); - _24 <- first_lit_13; - _28 <- borrow_mut (Type.creusat_watches_watches_Watches_watches ( * watches_3)); - watches_3 <- { watches_3 with current = (let Type.CreuSat_Watches_Watches a = * watches_3 in Type.CreuSat_Watches_Watches ( ^ _28)) }; - assume { Resolve2.resolve watches_3 }; - _30 <- lit_5; - _29 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 176 24 176 41] ToWatchidx0.to_watchidx _30); - goto BB6 - } - BB6 { - _27 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 176 8 176 42] IndexMut0.index_mut _28 _29); - goto BB7 - } - BB7 { - _26 <- borrow_mut ( * _27); - _27 <- { _27 with current = ( ^ _26) }; - assume { Resolve3.resolve _27 }; - _31 <- j_6; - _25 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 176 8 176 45] IndexMut1.index_mut _26 _31); - goto BB8 - } - BB8 { - _25 <- { _25 with current = (let Type.CreuSat_Watches_Watcher a b = * _25 in Type.CreuSat_Watches_Watcher a _24) }; - assume { Resolve4.resolve _25 }; - _0 <- Type.Core_Result_Result_Ok true; - goto BB38 - } - BB9 { - _16 <- (); - _34 <- clause_9; - _33 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 179 21 179 30] Index2.index _34 (1 : usize)); - goto BB10 - } - BB10 { - second_lit_32 <- _33; - _37 <- second_lit_32; - _39 <- Type.creusat_trail_trail_Trail_assignments ( * trail_2); - _38 <- _39; - _36 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 180 7 180 45] LitSat0.lit_sat _37 _38); - goto BB11 - } - BB11 { - switch (_36) - | False -> goto BB16 - | _ -> goto BB12 - end - } - BB12 { - assume { Resolve0.resolve f_1 }; - assume { Resolve1.resolve trail_2 }; - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 182 8 182 49] ^ watches_3 = ^ old_w_7 }; - _41 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 183 8 183 61] IndexLogic0.index_logic second_lit_32 < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f_1)) }; - _42 <- (); - _43 <- second_lit_32; - _47 <- borrow_mut (Type.creusat_watches_watches_Watches_watches ( * watches_3)); - watches_3 <- { watches_3 with current = (let Type.CreuSat_Watches_Watches a = * watches_3 in Type.CreuSat_Watches_Watches ( ^ _47)) }; - assume { Resolve2.resolve watches_3 }; - _49 <- lit_5; - _48 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 184 24 184 41] ToWatchidx0.to_watchidx _49); - goto BB13 - } - BB13 { - _46 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 184 8 184 42] IndexMut0.index_mut _47 _48); - goto BB14 - } - BB14 { - _45 <- borrow_mut ( * _46); - _46 <- { _46 with current = ( ^ _45) }; - assume { Resolve3.resolve _46 }; - _50 <- j_6; - _44 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 184 8 184 45] IndexMut1.index_mut _45 _50); - goto BB15 - } - BB15 { - _44 <- { _44 with current = (let Type.CreuSat_Watches_Watcher a b = * _44 in Type.CreuSat_Watches_Watcher a _43) }; - assume { Resolve4.resolve _44 }; - _0 <- Type.Core_Result_Result_Ok true; - goto BB37 - } - BB16 { - _35 <- (); - _53 <- borrow_mut ( * f_1); - f_1 <- { f_1 with current = ( ^ _53) }; - _54 <- * trail_2; - _55 <- borrow_mut ( * watches_3); - watches_3 <- { watches_3 with current = ( ^ _55) }; - _56 <- cref_4; - _57 <- j_6; - _58 <- lit_5; - _52 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 188 7 188 64] ExistsNewWatchableLit0.exists_new_watchable_lit _53 _54 _55 _56 _57 _58); - goto BB17 - } - BB17 { - switch (_52) - | False -> goto BB19 - | _ -> goto BB18 - end - } - BB18 { - assume { Resolve0.resolve f_1 }; - assume { Resolve1.resolve trail_2 }; - assume { Resolve2.resolve watches_3 }; - _0 <- Type.Core_Result_Result_Ok false; - goto BB37 - } - BB19 { - _51 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 192 4 192 175] Unsat1.unsat (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4)) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) || Unset0.unset (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) 0) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) || Unset0.unset (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) 1) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) }; - _60 <- (); - _62 <- first_lit_13; - _64 <- Type.creusat_trail_trail_Trail_assignments ( * trail_2); - _63 <- _64; - _61 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 193 7 193 46] LitUnset0.lit_unset _62 _63); - goto BB20 - } - BB20 { - switch (_61) - | False -> goto BB27 - | _ -> goto BB21 - end - } - BB21 { - assume { Resolve2.resolve watches_3 }; - _68 <- second_lit_32; - _70 <- Type.creusat_trail_trail_Trail_assignments ( * trail_2); - _69 <- _70; - _67 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 196 11 196 51] LitUnset0.lit_unset _68 _69); - goto BB22 - } - BB22 { - switch (_67) - | False -> goto BB24 - | _ -> goto BB23 - end - } - BB23 { - assume { Resolve0.resolve f_1 }; - assume { Resolve1.resolve trail_2 }; - _0 <- Type.Core_Result_Result_Ok true; - goto BB36 - } - BB24 { - _66 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 199 8 199 42] Invariant1.invariant' ( * trail_2) ( * f_1) }; - _72 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 200 8 200 68] not Unsat1.unsat (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4)) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) }; - _73 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 201 8 201 66] Unit0.unit (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4)) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) }; - _74 <- (); - _76 <- first_lit_13; - _78 <- * trail_2; - _77 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 205 28 205 50] DecisionLevel0.decision_level _78); - goto BB25 - } - BB25 { - _80 <- cref_4; - _79 <- Type.CreuSat_Trail_Reason_Long _80; - step_75 <- Type.CreuSat_Trail_Step _76 _77 _79; - _82 <- borrow_mut ( * trail_2); - trail_2 <- { trail_2 with current = ( ^ _82) }; - _83 <- step_75; - _84 <- * f_1; - assume { Resolve0.resolve f_1 }; - _81 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 209 8 209 37] EnqAssignment0.enq_assignment _82 _83 _84); - goto BB26 - } - BB26 { - assume { Resolve1.resolve trail_2 }; - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 210 8 210 81] PostUnit0.post_unit (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4)) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) && true }; - _85 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 211 8 211 107] ClausePostWithRegardsToLit0.clause_post_with_regards_to_lit (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4)) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) first_lit_13 }; - _86 <- (); - _0 <- Type.Core_Result_Result_Ok true; - goto BB36 - } - BB27 { - _88 <- second_lit_32; - _90 <- Type.creusat_trail_trail_Trail_assignments ( * trail_2); - _89 <- _90; - _87 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 213 14 213 54] LitUnset0.lit_unset _88 _89); - goto BB28 - } - BB28 { - switch (_87) - | False -> goto BB34 - | _ -> goto BB29 + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 28 8 42 9] match (self) with + | Type.CreuSat_Trail_Reason_Long cref -> 0 <= UInt64.to_int cref /\ UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) /\ Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) > 1 /\ (forall i : (int) . 1 <= i /\ i < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) -> UnsatInner0.unsat_inner (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) i) (Model2.model a)) /\ SatInner0.sat_inner (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) 0) (Model2.model a) + | Type.CreuSat_Trail_Reason_Unit cref -> 0 <= UInt64.to_int cref /\ UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) /\ Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) = 1 /\ SatInner0.sat_inner (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) 0) (Model2.model a) + | _ -> true end - } - BB29 { - _93 <- second_lit_32; - _95 <- * trail_2; - _94 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 214 59 214 81] DecisionLevel0.decision_level _95); - goto BB30 - } - BB30 { - _97 <- cref_4; - _96 <- Type.CreuSat_Trail_Reason_Long _97; - step_92 <- Type.CreuSat_Trail_Step _93 _94 _96; - _99 <- (); - old_c_98 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 215 20 215 46] Index0.index (Type.creusat_formula_formula_Formula_clauses ( * f_1)) cref_4); - goto BB31 - } - BB31 { - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 216 8 216 73] Unset0.unset (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) 1) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) }; - _100 <- (); - _102 <- borrow_mut ( * f_1); - f_1 <- { f_1 with current = ( ^ _102) }; - _103 <- * trail_2; - _104 <- * watches_3; - assume { Resolve2.resolve watches_3 }; - _105 <- cref_4; - _101 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 217 8 217 43] Swap0.swap _102 _103 _104 _105 (0 : usize) (1 : usize)); - goto BB32 - } - BB32 { - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 218 8 218 68] Permut.exchange (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) (Model3.model old_c_98) 0 1 }; - _106 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 219 8 219 73] Unset0.unset (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4))) 0) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) }; - _107 <- (); - _109 <- borrow_mut ( * trail_2); - trail_2 <- { trail_2 with current = ( ^ _109) }; - _110 <- step_92; - _111 <- * f_1; - assume { Resolve0.resolve f_1 }; - _108 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 220 8 220 37] EnqAssignment0.enq_assignment _109 _110 _111); - goto BB33 - } - BB33 { - assume { Resolve1.resolve trail_2 }; - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 221 8 221 73] PostUnit0.post_unit (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4)) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) }; - _112 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 222 8 222 108] ClausePostWithRegardsToLit0.clause_post_with_regards_to_lit (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f_1))) (UInt64.to_int cref_4)) (Type.creusat_trail_trail_Trail_assignments ( * trail_2)) second_lit_32 }; - _113 <- (); - _0 <- Type.Core_Result_Result_Ok true; - goto BB35 - } - BB34 { - assume { Resolve0.resolve f_1 }; - assume { Resolve1.resolve trail_2 }; - assume { Resolve2.resolve watches_3 }; - _115 <- cref_4; - _0 <- Type.Core_Result_Result_Err _115; - goto BB35 - } - BB35 { - goto BB36 - } - BB36 { - goto BB37 - } - BB37 { - goto BB38 - } - BB38 { - return _0 - } - end -module CreuSat_UnitProp_PropagateLiteral_Interface +module CreuSat_Logic_LogicTrail_Impl2_NewPostUnit_Interface + use Type + predicate new_post_unit (self : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) +end +module CreuSat_Logic_LogicTrail_Impl2_NewPostUnit + use Type + use mach.int.Int + use mach.int.Int32 + use seq.Seq + clone CreuSat_Logic_LogicTrail_Impl0_InvariantReasonNew_Interface as InvariantReasonNew0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, axiom . + predicate new_post_unit [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 105 4 105 50] (self : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 106 8 109 9] forall j : (int) . 0 <= j /\ j < Seq.length (Model0.model (Type.creusat_trail_trail_Trail_trail self)) -> InvariantReasonNew0.invariant_reason_new (Type.creusat_trail_step_Step_reason (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_trail self)) j)) f (Type.creusat_trail_trail_Trail_assignments self) +end +module CreuSat_Logic_LogicTrail_ClausePostWithRegardsTo_Interface + use Type + use mach.int.Int + predicate clause_post_with_regards_to (c : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) (j : int) + +end +module CreuSat_Logic_LogicTrail_ClausePostWithRegardsTo + use Type + use mach.int.Int + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner_Interface as ClausePostWithRegardsToInner0 + clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 + predicate clause_post_with_regards_to [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 187 0 187 77] (c : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) (j : int) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 188 4 190 5] ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner c (Model0.model a) j +end +module CreuSat_Logic_LogicTrail_ClausePostWithRegardsToLit_Interface + use Type + predicate clause_post_with_regards_to_lit (c : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) (lit : Type.creusat_lit_lit) + +end +module CreuSat_Logic_LogicTrail_ClausePostWithRegardsToLit + use Type use mach.int.UInt64 + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner_Interface as ClausePostWithRegardsToInner0 + clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 + predicate clause_post_with_regards_to_lit [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 203 0 203 83] (c : Type.creusat_clause_clause) (a : Type.creusat_assignments_assignments) (lit : Type.creusat_lit_lit) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 204 4 206 5] ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner c (Model0.model a) (UInt64.to_int (Type.creusat_lit_lit_Lit_idx lit)) +end +module CreuSat_Logic_LogicTrail_LongArePostUnit_Interface + use Type + predicate long_are_post_unit (trail : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) +end +module CreuSat_Logic_LogicTrail_LongArePostUnit + use Type use mach.int.Int - use prelude.Prelude use mach.int.Int32 - use Type use seq.Seq - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 - clone CreuSat_Logic_LogicClause_Impl2_Unsat_Interface as Unsat1 - clone CreuSat_Logic_LogicFormula_Impl2_Unsat_Interface as Unsat0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, axiom . + use mach.int.UInt64 + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsTo_Interface as ClausePostWithRegardsTo0 clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val propagate_literal [@cfg:stackify] (f : borrowed (Type.creusat_formula_formula)) (trail : borrowed (Type.creusat_trail_trail)) (watches : borrowed (Type.creusat_watches_watches)) (lit : Type.creusat_lit_lit) : Type.core_result_result () usize - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 230 0 230 33] Invariant0.invariant' ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 231 0 231 42] Invariant1.invariant' ( * trail) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 232 0 232 44] Invariant2.invariant' ( * watches) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 233 0 233 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 234 0 234 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 230 0 230 33] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 231 0 231 42] Invariant1.invariant' ( ^ trail) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 232 0 232 44] Invariant2.invariant' ( ^ watches) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 235 0 238 3] match (result) with - | Type.Core_Result_Result_Ok () -> true - | Type.Core_Result_Result_Err n -> UInt64.to_int n < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) && Unsat0.unsat ( ^ f) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) && Unsat1.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int n)) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) - end } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 239 0 239 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 240 0 240 25] Equisat0.equisat ( * f) ( ^ f) } + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, axiom . + predicate long_are_post_unit [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 219 0 219 59] (trail : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 220 4 226 5] forall j : (int) . 0 <= j /\ j < Seq.length (Model0.model (Type.creusat_trail_trail_Trail_trail trail)) -> match (Type.creusat_trail_step_Step_reason (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_trail trail)) j)) with + | Type.CreuSat_Trail_Reason_Long k -> ClausePostWithRegardsTo0.clause_post_with_regards_to (Seq.get (Model1.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int k)) (Type.creusat_trail_trail_Trail_assignments trail) (IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_trail trail)) j))) + | _ -> true + end end -module CreuSat_UnitProp_PropagateLiteral +module CreuSat_Logic_LogicTrail_LemmaAssignMaintainsLongArePostUnit_Interface use mach.int.UInt64 + use seq.Seq use mach.int.Int use prelude.Prelude - use mach.int.Int32 + use prelude.UInt8 use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner_Interface as LongArePostUnitInner0 + clone CreuSat_Logic_Logic_Unset_Interface as Unset0 + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 + clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 + clone CreuSat_Logic_LogicLit_Impl1_Invariant_Interface as Invariant2 + clone CreuSat_Logic_LogicTrail_CrefsInRange_Interface as CrefsInRange0 + clone CreuSat_Logic_LogicTrail_TrailInvariant_Interface as TrailInvariant0 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant1 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant_Interface as Invariant0 + function lemma_assign_maintains_long_are_post_unit (v : Seq.seq (Type.creusat_trail_step)) (f : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) (lit : Type.creusat_lit_lit) : () + +end +module CreuSat_Logic_LogicTrail_LemmaAssignMaintainsLongArePostUnit + use mach.int.UInt64 use seq.Seq + use mach.int.Int + use prelude.Prelude use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner2.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = Invariant6.index_logic, function IndexLogic0.index_logic = SatInner1.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = UnsatInner2.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model6.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model6 with function Model1.model = InvariantMirror0.model, - function Model0.model = FormulaInvariant0.model, function Model2.model = WatchesInvariantInternal0.model, - function Model0.model = UnsatInner1.model, function Model0.model = Invariant3.model, - function Model1.model = UnitAreSat0.model, function Model0.model = LitIdxIn0.model, - function Model0.model = ClausePostWithRegardsToInner0.model, function Model1.model = Invariant7.model, - function Model0.model = SatInner2.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, - function Model0.model = Model3.model, function Model3.model = InvariantNoDecisionMirror0.model, - function Model1.model = WatchesInvariantInternal0.model, function Model0.model = UnsatInner0.model, - function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, - function Model0.model = SatInner0.model, function Model0.model = LitNotInLessInner0.model, - function Model0.model = Invariant7.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner2 with predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner, - predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal - clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model5.model, axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model5 with function Model0.model = Unsat0.model, - function Model0.model = Unsat1.model, function Model2.model = InvariantNoDecision0.model, - function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant4.model, - function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner1 with predicate UnsatInner0.unsat_inner = Unsat1.unsat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicFormula_Impl2_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant2.watches_invariant_internal - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, + use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner_Interface as LongArePostUnitInner0 + clone CreuSat_Logic_Logic_Unset_Interface as Unset0 + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 + clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 + clone CreuSat_Logic_LogicLit_Impl1_Invariant_Interface as Invariant2 + clone CreuSat_Logic_LogicTrail_CrefsInRange_Interface as CrefsInRange0 + clone CreuSat_Logic_LogicTrail_TrailInvariant_Interface as TrailInvariant0 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant1 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, axiom . - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model3 with function Model0.model = Invariant0.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . - clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 - clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat1 - clone CreuSat_Logic_LogicFormula_Impl2_Unsat as Unsat0 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - use mach.int.Int64 - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy2 with type ModelTy0.modelTy = Model10.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model10 with type t = Type.creusat_assignments_assignments, - function Model0.model = LitSat0.model - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_watches_watcher - clone Core_Slice_Index_Impl2_Output as Output1 with type t = Type.creusat_watches_watcher, - type Output0.output = Index1.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue1 with type t = Type.creusat_watches_watcher, - predicate HasValue0.has_value = Index1.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds1 with type t = Type.creusat_watches_watcher, - predicate InBounds0.in_bounds = Index1.in_bounds - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type Output0.output = Index0.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - predicate HasValue0.has_value = Index0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - predicate InBounds0.in_bounds = Index0.in_bounds - clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic as ToWatchidxLogic0 with function ToWatchidxLogic0.to_watchidx_logic = ToWatchidx0.to_watchidx_logic, - function ToWatchidxLogic0.to_watchidx_logic = PropagateLitWithRegardToClause0.to_watchidx_logic - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_watches_watches - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_trail_trail - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula - clone CreuSat_UnitProp_PropagateLitWithRegardToClause_Interface as PropagateLitWithRegardToClause0 - clone CreuSat_Lit_Impl1_LitSat_Interface as LitSat0 - clone Alloc_Vec_Impl16_Index_Interface as Index1 with type t = Type.creusat_watches_watcher, type i = usize, - type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type i = usize, type a = Type.alloc_alloc_global - clone CreuSat_Lit_Impl1_ToWatchidx_Interface as ToWatchidx0 - let rec cfg propagate_literal [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 241 0 241 110] (f : borrowed (Type.creusat_formula_formula)) (trail : borrowed (Type.creusat_trail_trail)) (watches : borrowed (Type.creusat_watches_watches)) (lit : Type.creusat_lit_lit) : Type.core_result_result () usize - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 230 0 230 33] Invariant0.invariant' ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 231 0 231 42] Invariant1.invariant' ( * trail) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 232 0 232 44] Invariant2.invariant' ( * watches) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 233 0 233 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 234 0 234 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 230 0 230 33] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 231 0 231 42] Invariant1.invariant' ( ^ trail) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 232 0 232 44] Invariant2.invariant' ( ^ watches) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 235 0 238 3] match (result) with - | Type.Core_Result_Result_Ok () -> true - | Type.Core_Result_Result_Err n -> UInt64.to_int n < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) && Unsat0.unsat ( ^ f) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) && Unsat1.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int n)) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) - end } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 239 0 239 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 240 0 240 25] Equisat0.equisat ( * f) ( ^ f) } + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant_Interface as Invariant0 + function lemma_assign_maintains_long_are_post_unit [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 264 0 264 100] (v : Seq.seq (Type.creusat_trail_step)) (f : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) (lit : Type.creusat_lit_lit) : () = - var _0 : Type.core_result_result () usize; - var f_1 : borrowed (Type.creusat_formula_formula); - var trail_2 : borrowed (Type.creusat_trail_trail); - var watches_3 : borrowed (Type.creusat_watches_watches); - var lit_4 : Type.creusat_lit_lit; - var j_5 : usize; - var watchidx_6 : usize; - var _7 : Type.creusat_lit_lit; - var _8 : (); - var _9 : (); - ghost var old_trail_10 : borrowed (Type.creusat_trail_trail); - var _11 : (); - ghost var old_f_12 : borrowed (Type.creusat_formula_formula); - var _13 : (); - ghost var old_w_14 : borrowed (Type.creusat_watches_watches); - var _15 : (); - var _16 : (); - var _17 : (); - var _18 : bool; - var _19 : usize; - var _20 : usize; - var _21 : Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global); - var _22 : Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global); - var _23 : Type.alloc_vec_vec (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)) (Type.alloc_alloc_global); - var _24 : usize; - var curr_watch_25 : Type.creusat_watches_watcher; - var _26 : Type.creusat_watches_watcher; - var _27 : Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global); - var _28 : Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global); - var _29 : Type.alloc_vec_vec (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)) (Type.alloc_alloc_global); - var _30 : usize; - var _31 : usize; - var _32 : bool; - var _33 : Type.creusat_lit_lit; - var _34 : Type.creusat_assignments_assignments; - var _35 : Type.creusat_assignments_assignments; - var cref_36 : usize; - var _37 : Type.core_result_result bool usize; - var _38 : borrowed (Type.creusat_formula_formula); - var _39 : borrowed (Type.creusat_trail_trail); - var _40 : borrowed (Type.creusat_watches_watches); - var _41 : usize; - var _42 : Type.creusat_lit_lit; - var _43 : usize; - var _44 : isize; - var cref_45 : usize; - var _46 : (); - var _47 : usize; - var _48 : (); - var _49 : (); - var _50 : (); - var _51 : (); - { - f_1 <- f; - trail_2 <- trail; - watches_3 <- watches; - lit_4 <- lit; - goto BB0 - } - BB0 { - j_5 <- (0 : usize); - _7 <- lit_4; - watchidx_6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 243 19 243 36] ToWatchidx0.to_watchidx _7); - goto BB1 - } - BB1 { - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 244 4 244 62] Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) = 2 * UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f_1)) }; - _8 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 245 4 245 55] Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) > UInt64.to_int watchidx_6 }; - _9 <- (); - _11 <- (); - old_trail_10 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 246 20 246 36] trail_2); - goto BB2 - } - BB2 { - _13 <- (); - old_f_12 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 247 16 247 28] f_1); - goto BB3 - } - BB3 { - _15 <- (); - old_w_14 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 248 16 248 34] watches_3); - goto BB4 - } - BB4 { - goto BB5 - } - BB5 { - invariant trail_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 249 4 249 48] Invariant1.invariant' ( * trail_2) ( * f_1) }; - invariant watch_len { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 250 4 250 79] Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) = Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * old_w_14))) }; - invariant watch_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 251 4 251 50] Invariant2.invariant' ( * watches_3) ( * f_1) }; - invariant f_equi { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 252 4 252 43] Equisat0.equisat ( * old_f_12) ( * f_1) }; - invariant f_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 253 4 253 38] Invariant0.invariant' ( * f_1) }; - invariant dec_unch { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 254 4 254 72] Model2.model (Type.creusat_trail_trail_Trail_decisions ( * trail_2)) = Model2.model (Type.creusat_trail_trail_Trail_decisions ( * old_trail_10)) }; - invariant nvars_unch { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 255 4 255 60] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f_1)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * old_f_12)) }; - invariant proph_t { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 256 4 256 55] ^ trail_2 = ^ old_trail_10 }; - invariant proph_f { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 257 4 257 47] ^ f_1 = ^ old_f_12 }; - invariant proph_w { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 258 4 258 53] ^ watches_3 = ^ old_w_14 }; - _19 <- j_5; - _23 <- Type.creusat_watches_watches_Watches_watches ( * watches_3); - _24 <- watchidx_6; - _22 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 259 14 259 39] Index0.index _23 _24); - goto BB6 - } - BB6 { - _21 <- _22; - _20 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 259 14 259 45] Len0.len _21); - goto BB7 - } - BB7 { - _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 259 10 259 45] _19 < _20); - switch (_18) - | False -> goto BB22 - | _ -> goto BB8 - end - } - BB8 { - _29 <- Type.creusat_watches_watches_Watches_watches ( * watches_3); - _30 <- watchidx_6; - _28 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 260 26 260 51] Index0.index _29 _30); - goto BB9 - } - BB9 { - _27 <- _28; - _31 <- j_5; - _26 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 260 26 260 54] Index1.index _27 _31); - goto BB10 - } - BB10 { - curr_watch_25 <- _26; - _33 <- Type.creusat_watches_watcher_Watcher_blocker curr_watch_25; - _35 <- Type.creusat_trail_trail_Trail_assignments ( * trail_2); - _34 <- _35; - _32 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 261 11 261 57] LitSat0.lit_sat _33 _34); - goto BB11 - } - BB11 { - switch (_32) - | False -> goto BB13 - | _ -> goto BB12 - end - } - BB12 { - j_5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 262 12 262 18] j_5 + (1 : usize)); - _17 <- (); - goto BB21 - } - BB13 { - cref_36 <- Type.creusat_watches_watcher_Watcher_cref curr_watch_25; - _38 <- borrow_mut ( * f_1); - f_1 <- { f_1 with current = ( ^ _38) }; - _39 <- borrow_mut ( * trail_2); - trail_2 <- { trail_2 with current = ( ^ _39) }; - _40 <- borrow_mut ( * watches_3); - watches_3 <- { watches_3 with current = ( ^ _40) }; - _41 <- cref_36; - _42 <- lit_4; - _43 <- j_5; - _37 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 265 18 265 86] PropagateLitWithRegardToClause0.propagate_lit_with_regard_to_clause _38 _39 _40 _41 _42 _43); - goto BB14 - } - BB14 { - switch (_37) - | Type.Core_Result_Result_Ok _ -> goto BB15 - | Type.Core_Result_Result_Err _ -> goto BB16 - end - } - BB15 { - switch (Type.core_result_result_Ok_0 _37) - | False -> goto BB19 - | _ -> goto BB18 - end - } - BB16 { - assume { Resolve0.resolve f_1 }; - assume { Resolve1.resolve trail_2 }; - assume { Resolve2.resolve watches_3 }; - cref_45 <- Type.core_result_result_Err_0 _37; - _47 <- cref_45; - _0 <- Type.Core_Result_Result_Err _47; - goto BB23 - } - BB17 { - assume { Resolve0.resolve f_1 }; - assume { Resolve1.resolve trail_2 }; - assume { Resolve2.resolve watches_3 }; - absurd - } - BB18 { - j_5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 267 20 267 26] j_5 + (1 : usize)); - _17 <- (); - goto BB20 - } - BB19 { - _17 <- (); - goto BB20 - } - BB20 { - goto BB21 - } - BB21 { - goto BB5 - } - BB22 { - assume { Resolve0.resolve f_1 }; - assume { Resolve1.resolve trail_2 }; - assume { Resolve2.resolve watches_3 }; - _16 <- (); - _51 <- (); - _0 <- Type.Core_Result_Result_Ok _51; - goto BB23 - } - BB23 { - return _0 - } - + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 254 0 254 8] () + axiom lemma_assign_maintains_long_are_post_unit_spec : forall v : Seq.seq (Type.creusat_trail_step), f : Type.creusat_formula_formula, a : Type.creusat_assignments_assignments, lit : Type.creusat_lit_lit . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 255 0 255 27] Invariant0.invariant' a f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 256 0 256 26] Invariant1.invariant' f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 257 0 257 34] TrailInvariant0.trail_invariant v f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 258 0 258 33] CrefsInRange0.crefs_in_range v f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 259 0 259 39] Invariant2.invariant' lit (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 260 0 260 43] Unset0.unset (Seq.get (Model0.model a) (IndexLogic0.index_logic lit))) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 261 0 261 47] LongArePostUnitInner0.long_are_post_unit_inner v f (Model0.model a)) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 263 0 263 76] LongArePostUnitInner0.long_are_post_unit_inner v f (Seq.set (Model0.model a) (IndexLogic0.index_logic lit) (0 : uint8))) && ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 262 0 262 76] LongArePostUnitInner0.long_are_post_unit_inner v f (Seq.set (Model0.model a) (IndexLogic0.index_logic lit) (1 : uint8))) +end +module CreuSat_Logic_LogicTrail_LemmaPushMaintainsLitNotInLess_Interface + use seq.Seq + use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicTrail_LitNotInLessInner_Interface as LitNotInLessInner0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl1_Invariant_Interface as Invariant2 + clone CreuSat_Logic_Logic_Unset_Interface as Unset0 + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 + clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + function lemma_push_maintains_lit_not_in_less (t : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) (step : Type.creusat_trail_step) : () + +end +module CreuSat_Logic_LogicTrail_LemmaPushMaintainsLitNotInLess + use seq.Seq + use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicTrail_LitNotInLessInner_Interface as LitNotInLessInner0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl1_Invariant_Interface as Invariant2 + clone CreuSat_Logic_Logic_Unset_Interface as Unset0 + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 + clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + function lemma_push_maintains_lit_not_in_less [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 274 0 274 77] (t : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) (step : Type.creusat_trail_step) : () + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 267 0 267 8] () + axiom lemma_push_maintains_lit_not_in_less_spec : forall t : Type.creusat_trail_trail, f : Type.creusat_formula_formula, step : Type.creusat_trail_step . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 268 0 268 26] Invariant0.invariant' f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 269 0 269 27] Invariant1.invariant' t f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 270 0 270 60] Unset0.unset (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments t)) (IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit step)))) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 271 0 271 30] Invariant2.invariant' step f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 272 0 272 47] LitNotInLessInner0.lit_not_in_less_inner (Model1.model (Type.creusat_trail_trail_Trail_trail t)) f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_trail.rs" 273 0 273 59] LitNotInLessInner0.lit_not_in_less_inner (Seq.snoc (Model1.model (Type.creusat_trail_trail_Trail_trail t)) step) f) end -module CreuSat_UnitProp_UnitPropagate_Interface +module CreuSat_Logic_LogicUtil_LastIdx_Interface + type t + use seq.Seq + use mach.int.Int + use mach.int.Int32 + function last_idx (s : Seq.seq t) : int +end +module CreuSat_Logic_LogicUtil_LastIdx + type t + use seq.Seq + use mach.int.Int + use mach.int.Int32 + function last_idx [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 77 0 77 36] (s : Seq.seq t) : int = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 78 4 78 27] Seq.length s - 1 + axiom last_idx_spec : forall s : Seq.seq t . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 76 0 76 24] Seq.length s > 0) -> true +end +module CreuSat_Logic_LogicUtil_LastElem_Interface + type t + use seq.Seq + use mach.int.Int + use mach.int.Int32 + function last_elem (s : Seq.seq t) : t +end +module CreuSat_Logic_LogicUtil_LastElem + type t + use seq.Seq + use mach.int.Int + use mach.int.Int32 + function last_elem [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 84 0 84 35] (s : Seq.seq t) : t = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 85 4 85 30] Seq.get s (Seq.length s - 1) + axiom last_elem_spec : forall s : Seq.seq t . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 83 0 83 24] Seq.length s > 0) -> true +end +module CreuSat_Logic_LogicUtil_LemmaPopMaintainsSorted_Interface + use seq.Seq + use mach.int.Int + use mach.int.Int32 + use prelude.Prelude use mach.int.UInt64 + clone CreuSat_Logic_LogicUtil_Pop_Interface as Pop0 with type t = usize, axiom . + clone CreuSat_Logic_LogicUtil_Sorted_Interface as Sorted0 + function lemma_pop_maintains_sorted (s : Seq.seq usize) : () +end +module CreuSat_Logic_LogicUtil_LemmaPopMaintainsSorted + use seq.Seq use mach.int.Int + use mach.int.Int32 use prelude.Prelude + use mach.int.UInt64 + clone CreuSat_Logic_LogicUtil_Pop_Interface as Pop0 with type t = usize, axiom . + clone CreuSat_Logic_LogicUtil_Sorted_Interface as Sorted0 + function lemma_pop_maintains_sorted [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 93 0 93 48] (s : Seq.seq usize) : () + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 88 0 88 8] () + axiom lemma_pop_maintains_sorted_spec : forall s : Seq.seq usize . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 90 0 90 24] Seq.length s > 0) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 91 0 91 22] Sorted0.sorted s) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_util.rs" 92 0 92 26] Sorted0.sorted (Pop0.pop s)) +end +module CreuSat_Logic_LogicWatches_WatchValid_Interface + use seq.Seq + use Type + predicate watch_valid (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) +end +module CreuSat_Logic_LogicWatches_WatchValid + use seq.Seq + use Type + use mach.int.Int use mach.int.Int32 + use mach.int.UInt64 + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 + clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + predicate watch_valid [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 25 0 25 55] (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 26 4 31 5] forall j : (int) . 0 <= j /\ j < Seq.length w -> UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref (Seq.get w j)) < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) /\ Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref (Seq.get w j))))) > 1 /\ IndexLogic0.index_logic (Type.creusat_watches_watcher_Watcher_blocker (Seq.get w j)) < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) +end +module CreuSat_Logic_LogicWatches_WatchesCrefsInRange_Interface + use seq.Seq use Type + predicate watches_crefs_in_range (w : Seq.seq (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global))) (f : Type.creusat_formula_formula) + +end +module CreuSat_Logic_LogicWatches_WatchesCrefsInRange use seq.Seq - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 - clone CreuSat_Logic_LogicClause_Impl2_Unsat_Interface as Unsat1 - clone CreuSat_Logic_LogicFormula_Impl2_Unsat_Interface as Unsat0 + use Type + use mach.int.Int + use mach.int.Int32 + clone CreuSat_Logic_LogicWatches_WatcherCrefsInRange_Interface as WatcherCrefsInRange0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, axiom . + predicate watches_crefs_in_range [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 43 0 43 71] (w : Seq.seq (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global))) (f : Type.creusat_formula_formula) + + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 44 4 47 5] forall i : (int) . 0 <= i /\ i < Seq.length w -> WatcherCrefsInRange0.watcher_crefs_in_range (Model0.model (Seq.get w i)) f +end +module CreuSat_Logic_LogicWatches_LemmaPushMaintainsWatcherInvariant_Interface + use mach.int.UInt64 + use seq.Seq + use mach.int.Int + use Type clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val unit_propagate [@cfg:stackify] (f : borrowed (Type.creusat_formula_formula)) (trail : borrowed (Type.creusat_trail_trail)) (watches : borrowed (Type.creusat_watches_watches)) : Type.core_result_result () usize - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 280 0 280 33] Invariant0.invariant' ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 281 0 281 42] Invariant1.invariant' ( * trail) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 282 0 282 44] Invariant2.invariant' ( * watches) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 283 0 283 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 280 0 280 33] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 281 0 281 42] Invariant1.invariant' ( ^ trail) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 282 0 282 44] Invariant2.invariant' ( ^ watches) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 284 0 287 3] match (result) with - | Type.Core_Result_Result_Ok () -> true - | Type.Core_Result_Result_Err n -> UInt64.to_int n < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) && Unsat0.unsat ( ^ f) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) && Unsat1.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int n)) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) - end } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 288 0 288 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 289 0 289 25] Equisat0.equisat ( * f) ( ^ f) } + clone CreuSat_Logic_LogicWatches_WatcherCrefsInRange_Interface as WatcherCrefsInRange0 + function lemma_push_maintains_watcher_invariant (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) (o : Type.creusat_watches_watcher) : () + +end +module CreuSat_Logic_LogicWatches_LemmaPushMaintainsWatcherInvariant + use mach.int.UInt64 + use seq.Seq + use mach.int.Int + use Type + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicWatches_WatcherCrefsInRange_Interface as WatcherCrefsInRange0 + function lemma_push_maintains_watcher_invariant [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 62 0 62 86] (w : Seq.seq (Type.creusat_watches_watcher)) (f : Type.creusat_formula_formula) (o : Type.creusat_watches_watcher) : () + = + [#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 57 0 57 8] () + axiom lemma_push_maintains_watcher_invariant_spec : forall w : Seq.seq (Type.creusat_watches_watcher), f : Type.creusat_formula_formula, o : Type.creusat_watches_watcher . ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 59 0 59 41] WatcherCrefsInRange0.watcher_crefs_in_range w f) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 60 0 60 41] UInt64.to_int (Type.creusat_watches_watcher_Watcher_cref o) < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))) -> ([#"/Users/xavier/Code/sat/CreuSAT/src/logic/logic_watches.rs" 61 0 61 48] WatcherCrefsInRange0.watcher_crefs_in_range (Seq.snoc w o) f) end -module CreuSat_UnitProp_UnitPropagate +module CreuSat_Solver_GetAssertingLevel_Interface use mach.int.UInt64 + use seq.Seq use mach.int.Int - use prelude.Prelude use mach.int.Int32 + use prelude.Prelude use Type + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner_Interface as NoDuplicateIndexesInner0 + clone CreuSat_Logic_LogicClause_VarsInRangeInner_Interface as VarsInRangeInner0 + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model1 with type t = Type.creusat_clause_clause, + type ModelTy0.modelTy = ModelTy1.modelTy + clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant2 + clone CreuSat_Logic_LogicClause_EquisatExtensionInner_Interface as EquisatExtensionInner0 + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = Type.creusat_formula_formula, + type ModelTy0.modelTy = ModelTy0.modelTy + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + val get_asserting_level [@cfg:stackify] (clause : Type.creusat_clause_clause) (trail : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) : (usize, usize) + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 32 0 32 26] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 33 0 33 32] Invariant1.invariant' trail f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 34 0 34 49] EquisatExtensionInner0.equisat_extension_inner clause (Model0.model f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 35 0 35 42] Invariant2.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 36 0 36 32] Seq.length (Model1.model clause) > 1} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 37 0 37 54] VarsInRangeInner0.vars_in_range_inner (Model1.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 38 0 38 48] NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model clause)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 39 0 39 39] UInt64.to_int (let (a, _) = result in a) < Seq.length (Model1.model clause) } + +end +module CreuSat_Solver_GetAssertingLevel + use mach.int.UInt64 use seq.Seq + use mach.int.Int + use mach.int.Int32 + use prelude.Prelude + use Type use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner2.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = Invariant6.index_logic, function IndexLogic0.index_logic = SatInner1.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant5.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = UnsatInner2.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model6.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model6 with function Model1.model = InvariantMirror0.model, - function Model0.model = FormulaInvariant0.model, function Model2.model = WatchesInvariantInternal0.model, - function Model0.model = UnsatInner1.model, function Model0.model = Invariant3.model, - function Model1.model = UnitAreSat0.model, function Model0.model = LitIdxIn0.model, - function Model0.model = ClausePostWithRegardsToInner0.model, function Model1.model = Invariant7.model, - function Model0.model = SatInner2.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, - function Model0.model = Model2.model, function Model3.model = InvariantNoDecisionMirror0.model, - function Model1.model = WatchesInvariantInternal0.model, function Model0.model = UnsatInner0.model, - function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, - function Model0.model = SatInner0.model, function Model0.model = LitNotInLessInner0.model, - function Model0.model = Invariant7.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant5.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner2 with predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner, - predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal - clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model5.model, axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model5 with function Model0.model = Unsat0.model, - function Model0.model = Unsat1.model, function Model2.model = InvariantNoDecision0.model, - function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant4.model, - function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner1 with predicate UnsatInner0.unsat_inner = Unsat1.unsat_inner, + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_lit_lit, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model5 with function Model0.model = Model8.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner1 with function Model0.model = Model5.model, + predicate SatInner0.sat_inner = SatInner0.sat_inner + clone CreuSat_Logic_Logic_Unset as Unset0 + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 + clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant6 with function Model0.model = Model6.model, + function Model1.model = Model5.model + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner0.sat_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model5.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner0.sat_inner, predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner - clone CreuSat_Logic_LogicFormula_Impl2_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant2.watches_invariant_internal - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Invariant0.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . - clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 - clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat1 - clone CreuSat_Logic_LogicFormula_Impl2_Unsat as Unsat0 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - use mach.int.Int64 - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.creusat_trail_step - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.creusat_trail_step, - type Output0.output = Index0.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.creusat_trail_step, - predicate HasValue0.has_value = Index0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.creusat_trail_step, - predicate InBounds0.in_bounds = Index0.in_bounds - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_watches_watches - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_trail_trail - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula - clone CreuSat_UnitProp_PropagateLiteral_Interface as PropagateLiteral0 - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.creusat_trail_step, type i = usize, - type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global - let rec cfg unit_propagate [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 290 0 290 101] (f : borrowed (Type.creusat_formula_formula)) (trail : borrowed (Type.creusat_trail_trail)) (watches : borrowed (Type.creusat_watches_watches)) : Type.core_result_result () usize - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 280 0 280 33] Invariant0.invariant' ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 281 0 281 42] Invariant1.invariant' ( * trail) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 282 0 282 44] Invariant2.invariant' ( * watches) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 283 0 283 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 280 0 280 33] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 281 0 281 42] Invariant1.invariant' ( ^ trail) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 282 0 282 44] Invariant2.invariant' ( ^ watches) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 284 0 287 3] match (result) with - | Type.Core_Result_Result_Ok () -> true - | Type.Core_Result_Result_Err n -> UInt64.to_int n < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) && Unsat0.unsat ( ^ f) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) && Unsat1.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int n)) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) - end } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 288 0 288 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 289 0 289 25] Equisat0.equisat ( * f) ( ^ f) } + clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model5.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model6.model, + predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = Invariant3.invariant', + predicate Invariant1.invariant' = Invariant6.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant5.invariant' + clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model7 with function Model0.model = Model9.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model7.model, + predicate SatInner0.sat_inner = SatInner0.sat_inner + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model6.model, + function Model1.model = Model5.model, predicate Sat0.sat = Sat0.sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = usize, type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model3.model, + predicate Sorted0.sorted = Sorted0.sorted + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model4.model, + function Model1.model = Model7.model, + predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model6.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic, + predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model4.model, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model4.model, + predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant4 with function Model0.model = Model7.model + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant3.invariant' + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, + predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, + predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model7.model, + function Model1.model = Model4.model, predicate Invariant0.invariant' = Invariant5.invariant', + function Model2.model = Model3.model, function Model3.model = Model6.model, + predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, + predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, + predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, + predicate Invariant0.invariant' = Invariant4.invariant', function Model0.model = Model4.model, + predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model3.model, + predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, + predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, + predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model7.model, + predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, + predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, + predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, + predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with function Model0.model = Model5.model, + predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant2.invariant', + function Model0.model = Model5.model + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Model6.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with function Model0.model = Model6.model, + predicate Invariant0.invariant' = Invariant2.invariant', function Model1.model = Model5.model + clone CreusotContracts_Logic_Model_Impl0_Model as Model1 with type t = Type.creusat_clause_clause, + type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model5.model + clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass + clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_formula_formula, + type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model2.model + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, + function Model0.model = Model3.model, function Model1.model = Model4.model, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + function Model0.model = Model2.model, + predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . + clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy2 with type t = usize + clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize + clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize + clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize + clone CreuSat_Clause_Impl3_Len_Interface as Len0 with function Model0.model = Model1.model + clone Alloc_Vec_Impl16_Index_Interface as Index2 with type t = usize, type i = usize, + type a = Type.alloc_alloc_global, function Model0.model = Model3.model, + predicate InBounds0.in_bounds = InBounds0.in_bounds, predicate HasValue0.has_value = HasValue0.has_value, + type Output0.output = Output0.output + clone CreuSat_Lit_Impl1_Index_Interface as Index1 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Clause_Impl0_Index_Interface as Index0 with function Model0.model = Model1.model + let rec cfg get_asserting_level [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 40 0 40 89] (clause : Type.creusat_clause_clause) (trail : Type.creusat_trail_trail) (f : Type.creusat_formula_formula) : (usize, usize) + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 32 0 32 26] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 33 0 33 32] Invariant1.invariant' trail f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 34 0 34 49] EquisatExtensionInner0.equisat_extension_inner clause (Model0.model f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 35 0 35 42] Invariant2.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 36 0 36 32] Seq.length (Model1.model clause) > 1} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 37 0 37 54] VarsInRangeInner0.vars_in_range_inner (Model1.model clause) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 38 0 38 48] NoDuplicateIndexesInner0.no_duplicate_indexes_inner (Model1.model clause)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 39 0 39 39] UInt64.to_int (let (a, _) = result in a) < Seq.length (Model1.model clause) } - = - var _0 : Type.core_result_result () usize; - var f_1 : borrowed (Type.creusat_formula_formula); - var trail_2 : borrowed (Type.creusat_trail_trail); - var watches_3 : borrowed (Type.creusat_watches_watches); - var i_4 : usize; - ghost var old_trail_5 : borrowed (Type.creusat_trail_trail); - var _6 : (); - ghost var old_f_7 : borrowed (Type.creusat_formula_formula); - var _8 : (); - ghost var old_w_9 : borrowed (Type.creusat_watches_watches); - var _10 : (); - var _11 : (); - var _12 : (); - var _13 : bool; - var _14 : usize; - var _15 : usize; - var _16 : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global); - var lit_17 : Type.creusat_lit_lit; - var _18 : Type.creusat_trail_step; - var _19 : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global); + = [@vc:do_not_keep_trace] [@vc:sp] + var _0 : (usize, usize); + var clause_1 : Type.creusat_clause_clause; + var trail_2 : Type.creusat_trail_trail; + var f_3 : Type.creusat_formula_formula; + var max_i_4 : usize; + var max_level_5 : usize; + var _6 : usize; + var _7 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); + var _8 : usize; + var _9 : Type.creusat_lit_lit; + var _10 : Type.creusat_lit_lit; + var _11 : Type.creusat_clause_clause; + var i_12 : usize; + var _13 : (); + var _14 : (); + var _15 : bool; + var _16 : usize; + var _17 : usize; + var _18 : Type.creusat_clause_clause; + var level_19 : usize; var _20 : usize; - var _21 : (); - var _22 : Type.core_result_result () usize; - var _23 : borrowed (Type.creusat_formula_formula); - var _24 : borrowed (Type.creusat_trail_trail); - var _25 : borrowed (Type.creusat_watches_watches); - var _26 : Type.creusat_lit_lit; - var _27 : isize; - var cref_28 : usize; - var _29 : (); + var _21 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); + var _22 : usize; + var _23 : Type.creusat_lit_lit; + var _24 : Type.creusat_lit_lit; + var _25 : Type.creusat_clause_clause; + var _26 : usize; + var _27 : (); + var _28 : bool; + var _29 : usize; var _30 : usize; - var _31 : (); - var _32 : (); + var _31 : usize; + var _32 : usize; var _33 : (); - var _34 : usize; + var _34 : (); var _35 : (); + var _36 : usize; + var _37 : usize; { - f_1 <- f; + clause_1 <- clause; trail_2 <- trail; - watches_3 <- watches; + f_3 <- f; goto BB0 } BB0 { - i_4 <- Type.creusat_trail_trail_Trail_curr_i ( * trail_2); - _6 <- (); - old_trail_5 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 292 20 292 36] trail_2); + max_i_4 <- (1 : usize); + _7 <- Type.creusat_trail_trail_Trail_lit_to_level trail_2; + _11 <- clause_1; + _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 42 43 42 52] Index0.index _11 (1 : usize)); goto BB1 } BB1 { - _8 <- (); - old_f_7 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 293 16 293 28] f_1); + _9 <- _10; + _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 42 43 42 60] Index1.index _9); goto BB2 } BB2 { - _10 <- (); - old_w_9 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 294 16 294 34] watches_3); + _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 42 24 42 61] Index2.index _7 _8); goto BB3 } BB3 { + max_level_5 <- _6; + i_12 <- (2 : usize); goto BB4 } BB4 { - invariant f_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 295 4 295 38] Invariant0.invariant' ( * f_1) }; - invariant trail_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 296 4 296 48] Invariant1.invariant' ( * trail_2) ( * f_1) }; - invariant watch_len { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 297 4 297 79] Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * watches_3))) = Seq.length (Model1.model (Type.creusat_watches_watches_Watches_watches ( * old_w_9))) }; - invariant watch_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 298 4 298 50] Invariant2.invariant' ( * watches_3) ( * f_1) }; - invariant f_equi { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 299 4 299 43] Equisat0.equisat ( * old_f_7) ( * f_1) }; - invariant nvars_unch { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 300 4 300 60] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f_1)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * old_f_7)) }; - invariant proph_t { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 301 4 301 55] ^ trail_2 = ^ old_trail_5 }; - invariant proph_f { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 302 4 302 47] ^ f_1 = ^ old_f_7 }; - invariant proph_w { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 303 4 303 53] ^ watches_3 = ^ old_w_9 }; - _14 <- i_4; - _16 <- Type.creusat_trail_trail_Trail_trail ( * trail_2); - _15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 304 14 304 31] Len0.len _16); + invariant max_i_less { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 44 4 44 54] UInt64.to_int max_i_4 < Seq.length (Model1.model clause_1) }; + _16 <- i_12; + _18 <- clause_1; + _17 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 45 14 45 26] Len0.len _18); goto BB5 } BB5 { - _13 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 304 10 304 31] _14 < _15); - switch (_13) - | False -> goto BB12 + _15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 45 10 45 26] _16 < _17); + switch (_15) + | False -> goto BB13 | _ -> goto BB6 end } BB6 { - _19 <- Type.creusat_trail_trail_Trail_trail ( * trail_2); - _20 <- i_4; - _18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 305 18 305 32] Index0.index _19 _20); + _21 <- Type.creusat_trail_trail_Trail_lit_to_level trail_2; + _25 <- clause_1; + _26 <- i_12; + _24 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 46 39 46 48] Index0.index _25 _26); goto BB7 } BB7 { - lit_17 <- Type.creusat_trail_step_Step_lit _18; - _23 <- borrow_mut ( * f_1); - f_1 <- { f_1 with current = ( ^ _23) }; - _24 <- borrow_mut ( * trail_2); - trail_2 <- { trail_2 with current = ( ^ _24) }; - _25 <- borrow_mut ( * watches_3); - watches_3 <- { watches_3 with current = ( ^ _25) }; - _26 <- lit_17; - _22 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 306 14 306 55] PropagateLiteral0.propagate_literal _23 _24 _25 _26); + _23 <- _24; + _22 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 46 39 46 56] Index1.index _23); goto BB8 } BB8 { - switch (_22) - | Type.Core_Result_Result_Ok _ -> goto BB11 - | Type.Core_Result_Result_Err _ -> goto BB9 - end + _20 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 46 20 46 57] Index2.index _21 _22); + goto BB9 } BB9 { - assume { Resolve0.resolve f_1 }; - assume { Resolve1.resolve trail_2 }; - assume { Resolve2.resolve watches_3 }; - cref_28 <- Type.core_result_result_Err_0 _22; - _30 <- cref_28; - _0 <- Type.Core_Result_Result_Err _30; - goto BB13 + level_19 <- _20; + _29 <- level_19; + _30 <- max_level_5; + _28 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 47 11 47 28] _29 > _30); + switch (_28) + | False -> goto BB11 + | _ -> goto BB10 + end } BB10 { - assume { Resolve0.resolve f_1 }; - assume { Resolve1.resolve trail_2 }; - assume { Resolve2.resolve watches_3 }; - absurd + _31 <- level_19; + max_level_5 <- _31; + _32 <- i_12; + max_i_4 <- _32; + _27 <- (); + goto BB12 } BB11 { - _21 <- (); - i_4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 312 8 312 14] i_4 + (1 : usize)); - _12 <- (); - goto BB4 + _27 <- (); + goto BB12 } BB12 { - assume { Resolve0.resolve f_1 }; - assume { Resolve2.resolve watches_3 }; - _11 <- (); - _34 <- i_4; - trail_2 <- { trail_2 with current = (let Type.CreuSat_Trail_Trail a b c d e = * trail_2 in Type.CreuSat_Trail_Trail a b c _34 e) }; - assume { Resolve1.resolve trail_2 }; - _35 <- (); - _0 <- Type.Core_Result_Result_Ok _35; - goto BB13 + i_12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 51 8 51 14] i_12 + (1 : usize)); + _14 <- (); + goto BB4 } BB13 { + _13 <- (); + _36 <- max_i_4; + _37 <- max_level_5; + _0 <- (_36, _37); return _0 } end -module CreuSat_Solver_Impl0_UnitPropStep_Interface - use mach.int.UInt64 +module Core_Ops_Index_IndexMut_IndexMut_Interface + type self + type idx + use prelude.Prelude + clone Core_Ops_Index_Index_Output as Output0 with type self = self, type idx = idx + val index_mut [@cfg:stackify] (self : borrowed self) (index : idx) : borrowed Output0.output + requires {false} + +end +module CreuSat_Assignments_Impl1 use mach.int.Int use prelude.Prelude - use mach.int.Int32 + use prelude.UInt8 use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface as NotSatisfiable0 - clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 - clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant3 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val unit_prop_step [@cfg:stackify] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (d : borrowed (Type.creusat_decision_decisions)) (t : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) : Type.creusat_solver_conflictresult - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 195 4 195 37] Invariant0.invariant' ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 196 4 196 42] Invariant1.invariant' ( * w) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 197 4 197 42] Invariant2.invariant' ( * t) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 198 4 198 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 199 4 199 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 195 4 195 37] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 196 4 196 42] Invariant1.invariant' ( ^ w) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 197 4 197 42] Invariant2.invariant' ( ^ t) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 198 4 198 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 200 4 200 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 201 4 201 29] Equisat0.equisat ( * f) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 202 4 205 7] match (result) with - | Type.CreuSat_Solver_ConflictResult_Ground -> NotSatisfiable0.not_satisfiable ( ^ f) - | _ -> true - end } - + use mach.int.UInt64 + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = uint8, type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Assignments_Impl0_Output as Output0 + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Model2.model + clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_assignments_assignments, + type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model + clone CreuSat_Assignments_Impl1_IndexMut_Interface as IndexMut0 with function Model0.model = Model0.model, + function Model1.model = Model1.model + clone Core_Ops_Index_IndexMut_IndexMut_Interface as IndexMut1 with type self = Type.creusat_assignments_assignments, + type idx = usize, val index_mut = IndexMut0.index_mut, type Output0.output = Output0.output end -module CreuSat_Solver_Impl0_UnitPropStep +module CreuSat_Trail_Impl0_Backstep_Interface use mach.int.UInt64 use mach.int.Int - use prelude.Prelude use mach.int.Int32 + use prelude.Prelude use Type - use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = Invariant7.index_logic, function IndexLogic0.index_logic = SatInner1.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model5.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model5 with function Model0.model = NotSatisfiable0.model, - function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, - function Model2.model = WatchesInvariantInternal0.model, function Model0.model = Invariant4.model, - function Model1.model = UnitAreSat0.model, function Model0.model = LitIdxIn0.model, - function Model0.model = ClausePostWithRegardsToInner0.model, function Model1.model = Invariant8.model, - function Model0.model = SatInner2.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = SatInner0.sat_inner, - predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss1.formula_sat_inner - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with predicate Invariant0.invariant' = Invariant6.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner, - predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss1.complete_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, - function Model0.model = Model0.model, function Model1.model = WatchesInvariantInternal0.model, - function Model3.model = InvariantNoDecisionMirror0.model, function Model0.model = LongArePostUnitInner0.model, - function Model0.model = UnitAreSat0.model, function Model0.model = SatInner0.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant8.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with predicate Invariant1.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model8.model, axiom . - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant4.invariant_internal - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtension0.equisat_extension_inner - clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model8 with function Model2.model = InvariantNoDecision0.model, - function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant5.model, - function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant2.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant2.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Invariant0.model, - function Model0.model = EquisatExtension0.model - clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with predicate EquisatExtension0.equisat_extension = NotSatisfiable0.equisat_extension - clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, function Model0.model = Invariant3.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant2.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant2.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant1.watches_invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, function Model0.model = Invariant1.model, axiom . - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable as NotSatisfiable0 - clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant3 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - use mach.int.Int64 - clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner2 with predicate UnsatInner0.unsat_inner = Unsat1.unsat_inner, - predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner - clone CreuSat_Logic_LogicFormula_Impl2_UnsatInner as UnsatInner1 with predicate UnsatInner0.unsat_inner = Unsat0.unsat_inner - clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat1 with predicate Unsat1.unsat = UnitPropagate0.unsat, - predicate Unsat0.unsat = HandleConflict0.unsat - clone CreuSat_Logic_LogicFormula_Impl2_Unsat as Unsat0 with predicate Unsat0.unsat = UnitPropagate0.unsat - clone CreuSat_Solver_Impl0_HandleConflict_Interface as HandleConflict0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve4 with type t = Type.creusat_watches_watches - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve3 with type t = Type.creusat_trail_trail - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_decision_decisions - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_formula_formula - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_solver_solver - clone CreuSat_UnitProp_UnitPropagate_Interface as UnitPropagate0 - let rec cfg unit_prop_step [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 206 4 206 118] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (d : borrowed (Type.creusat_decision_decisions)) (t : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) : Type.creusat_solver_conflictresult - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 195 4 195 37] Invariant0.invariant' ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 196 4 196 42] Invariant1.invariant' ( * w) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 197 4 197 42] Invariant2.invariant' ( * t) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 198 4 198 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 199 4 199 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 195 4 195 37] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 196 4 196 42] Invariant1.invariant' ( ^ w) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 197 4 197 42] Invariant2.invariant' ( ^ t) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 198 4 198 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 200 4 200 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 201 4 201 29] Equisat0.equisat ( * f) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 202 4 205 7] match (result) with - | Type.CreuSat_Solver_ConflictResult_Ground -> NotSatisfiable0.not_satisfiable ( ^ f) - | _ -> true - end } - - = - var _0 : Type.creusat_solver_conflictresult; - var self_1 : borrowed (Type.creusat_solver_solver); - var f_2 : borrowed (Type.creusat_formula_formula); - var d_3 : borrowed (Type.creusat_decision_decisions); - var t_4 : borrowed (Type.creusat_trail_trail); - var w_5 : borrowed (Type.creusat_watches_watches); - var _6 : Type.core_result_result () usize; - var _7 : borrowed (Type.creusat_formula_formula); - var _8 : borrowed (Type.creusat_trail_trail); - var _9 : borrowed (Type.creusat_watches_watches); - var _10 : isize; - var cref_11 : usize; - var _12 : Type.core_option_option bool; - var _13 : borrowed (Type.creusat_solver_solver); - var _14 : borrowed (Type.creusat_formula_formula); - var _15 : borrowed (Type.creusat_trail_trail); - var _16 : usize; - var _17 : borrowed (Type.creusat_watches_watches); - var _18 : borrowed (Type.creusat_decision_decisions); - var _19 : isize; - { - self_1 <- self; - f_2 <- f; - d_3 <- d; - t_4 <- t; - w_5 <- w; - goto BB0 - } - BB0 { - _7 <- borrow_mut ( * f_2); - f_2 <- { f_2 with current = ( ^ _7) }; - _8 <- borrow_mut ( * t_4); - t_4 <- { t_4 with current = ( ^ _8) }; - _9 <- borrow_mut ( * w_5); - w_5 <- { w_5 with current = ( ^ _9) }; - _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 207 14 207 37] UnitPropagate0.unit_propagate _7 _8 _9); - goto BB1 - } - BB1 { - switch (_6) - | Type.Core_Result_Result_Ok _ -> goto BB4 - | Type.Core_Result_Result_Err _ -> goto BB2 - end - } - BB2 { - cref_11 <- Type.core_result_result_Err_0 _6; - _13 <- borrow_mut ( * self_1); - self_1 <- { self_1 with current = ( ^ _13) }; - _14 <- borrow_mut ( * f_2); - f_2 <- { f_2 with current = ( ^ _14) }; - _15 <- borrow_mut ( * t_4); - t_4 <- { t_4 with current = ( ^ _15) }; - _16 <- cref_11; - _17 <- borrow_mut ( * w_5); - w_5 <- { w_5 with current = ( ^ _17) }; - _18 <- borrow_mut ( * d_3); - d_3 <- { d_3 with current = ( ^ _18) }; - _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 209 31 209 69] HandleConflict0.handle_conflict _13 _14 _15 _16 _17 _18); - goto BB5 - } - BB3 { - assume { Resolve0.resolve self_1 }; - assume { Resolve1.resolve f_2 }; - assume { Resolve2.resolve d_3 }; - assume { Resolve3.resolve t_4 }; - assume { Resolve4.resolve w_5 }; - absurd - } - BB4 { - assume { Resolve0.resolve self_1 }; - assume { Resolve1.resolve f_2 }; - assume { Resolve2.resolve d_3 }; - assume { Resolve3.resolve t_4 }; - assume { Resolve4.resolve w_5 }; - _0 <- Type.CreuSat_Solver_ConflictResult_Ok; - goto BB12 - } - BB5 { - assume { Resolve0.resolve self_1 }; - assume { Resolve1.resolve f_2 }; - assume { Resolve2.resolve d_3 }; - assume { Resolve3.resolve t_4 }; - assume { Resolve4.resolve w_5 }; - switch (_12) - | Type.Core_Option_Option_None -> goto BB6 - | Type.Core_Option_Option_Some _ -> goto BB7 - end - } - BB6 { - _0 <- Type.CreuSat_Solver_ConflictResult_Continue; - goto BB11 - } - BB7 { - switch (Type.core_option_option_Some_0 _12) - | False -> goto BB9 - | _ -> goto BB10 - end - } - BB8 { - absurd - } - BB9 { - _0 <- Type.CreuSat_Solver_ConflictResult_Ground; - goto BB11 - } - BB10 { - _0 <- Type.CreuSat_Solver_ConflictResult_Err; - goto BB11 - } - BB11 { - goto BB12 - } - BB12 { - return _0 - } - + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror_Interface as InvariantNoDecisionMirror0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner_Interface as LongArePostUnitInner0 + clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model1 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision_Interface as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, + axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + val backstep [@cfg:stackify] (self : borrowed (Type.creusat_trail_trail)) (f : Type.creusat_formula_formula) : usize + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 58 4 58 30] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 59 4 59 32] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) > 0} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 60 4 60 54] InvariantNoDecision0.invariant_no_decision ( * self) f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 61 4 61 77] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 60 4 60 54] InvariantNoDecision0.invariant_no_decision ( ^ self) f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 62 4 62 86] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 63 4 63 37] UInt64.to_int result < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) } + end -module CreuSat_Solver_Impl0_UnitPropLoop_Interface +module CreuSat_Trail_Impl0_BacktrackTo_Interface + use seq.Seq + use mach.int.UInt64 + use mach.int.Int + use prelude.Prelude + use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner_Interface as LongArePostUnitInner0 + clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model2 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant2 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = usize, type a = Type.alloc_alloc_global, + axiom . + val backtrack_to [@cfg:stackify] (self : borrowed (Type.creusat_trail_trail)) (level : usize) (f : Type.creusat_formula_formula) (d : borrowed (Type.creusat_decision_decisions)) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 113 4 113 49] Seq.length (Model0.model (Type.creusat_trail_trail_Trail_decisions ( * self))) > UInt64.to_int level} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 114 4 114 30] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 115 4 115 42] Invariant1.invariant' ( * self) f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 116 4 116 48] Invariant2.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 118 4 118 77] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 115 4 115 42] Invariant1.invariant' ( ^ self) f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 116 4 116 48] Invariant2.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 119 4 119 86] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } + +end +module CreuSat_Trail_Impl0_BacktrackSafe_Interface + use mach.int.UInt64 + use prelude.Prelude + use Type + use mach.int.Int + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner_Interface as LongArePostUnitInner0 + clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model1 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant2 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + val backtrack_safe [@cfg:stackify] (self : borrowed (Type.creusat_trail_trail)) (level : usize) (f : Type.creusat_formula_formula) (d : borrowed (Type.creusat_decision_decisions)) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 101 4 101 30] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 102 4 102 42] Invariant1.invariant' ( * self) f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 103 4 103 48] Invariant2.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 104 4 104 77] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 102 4 102 42] Invariant1.invariant' ( ^ self) f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 103 4 103 48] Invariant2.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 105 4 105 86] LongArePostUnitInner0.long_are_post_unit_inner (Model0.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model1.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } + +end +module CreuSat_Trail_Impl0_EnqAssignment_Interface + use mach.int.UInt64 + use Type + use seq.Seq + use mach.int.Int + use mach.int.Int32 + use prelude.Prelude + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToLit_Interface as ClausePostWithRegardsToLit0 + clone CreuSat_Logic_LogicLit_Impl1_Sat_Interface as Sat0 + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner_Interface as LongArePostUnitInner0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model3 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_Logic_Unset_Interface as Unset1 + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 + clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model2 + clone CreuSat_Logic_LogicLit_Impl1_IdxInTrail_Interface as IdxInTrail0 + clone CreuSat_Logic_LogicLit_Impl1_Unsat_Interface as Unsat0 + clone CreuSat_Logic_LogicLit_Impl1_Unset_Interface as Unset0 + clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl1_Invariant_Interface as Invariant3 + clone CreuSat_Logic_LogicLit_Impl1_Invariant_Interface as Invariant2 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant1 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant0 + val enq_assignment [@cfg:stackify] (self : borrowed (Type.creusat_trail_trail)) (step : Type.creusat_trail_step) (_f : Type.creusat_formula_formula) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 211 4 211 43] Invariant0.invariant' ( * self) _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 212 4 212 31] Invariant1.invariant' _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 213 4 213 49] Invariant2.invariant' (Type.creusat_trail_step_Step_lit step) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 214 4 214 36] Invariant3.invariant' step _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 215 4 228 7] match (Type.creusat_trail_step_Step_reason step) with + | Type.CreuSat_Trail_Reason_Long cref -> UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) /\ Unset0.unset (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) 0) (Type.creusat_trail_trail_Trail_assignments ( * self)) /\ (forall i : (int) . 1 <= i /\ i < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) -> Unsat0.unsat (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) i) (Type.creusat_trail_trail_Trail_assignments ( * self))) /\ Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) 0 = Type.creusat_trail_step_Step_lit step + | Type.CreuSat_Trail_Reason_Unit cref -> UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) /\ Type.creusat_trail_step_Step_lit step = Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int cref))) 0 + | _ -> true + end} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 229 4 229 51] not IdxInTrail0.idx_in_trail (Type.creusat_trail_step_Step_lit step) (Type.creusat_trail_trail_Trail_trail ( * self))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 230 4 230 67] Unset1.unset (Seq.get (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self))) (IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit step)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 231 4 231 78] LongArePostUnitInner0.long_are_post_unit_inner (Model3.model (Type.creusat_trail_trail_Trail_trail ( * self))) _f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 211 4 211 43] Invariant0.invariant' ( ^ self) _f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 232 4 233 94] forall j : (int) . 0 <= j /\ j < Seq.length (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self))) /\ j <> IndexLogic0.index_logic (Type.creusat_trail_step_Step_lit step) -> Seq.get (Model2.model (Type.creusat_trail_trail_Trail_assignments ( * self))) j = Seq.get (Model2.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) j } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 234 4 234 49] Sat0.sat (Type.creusat_trail_step_Step_lit step) (Type.creusat_trail_trail_Trail_assignments ( ^ self)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 235 4 235 87] LongArePostUnitInner0.long_are_post_unit_inner (Model3.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) _f (Model2.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 236 4 239 7] match (Type.creusat_trail_step_Step_reason step) with + | Type.CreuSat_Trail_Reason_Long k -> ClausePostWithRegardsToLit0.clause_post_with_regards_to_lit (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses _f)) (UInt64.to_int k)) (Type.creusat_trail_trail_Trail_assignments ( ^ self)) (Type.creusat_trail_step_Step_lit step) + | _ -> true + end } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 240 4 240 65] Seq.length (Model3.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) = 1 + Seq.length (Model3.model (Type.creusat_trail_trail_Trail_trail ( * self))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 241 4 241 51] Type.creusat_trail_trail_Trail_decisions ( ^ self) = Type.creusat_trail_trail_Trail_decisions ( * self) } + +end +module CreuSat_Solver_Impl0_HandleLongClause_Interface use mach.int.UInt64 use mach.int.Int use prelude.Prelude use mach.int.Int32 + use seq.Seq use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 - clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface as NotSatisfiable0 + clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 + clone CreuSat_Logic_LogicClause_EquisatExtensionInner_Interface as EquisatExtensionInner0 + clone CreusotContracts_Logic_Model_Impl1_Model_Interface as Model0 with type t = Type.creusat_formula_formula, + type ModelTy0.modelTy = ModelTy0.modelTy + clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant4 clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant3 clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val unit_prop_loop [@cfg:stackify] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (d : borrowed (Type.creusat_decision_decisions)) (t : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) : Type.core_option_option bool - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 218 4 218 37] Invariant0.invariant' ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 219 4 219 42] Invariant1.invariant' ( * t) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 220 4 220 42] Invariant2.invariant' ( * w) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 221 4 221 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 222 4 222 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 218 4 218 37] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 219 4 219 42] Invariant1.invariant' ( ^ t) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 220 4 220 42] Invariant2.invariant' ( ^ w) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 221 4 221 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 223 4 227 7] match (result) with - | Type.Core_Option_Option_Some (False) -> NotSatisfiable0.not_satisfiable ( ^ f) - | Type.Core_Option_Option_Some (True) -> true - | Type.Core_Option_Option_None -> true - end } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 228 4 228 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 229 4 229 29] Equisat0.equisat ( * f) ( ^ f) } + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + val handle_long_clause [@cfg:stackify] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (t : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) (d : borrowed (Type.creusat_decision_decisions)) (clause : Type.creusat_clause_clause) (s_idx : usize) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 106 4 106 37] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 107 4 107 42] Invariant1.invariant' ( * t) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 108 4 108 42] Invariant2.invariant' ( * w) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 109 4 109 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 110 4 110 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 111 4 111 46] Invariant4.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 112 4 112 52] EquisatExtensionInner0.equisat_extension_inner clause (Model0.model f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 113 4 113 36] Seq.length (Model1.model clause) > 1} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 114 4 114 41] UInt64.to_int s_idx < Seq.length (Model1.model clause)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 106 4 106 37] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 107 4 107 42] Invariant1.invariant' ( ^ t) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 108 4 108 42] Invariant2.invariant' ( ^ w) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 109 4 109 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 115 4 115 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 116 4 116 29] Equisat0.equisat ( * f) ( ^ f) } end -module CreuSat_Solver_Impl0_UnitPropLoop +module CreuSat_Solver_Impl0_HandleLongClause use mach.int.UInt64 use mach.int.Int use prelude.Prelude use mach.int.Int32 + use seq.Seq use Type use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = Invariant7.index_logic, function IndexLogic0.index_logic = SatInner1.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model7.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with function Model0.model = Model1.model, + predicate SatInner0.sat_inner = SatInner1.sat_inner + clone CreuSat_Logic_Logic_Unset as Unset0 + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 + clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with function Model0.model = Model8.model, + function Model1.model = Model1.model + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model1.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner1.sat_inner, + predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model11 with type t = uint8, type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model1.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model8.model, + predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant7.invariant', + predicate Invariant1.invariant' = Invariant8.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant6.invariant' + clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with function Model0.model = Model8.model, predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model5.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model5 with function Model0.model = NotSatisfiable0.model, - function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, - function Model2.model = WatchesInvariantInternal0.model, function Model0.model = Invariant4.model, - function Model1.model = UnitAreSat0.model, function Model0.model = LitIdxIn0.model, - function Model0.model = ClausePostWithRegardsToInner0.model, function Model1.model = Invariant8.model, - function Model0.model = SatInner2.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = SatInner0.sat_inner, - predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss1.formula_sat_inner - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with predicate Invariant0.invariant' = Invariant6.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner, - predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss1.complete_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, - function Model0.model = Model0.model, function Model3.model = InvariantNoDecisionMirror0.model, - function Model1.model = WatchesInvariantInternal0.model, function Model0.model = LongArePostUnitInner0.model, - function Model0.model = UnitAreSat0.model, function Model0.model = SatInner0.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant8.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with predicate Invariant1.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model7.model, axiom . - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant4.invariant_internal - clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtension0.equisat_extension_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model7 with function Model2.model = InvariantNoDecision0.model, - function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant5.model, - function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Invariant0.model, - function Model0.model = EquisatExtension0.model - clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with predicate EquisatExtension0.equisat_extension = NotSatisfiable0.equisat_extension - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, function Model0.model = Invariant3.model, axiom . - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant2.watches_invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 - clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable as NotSatisfiable0 - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant3 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - use mach.int.Int64 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve4 with type t = Type.creusat_watches_watches - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve3 with type t = Type.creusat_trail_trail - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_decision_decisions - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_formula_formula - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_solver_solver - clone CreuSat_Solver_Impl0_UnitPropStep_Interface as UnitPropStep0 - let rec cfg unit_prop_loop [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 230 4 230 116] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (d : borrowed (Type.creusat_decision_decisions)) (t : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) : Type.core_option_option bool - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 218 4 218 37] Invariant0.invariant' ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 219 4 219 42] Invariant1.invariant' ( * t) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 220 4 220 42] Invariant2.invariant' ( * w) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 221 4 221 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 222 4 222 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 218 4 218 37] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 219 4 219 42] Invariant1.invariant' ( ^ t) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 220 4 220 42] Invariant2.invariant' ( ^ w) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 221 4 221 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 223 4 227 7] match (result) with - | Type.Core_Option_Option_Some (False) -> NotSatisfiable0.not_satisfiable ( ^ f) - | Type.Core_Option_Option_Some (True) -> true - | Type.Core_Option_Option_None -> true - end } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 228 4 228 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 229 4 229 29] Equisat0.equisat ( * f) ( ^ f) } - - = - var _0 : Type.core_option_option bool; - var self_1 : borrowed (Type.creusat_solver_solver); - var f_2 : borrowed (Type.creusat_formula_formula); - var d_3 : borrowed (Type.creusat_decision_decisions); - var t_4 : borrowed (Type.creusat_trail_trail); - var w_5 : borrowed (Type.creusat_watches_watches); - ghost var old_f_6 : borrowed (Type.creusat_formula_formula); - var _7 : (); - ghost var old_t_8 : borrowed (Type.creusat_trail_trail); - var _9 : (); - ghost var old_w_10 : borrowed (Type.creusat_watches_watches); - var _11 : (); - ghost var old_d_12 : borrowed (Type.creusat_decision_decisions); - var _13 : (); - var _14 : (); - var _15 : (); - var _16 : Type.creusat_solver_conflictresult; - var _17 : borrowed (Type.creusat_solver_solver); - var _18 : borrowed (Type.creusat_formula_formula); - var _19 : borrowed (Type.creusat_decision_decisions); - var _20 : borrowed (Type.creusat_trail_trail); - var _21 : borrowed (Type.creusat_watches_watches); - var _22 : isize; - var _23 : (); - var _24 : (); - var _25 : (); + clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate SatInner0.sat_inner = SatInner2.sat_inner + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant7.invariant' + clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model9 with function Model0.model = Model11.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model9.model, + predicate SatInner0.sat_inner = SatInner1.sat_inner + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model8.model, + function Model1.model = Model1.model, predicate Sat0.sat = Sat0.sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = usize, type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model3.model, + predicate Sorted0.sorted = Sorted0.sorted + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model4.model, + function Model1.model = Model9.model, + predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model8.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic, + predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model4.model, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model4.model, + predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with function Model0.model = Model9.model + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, + predicate SatInner0.sat_inner = SatInner0.sat_inner + clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, + predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, + predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_decision_node, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model10.model, + function Model1.model = Model8.model, function Model2.model = Model1.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model9.model, + function Model1.model = Model4.model, predicate Invariant0.invariant' = Invariant6.invariant', + function Model2.model = Model3.model, function Model3.model = Model8.model, + predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, + predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, + predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, + predicate Invariant0.invariant' = Invariant5.invariant', function Model0.model = Model4.model, + predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model3.model, + predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, + predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, + predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model9.model, + predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, + predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, + predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, + predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with function Model0.model = Model1.model, + predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant4.invariant', + function Model0.model = Model1.model + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Model8.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with function Model0.model = Model8.model, + predicate Invariant0.invariant' = Invariant4.invariant', function Model1.model = Model1.model + clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss1.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass + clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_formula_formula, + type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model2.model + clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant3 with function Model0.model = Model6.model + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 with function Model0.model = Model5.model, + predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, + function Model0.model = Model3.model, function Model1.model = Model4.model, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + function Model0.model = Model2.model, + predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . + clone CreuSat_Logic_LogicClause_Impl2_VarsInRange as VarsInRange0 with function Model0.model = Model1.model, + predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner + clone CreuSat_Logic_LogicLit_Impl1_UnsetInner as UnsetInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicClause_Impl2_UnitInner as UnitInner0 with predicate VarsInRange0.vars_in_range = VarsInRange0.vars_in_range, + predicate SatInner0.sat_inner = SatInner2.sat_inner, function Model0.model = Model1.model, + predicate UnsetInner0.unset_inner = UnsetInner0.unset_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToLit as ClausePostWithRegardsToLit0 with function Model0.model = Model9.model, + predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicLit_Impl1_IdxInTrail as IdxInTrail0 with function Model0.model = Model4.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat0 with function Model0.model = Model9.model, + predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner + clone CreuSat_Logic_LogicLit_Impl1_Unset as Unset1 with function Model0.model = Model9.model, + predicate UnsetInner0.unset_inner = UnsetInner0.unset_inner + clone CreuSat_Logic_LogicClause_Impl2_Unit as Unit0 with function Model0.model = Model9.model, + predicate UnitInner0.unit_inner = UnitInner0.unit_inner + clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve7 with type t = usize + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 + clone CreusotContracts_Logic_Model_Impl0_Model as Model14 with type t = Type.creusat_clause_clause, + type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model1.model + clone CreusotContracts_Logic_Model_Impl0_Model as Model13 with type t = Type.creusat_formula_formula, + type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model2.model + clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with function Model0.model = Model2.model, + predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner + clone CreusotContracts_Logic_Model_Impl1_Model as Model12 with type t = Type.creusat_clause_clause, + type ModelTy0.modelTy = ModelTy1.modelTy, function Model0.model = Model1.model + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve6 with type t = Type.creusat_solver_solver + clone CreuSat_Solver_Impl0_IncreaseNumConflicts_Interface as IncreaseNumConflicts0 + clone CreuSat_Solver_Impl0_IncreaseNumLemmas_Interface as IncreaseNumLemmas0 + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve5 with type t = Type.creusat_trail_trail + clone CreuSat_Trail_Impl0_EnqAssignment_Interface as EnqAssignment0 with predicate Invariant0.invariant' = Invariant1.invariant', + predicate Invariant1.invariant' = Invariant0.invariant', predicate Invariant2.invariant' = Invariant7.invariant', + predicate Invariant3.invariant' = Invariant6.invariant', function Model0.model = Model8.model, + function Model1.model = Model1.model, predicate Unset0.unset = Unset1.unset, predicate Unsat0.unsat = Unsat0.unsat, + predicate IdxInTrail0.idx_in_trail = IdxInTrail0.idx_in_trail, function Model2.model = Model9.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate Unset1.unset = Unset0.unset, + function Model3.model = Model4.model, + predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, + predicate Sat0.sat = Sat0.sat, + predicate ClausePostWithRegardsToLit0.clause_post_with_regards_to_lit = ClausePostWithRegardsToLit0.clause_post_with_regards_to_lit, + predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve4 with type t = Type.creusat_formula_formula + clone CreuSat_Clause_Impl3_UnitAndUnset_Interface as UnitAndUnset0 with function Model0.model = Model14.model, + predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal, + predicate Invariant0.invariant' = Invariant5.invariant', predicate Unit0.unit = Unit0.unit, + predicate Unset0.unset = Unset1.unset + clone CreuSat_Clause_Impl0_Index_Interface as Index1 with function Model0.model = Model14.model + clone CreuSat_Formula_Impl0_Index_Interface as Index0 with function Model0.model = Model13.model + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve3 with type t = Type.creusat_decision_decisions + clone CreuSat_Trail_Impl0_BacktrackSafe_Interface as BacktrackSafe0 with predicate Invariant0.invariant' = Invariant0.invariant', + predicate Invariant1.invariant' = Invariant1.invariant', predicate Invariant2.invariant' = Invariant3.invariant', + function Model0.model = Model4.model, function Model1.model = Model9.model, + predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, + predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror + clone CreuSat_Util_UpdateSlow_Interface as UpdateSlow0 + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = usize + clone CreuSat_Util_UpdateFast_Interface as UpdateFast0 + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_watches_watches + clone CreuSat_Formula_Impl2_AddClause_Interface as AddClause0 with predicate Invariant0.invariant' = Invariant0.invariant', + predicate Invariant1.invariant' = Invariant1.invariant', predicate Invariant2.invariant' = Invariant2.invariant', + function Model0.model = Model1.model, predicate Invariant3.invariant' = Invariant4.invariant', + function Model1.model = Model0.model, + predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner, + predicate Equisat0.equisat = Equisat0.equisat, function Model2.model = Model8.model, + predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror + clone CreuSat_Clause_Impl3_CalcLbd_Interface as CalcLbd0 with function Model0.model = Model3.model, + predicate Invariant0.invariant' = Invariant4.invariant' + clone CreusotContracts_Logic_Resolve_Impl0_Resolve as Resolve0 with type t1 = usize, type t2 = usize, + predicate Resolve0.resolve = Resolve7.resolve, predicate Resolve1.resolve = Resolve7.resolve + clone CreuSat_Solver_GetAssertingLevel_Interface as GetAssertingLevel0 with predicate Invariant0.invariant' = Invariant0.invariant', + predicate Invariant1.invariant' = Invariant1.invariant', function Model0.model = Model13.model, + predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner, + predicate Invariant2.invariant' = Invariant4.invariant', function Model1.model = Model14.model, + predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, + predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner, + predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror + clone CreuSat_Clause_Impl3_SwapLitsInClause_Interface as SwapLitsInClause0 with function Model0.model = Model12.model, + predicate Invariant0.invariant' = Invariant4.invariant', + predicate EquisatExtension0.equisat_extension = EquisatExtension0.equisat_extension, + function Model1.model = Model1.model + let rec cfg handle_long_clause [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 117 4 119 5] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (t : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) (d : borrowed (Type.creusat_decision_decisions)) (clause : Type.creusat_clause_clause) (s_idx : usize) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 106 4 106 37] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 107 4 107 42] Invariant1.invariant' ( * t) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 108 4 108 42] Invariant2.invariant' ( * w) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 109 4 109 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 110 4 110 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 111 4 111 46] Invariant4.invariant' clause (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 112 4 112 52] EquisatExtensionInner0.equisat_extension_inner clause (Model0.model f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 113 4 113 36] Seq.length (Model1.model clause) > 1} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 114 4 114 41] UInt64.to_int s_idx < Seq.length (Model1.model clause)} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 106 4 106 37] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 107 4 107 42] Invariant1.invariant' ( ^ t) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 108 4 108 42] Invariant2.invariant' ( ^ w) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 109 4 109 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 115 4 115 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 116 4 116 29] Equisat0.equisat ( * f) ( ^ f) } + + = [@vc:do_not_keep_trace] [@vc:sp] + var _0 : (); + var self_1 : borrowed (Type.creusat_solver_solver); + var f_2 : borrowed (Type.creusat_formula_formula); + var t_3 : borrowed (Type.creusat_trail_trail); + var w_4 : borrowed (Type.creusat_watches_watches); + var d_5 : borrowed (Type.creusat_decision_decisions); + var clause_6 : Type.creusat_clause_clause; + var s_idx_7 : usize; + var _8 : (); + var _9 : borrowed (Type.creusat_clause_clause); + var _10 : Type.creusat_formula_formula; + var _11 : usize; + var idx_12 : usize; + var level_13 : usize; + var _14 : (usize, usize); + var _15 : Type.creusat_clause_clause; + var _16 : Type.creusat_clause_clause; + var _17 : Type.creusat_trail_trail; + var _18 : Type.creusat_formula_formula; + var _19 : (); + var _20 : borrowed (Type.creusat_clause_clause); + var _21 : Type.creusat_formula_formula; + var _22 : usize; + var lbd_23 : usize; + var _24 : Type.creusat_clause_clause; + var _25 : Type.creusat_formula_formula; + var _26 : borrowed (Type.creusat_solver_solver); + var _27 : Type.creusat_trail_trail; + var cref_28 : usize; + var _29 : borrowed (Type.creusat_formula_formula); + var _30 : Type.creusat_clause_clause; + var _31 : borrowed (Type.creusat_watches_watches); + var _32 : Type.creusat_trail_trail; + var _33 : (); + var _34 : borrowed usize; + var _35 : borrowed usize; + var _36 : usize; + var _37 : (); + var _38 : borrowed usize; + var _39 : borrowed usize; + var _40 : usize; + var _41 : (); + var _42 : borrowed (Type.creusat_trail_trail); + var _43 : usize; + var _44 : Type.creusat_formula_formula; + var _45 : borrowed (Type.creusat_decision_decisions); + var lit_46 : Type.creusat_lit_lit; + var _47 : Type.creusat_lit_lit; + var _48 : Type.creusat_clause_clause; + var _49 : Type.creusat_clause_clause; + var _50 : Type.creusat_formula_formula; + var _51 : usize; + var step_52 : Type.creusat_trail_step; + var _53 : Type.creusat_lit_lit; + var _54 : usize; + var _55 : Type.creusat_trail_reason; + var _56 : usize; + var _57 : (); + var _58 : bool; + var _59 : Type.creusat_clause_clause; + var _60 : Type.creusat_clause_clause; + var _61 : Type.creusat_formula_formula; + var _62 : usize; + var _63 : Type.creusat_assignments_assignments; + var _64 : Type.creusat_assignments_assignments; + var _65 : Type.creusat_formula_formula; + var _66 : (); + var _67 : borrowed (Type.creusat_trail_trail); + var _68 : Type.creusat_trail_step; + var _69 : Type.creusat_formula_formula; + var _70 : (); + var _71 : borrowed (Type.creusat_solver_solver); + var _72 : (); + var _73 : borrowed (Type.creusat_solver_solver); { self_1 <- self; f_2 <- f; - d_3 <- d; - t_4 <- t; - w_5 <- w; + t_3 <- t; + w_4 <- w; + d_5 <- d; + clause_6 <- clause; + s_idx_7 <- s_idx; goto BB0 } BB0 { - _7 <- (); - old_f_6 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 231 20 231 32] f_2); goto BB1 } BB1 { - _9 <- (); - old_t_8 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 232 20 232 32] t_4); goto BB2 } BB2 { - _11 <- (); - old_w_10 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 233 20 233 32] w_5); goto BB3 } BB3 { - _13 <- (); - old_d_12 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 234 20 234 32] d_3); goto BB4 } BB4 { + _9 <- borrow_mut clause_6; + clause_6 <- ^ _9; + _10 <- * f_2; + _11 <- s_idx_7; + _8 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 120 8 120 47] SwapLitsInClause0.swap_lits_in_clause _9 _10 _11 (0 : usize)); goto BB5 } BB5 { - invariant maintains_f { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 235 8 235 48] Invariant0.invariant' ( * f_2) }; - invariant maintains_t { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 236 8 236 50] Invariant1.invariant' ( * t_4) ( * f_2) }; - invariant maintains_w { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 237 8 237 50] Invariant2.invariant' ( * w_5) ( * f_2) }; - invariant maintains_d { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 238 8 238 59] Invariant3.invariant' ( * d_3) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f_2))) }; - invariant equi { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 239 8 239 53] Equisat0.equisat ( * old_f_6) ( * f_2) }; - invariant num_vars { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 240 8 240 62] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f_2)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * old_f_6)) }; - invariant prophf { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 241 8 241 50] ^ f_2 = ^ old_f_6 }; - invariant propht { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 242 8 242 50] ^ t_4 = ^ old_t_8 }; - invariant prophw { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 243 8 243 50] ^ w_5 = ^ old_w_10 }; - invariant prophd { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 244 8 244 50] ^ d_3 = ^ old_d_12 }; - _17 <- borrow_mut ( * self_1); - self_1 <- { self_1 with current = ( ^ _17) }; - _18 <- borrow_mut ( * f_2); - f_2 <- { f_2 with current = ( ^ _18) }; - _19 <- borrow_mut ( * d_3); - d_3 <- { d_3 with current = ( ^ _19) }; - _20 <- borrow_mut ( * t_4); - t_4 <- { t_4 with current = ( ^ _20) }; - _21 <- borrow_mut ( * w_5); - w_5 <- { w_5 with current = ( ^ _21) }; - _16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 246 18 246 49] UnitPropStep0.unit_prop_step _17 _18 _19 _20 _21); + _16 <- clause_6; + _15 <- _16; + _17 <- * t_3; + _18 <- * f_2; + _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 121 27 121 61] GetAssertingLevel0.get_asserting_level _15 _17 _18); goto BB6 } BB6 { - switch (_16) - | Type.CreuSat_Solver_ConflictResult_Ok -> goto BB9 - | Type.CreuSat_Solver_ConflictResult_Err -> goto BB11 - | Type.CreuSat_Solver_ConflictResult_Ground -> goto BB10 - | Type.CreuSat_Solver_ConflictResult_Continue -> goto BB7 - end + idx_12 <- (let (a, _) = _14 in a); + level_13 <- (let (_, a) = _14 in a); + assume { Resolve0.resolve _14 }; + _20 <- borrow_mut clause_6; + clause_6 <- ^ _20; + _21 <- * f_2; + _22 <- idx_12; + _19 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 122 8 122 45] SwapLitsInClause0.swap_lits_in_clause _20 _21 _22 (1 : usize)); + goto BB7 } BB7 { - _15 <- (); - goto BB5 + _24 <- clause_6; + _25 <- * f_2; + _26 <- borrow_mut ( * self_1); + self_1 <- { self_1 with current = ( ^ _26) }; + _27 <- * t_3; + lbd_23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 125 18 125 45] CalcLbd0.calc_lbd _24 _25 _26 _27); + goto BB8 } BB8 { - assume { Resolve0.resolve self_1 }; - assume { Resolve1.resolve f_2 }; - assume { Resolve2.resolve d_3 }; - assume { Resolve3.resolve t_4 }; - assume { Resolve4.resolve w_5 }; - absurd + _29 <- borrow_mut ( * f_2); + f_2 <- { f_2 with current = ( ^ _29) }; + _30 <- clause_6; + _31 <- borrow_mut ( * w_4); + w_4 <- { w_4 with current = ( ^ _31) }; + _32 <- * t_3; + cref_28 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 126 19 126 45] AddClause0.add_clause _29 _30 _31 _32); + goto BB9 + } + BB9 { + assume { Resolve1.resolve w_4 }; + _35 <- borrow_mut (Type.creusat_solver_solver_Solver_fast ( * self_1)); + self_1 <- { self_1 with current = (let Type.CreuSat_Solver_Solver a b c d e f g h = * self_1 in Type.CreuSat_Solver_Solver a b c d e ( ^ _35) g h) }; + _34 <- borrow_mut ( * _35); + _35 <- { _35 with current = ( ^ _34) }; + _36 <- lbd_23; + _33 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 127 8 127 40] UpdateFast0.update_fast _34 _36); + goto BB10 + } + BB10 { + assume { Resolve2.resolve _35 }; + _39 <- borrow_mut (Type.creusat_solver_solver_Solver_slow ( * self_1)); + self_1 <- { self_1 with current = (let Type.CreuSat_Solver_Solver a b c d e f g h = * self_1 in Type.CreuSat_Solver_Solver a b c d e f ( ^ _39) h) }; + _38 <- borrow_mut ( * _39); + _39 <- { _39 with current = ( ^ _38) }; + _40 <- lbd_23; + _37 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 128 8 128 40] UpdateSlow0.update_slow _38 _40); + goto BB11 + } + BB11 { + assume { Resolve2.resolve _39 }; + _42 <- borrow_mut ( * t_3); + t_3 <- { t_3 with current = ( ^ _42) }; + _43 <- level_13; + _44 <- * f_2; + _45 <- borrow_mut ( * d_5); + d_5 <- { d_5 with current = ( ^ _45) }; + _41 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 131 8 131 37] BacktrackSafe0.backtrack_safe _42 _43 _44 _45); + goto BB12 + } + BB12 { + assume { Resolve3.resolve d_5 }; + _50 <- * f_2; + _51 <- cref_28; + _49 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 133 18 133 25] Index0.index _50 _51); + goto BB13 + } + BB13 { + _48 <- _49; + _47 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 133 18 133 28] Index1.index _48 (0 : usize)); + goto BB14 + } + BB14 { + lit_46 <- _47; + _53 <- lit_46; + _54 <- level_13; + _56 <- cref_28; + _55 <- Type.CreuSat_Trail_Reason_Long _56; + step_52 <- Type.CreuSat_Trail_Step _53 _54 _55; + _61 <- * f_2; + _62 <- cref_28; + _60 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 140 11 140 18] Index0.index _61 _62); + goto BB15 + } + BB15 { + _59 <- _60; + _64 <- Type.creusat_trail_trail_Trail_assignments ( * t_3); + _63 <- _64; + _65 <- * f_2; + _58 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 140 11 140 52] UnitAndUnset0.unit_and_unset _59 _63 _65); + goto BB16 + } + BB16 { + switch (_58) + | False -> goto BB19 + | _ -> goto BB17 + end + } + BB17 { + _67 <- borrow_mut ( * t_3); + t_3 <- { t_3 with current = ( ^ _67) }; + _68 <- step_52; + _69 <- * f_2; + assume { Resolve4.resolve f_2 }; + _66 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 141 12 141 37] EnqAssignment0.enq_assignment _67 _68 _69); + goto BB18 + } + BB18 { + assume { Resolve5.resolve t_3 }; + _57 <- (); + goto BB20 + } + BB19 { + assume { Resolve4.resolve f_2 }; + assume { Resolve5.resolve t_3 }; + _57 <- (); + goto BB20 } - BB9 { - assume { Resolve0.resolve self_1 }; - assume { Resolve1.resolve f_2 }; - assume { Resolve2.resolve d_3 }; - assume { Resolve3.resolve t_4 }; - assume { Resolve4.resolve w_5 }; - _0 <- Type.Core_Option_Option_Some true; - goto BB12 + BB20 { + _71 <- borrow_mut ( * self_1); + self_1 <- { self_1 with current = ( ^ _71) }; + _70 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 144 8 144 34] IncreaseNumLemmas0.increase_num_lemmas _71); + goto BB21 } - BB10 { - assume { Resolve0.resolve self_1 }; - assume { Resolve1.resolve f_2 }; - assume { Resolve2.resolve d_3 }; - assume { Resolve3.resolve t_4 }; - assume { Resolve4.resolve w_5 }; - _0 <- Type.Core_Option_Option_Some false; - goto BB12 + BB21 { + _73 <- borrow_mut ( * self_1); + self_1 <- { self_1 with current = ( ^ _73) }; + _72 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 145 8 145 37] IncreaseNumConflicts0.increase_num_conflicts _73); + goto BB22 } - BB11 { - assume { Resolve0.resolve self_1 }; - assume { Resolve1.resolve f_2 }; - assume { Resolve2.resolve d_3 }; - assume { Resolve3.resolve t_4 }; - assume { Resolve4.resolve w_5 }; - _0 <- Type.Core_Option_Option_None; - goto BB12 + BB22 { + assume { Resolve6.resolve self_1 }; + _0 <- (); + goto BB23 } - BB12 { + BB23 { return _0 } end -module CreuSat_Trail_Impl0_EnqDecision_Interface +module CreuSat_Trail_Impl0_LearnUnit_Interface use mach.int.UInt64 - use mach.int.Int use seq.Seq + use mach.int.Int use mach.int.Int32 - use prelude.UInt8 - use prelude.Prelude use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + use prelude.Prelude + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicLit_Impl1_Sat_Interface as Sat0 clone CreuSat_Logic_LogicTrail_LongArePostUnitInner_Interface as LongArePostUnitInner0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.creusat_trail_step, + clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model3 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model2 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global, axiom . - clone CreuSat_Logic_Logic_Unset_Interface as Unset0 - clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val enq_decision [@cfg:stackify] (self : borrowed (Type.creusat_trail_trail)) (idx : usize) (_f : Type.creusat_formula_formula) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 268 4 268 31] Invariant0.invariant' _f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 269 4 269 43] Invariant1.invariant' ( * self) _f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 270 4 270 36] UInt64.to_int idx < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 271 4 271 49] Unset0.unset (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self))) (UInt64.to_int idx))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 275 4 275 78] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self))) _f (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 269 4 269 43] Invariant1.invariant' ( ^ self) _f } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 272 4 273 76] forall j : (int) . 0 <= j && j < Seq.length (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self))) && j <> UInt64.to_int idx -> Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self))) j = Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) j } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 274 4 274 88] UInt8.to_int (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) (UInt64.to_int idx)) = 1 || UInt8.to_int (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) (UInt64.to_int idx)) = 0 } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 276 4 276 87] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) _f (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 277 4 277 65] Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) = 1 + Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self))) } - -end -module CreuSat_Trail_Impl0_EnqDecision - use mach.int.UInt64 - use mach.int.Int - use seq.Seq - use mach.int.Int32 - use prelude.UInt8 - use prelude.Prelude - use Type - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, function IndexLogic0.index_logic = SatInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic, function IndexLogic0.index_logic = Invariant5.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = Invariant4.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model6.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model6 with function Model1.model = InvariantMirror0.model, - function Model0.model = FormulaInvariant0.model, function Model0.model = ClausePostWithRegardsToInner0.model, - function Model0.model = Invariant2.model, function Model1.model = UnitAreSat0.model, - function Model0.model = LitIdxIn0.model, function Model1.model = Invariant6.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = LongArePostUnitInner0.model, - function Model0.model = InvariantMirror0.model, function Model0.model = Model2.model, - function Model3.model = InvariantNoDecisionMirror0.model, function Model0.model = LitNotInLessInner0.model, - function Model0.model = UnitAreSat0.model, function Model0.model = Invariant6.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant6 with predicate Invariant1.invariant' = Invariant4.invariant' - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant2.invariant_internal - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, - predicate SatInner0.sat_inner = Sat0.sat_inner - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model0.model, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model0 with function Model1.model = TrailEntriesAreAssigned0.model, - function Model2.model = InvariantNoDecision0.model, function Model0.model = InvariantNoDecisionMirror0.model, - function Model0.model = Invariant3.model, function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, function Model0.model = InvariantNoDecision0.model, - function Model1.model = InvariantNoDecisionMirror0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, + clone CreuSat_Logic_LogicClause_Impl2_Invariant_Interface as Invariant3 + clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant2 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, axiom . - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model2 with function Model0.model = Invariant0.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_Logic_Unset as Unset0 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model8.modelTy, - type ModelTy0.modelTy = Model9.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model9 with type t = Type.creusat_assignments_assignments, - function Model0.model = PhaseSaved0.model - clone CreusotContracts_Logic_Model_Impl1_Model as Model8 with type t = Type.creusat_assignments_assignments, - function Model0.model = IndexMut1.model - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = usize - clone Core_Slice_Index_Impl2_Output as Output0 with type t = usize, type Output0.output = IndexMut0.output - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = usize, - predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = usize, - predicate HasValue0.has_value = IndexMut0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = usize, - predicate InBounds0.in_bounds = IndexMut0.in_bounds - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_trail_trail - clone Alloc_Vec_Impl1_Push_Interface as Push1 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global - clone CreuSat_Lit_Impl1_PhaseSaved_Interface as PhaseSaved0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = uint8 - clone CreuSat_Assignments_Impl1_IndexMut_Interface as IndexMut1 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = usize - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = usize, type i = usize, - type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl1_Len_Interface as Len1 with type t = usize, type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl1_Push_Interface as Push0 with type t = usize, type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_trail_step, type a = Type.alloc_alloc_global - let rec cfg enq_decision [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 278 4 278 60] (self : borrowed (Type.creusat_trail_trail)) (idx : usize) (_f : Type.creusat_formula_formula) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 268 4 268 31] Invariant0.invariant' _f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 269 4 269 43] Invariant1.invariant' ( * self) _f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 270 4 270 36] UInt64.to_int idx < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 271 4 271 49] Unset0.unset (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self))) (UInt64.to_int idx))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 275 4 275 78] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self))) _f (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 269 4 269 43] Invariant1.invariant' ( ^ self) _f } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 272 4 273 76] forall j : (int) . 0 <= j && j < Seq.length (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self))) && j <> UInt64.to_int idx -> Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self))) j = Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) j } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 274 4 274 88] UInt8.to_int (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) (UInt64.to_int idx)) = 1 || UInt8.to_int (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) (UInt64.to_int idx)) = 0 } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 276 4 276 87] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) _f (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 277 4 277 65] Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) = 1 + Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self))) } + clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant0 + val learn_unit [@cfg:stackify] (self : borrowed (Type.creusat_trail_trail)) (cref : usize) (f : Type.creusat_formula_formula) (d : borrowed (Type.creusat_decision_decisions)) : Type.core_result_result () () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 302 4 302 42] Invariant0.invariant' ( * self) f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 303 4 303 48] Invariant1.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 304 4 304 30] Invariant2.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 305 4 305 43] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 306 4 306 50] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) = 1} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 307 4 307 59] Invariant3.invariant' (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 313 4 313 77] LongArePostUnitInner0.long_are_post_unit_inner (Model2.model (Type.creusat_trail_trail_Trail_trail ( * self))) f (Model3.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 302 4 302 42] Invariant0.invariant' ( ^ self) f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 303 4 303 48] Invariant1.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 310 4 312 70] match (result) with + | Type.Core_Result_Result_Err _ -> true + | Type.Core_Result_Result_Ok _ -> Sat0.sat (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) 0) (Type.creusat_trail_trail_Trail_assignments ( ^ self)) + end } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 314 4 314 86] LongArePostUnitInner0.long_are_post_unit_inner (Model2.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) f (Model3.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } - = - var _0 : (); - var self_1 : borrowed (Type.creusat_trail_trail); - var idx_2 : usize; - var _f_3 : Type.creusat_formula_formula; - var trail_len_4 : usize; - var _5 : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global); - var _6 : (); - var _7 : borrowed (Type.alloc_vec_vec usize (Type.alloc_alloc_global)); - var _8 : usize; - var dlevel_9 : usize; - var _10 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _11 : usize; - var _12 : borrowed usize; - var _13 : borrowed (Type.alloc_vec_vec usize (Type.alloc_alloc_global)); - var _14 : usize; - var _15 : borrowed uint8; - var _16 : borrowed (Type.creusat_assignments_assignments); - var _17 : usize; - var lit_18 : Type.creusat_lit_lit; - var _19 : usize; - var _20 : Type.creusat_assignments_assignments; - var _21 : Type.creusat_assignments_assignments; - var step_22 : Type.creusat_trail_step; - var _23 : Type.creusat_lit_lit; - var _24 : usize; - var _25 : Type.creusat_trail_reason; - var _26 : (); - var _27 : borrowed (Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global)); - var _28 : Type.creusat_trail_step; - var _29 : (); - var _30 : (); - var _31 : (); - var _32 : (); - { - self_1 <- self; - idx_2 <- idx; - _f_3 <- _f; - goto BB0 - } - BB0 { - _5 <- Type.creusat_trail_trail_Trail_trail ( * self_1); - trail_len_4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 279 24 279 40] Len0.len _5); - goto BB1 - } - BB1 { - _7 <- borrow_mut (Type.creusat_trail_trail_Trail_decisions ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Trail_Trail a b c d e = * self_1 in Type.CreuSat_Trail_Trail a b c d ( ^ _7)) }; - _8 <- trail_len_4; - _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 280 8 280 38] Push0.push _7 _8); - goto BB2 - } - BB2 { - _10 <- Type.creusat_trail_trail_Trail_decisions ( * self_1); - dlevel_9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 281 21 281 41] Len1.len _10); - goto BB3 - } - BB3 { - _11 <- dlevel_9; - _13 <- borrow_mut (Type.creusat_trail_trail_Trail_lit_to_level ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Trail_Trail a b c d e = * self_1 in Type.CreuSat_Trail_Trail a ( ^ _13) c d e) }; - _14 <- idx_2; - _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 282 8 282 30] IndexMut0.index_mut _13 _14); - goto BB4 - } - BB4 { - _12 <- { _12 with current = _11 }; - assume { Resolve0.resolve _12 }; - _16 <- borrow_mut (Type.creusat_trail_trail_Trail_assignments ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Trail_Trail a b c d e = * self_1 in Type.CreuSat_Trail_Trail ( ^ _16) b c d e) }; - _17 <- idx_2; - _15 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 283 8 283 29] IndexMut1.index_mut _16 _17); - goto BB5 - } - BB5 { - _15 <- { _15 with current = ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 283 8 283 34] * _15 - (2 : uint8)) }; - assume { Resolve1.resolve _15 }; - _19 <- idx_2; - _21 <- Type.creusat_trail_trail_Trail_assignments ( * self_1); - _20 <- _21; - lit_18 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 284 18 284 58] PhaseSaved0.phase_saved _19 _20); - goto BB6 - } - BB6 { - _23 <- lit_18; - _24 <- dlevel_9; - _25 <- Type.CreuSat_Trail_Reason_Decision; - step_22 <- Type.CreuSat_Trail_Step _23 _24 _25; - _27 <- borrow_mut (Type.creusat_trail_trail_Trail_trail ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Trail_Trail a b c d e = * self_1 in Type.CreuSat_Trail_Trail a b ( ^ _27) d e) }; - _28 <- step_22; - _26 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 288 8 288 29] Push1.push _27 _28); - goto BB7 - } - BB7 { - assume { Resolve2.resolve self_1 }; - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 289 8 289 48] LitNotInLess0.lit_not_in_less ( * self_1) _f_3 }; - _29 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 292 8 292 84] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self_1))) _f_3 (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self_1))) }; - _30 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 296 8 296 43] LitIsUnique0.lit_is_unique ( * self_1) }; - _31 <- (); - assert { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 297 8 297 56] TrailEntriesAreAssigned0.trail_entries_are_assigned ( * self_1) }; - _32 <- (); - _0 <- (); - return _0 - } - end -module CreuSat_Solver_Impl0_OuterLoop_Interface +module CreuSat_Solver_Impl0_HandleConflict_Interface use mach.int.UInt64 use mach.int.Int use prelude.Prelude use mach.int.Int32 + use seq.Seq use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface as NotSatisfiable0 - clone CreuSat_Logic_LogicAssignments_Impl1_Complete_Interface as Complete0 - clone CreuSat_Logic_LogicFormula_Impl2_Sat_Interface as Sat0 clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicClause_Impl2_Unsat_Interface as Unsat0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant3 clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val outer_loop [@cfg:stackify] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (d : borrowed (Type.creusat_decision_decisions)) (trail : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) : Type.creusat_solver_satresult - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 262 4 262 37] Invariant0.invariant' ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 263 4 263 46] Invariant1.invariant' ( * trail) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 264 4 264 42] Invariant2.invariant' ( * w) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 265 4 265 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 266 4 266 41] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 267 4 267 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 262 4 262 37] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 263 4 263 46] Invariant1.invariant' ( ^ trail) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 264 4 264 42] Invariant2.invariant' ( ^ w) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 265 4 265 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 268 4 268 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 269 4 269 29] Equisat0.equisat ( * f) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 270 4 276 7] match (result) with - | Type.CreuSat_Solver_SatResult_Sat _ -> Sat0.sat ( ^ f) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) && Complete0.complete (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) - | Type.CreuSat_Solver_SatResult_Unsat -> NotSatisfiable0.not_satisfiable ( ^ f) - | Type.CreuSat_Solver_SatResult_Unknown -> true - | Type.CreuSat_Solver_SatResult_Err -> true + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + val handle_conflict [@cfg:stackify] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (t : borrowed (Type.creusat_trail_trail)) (cref : usize) (w : borrowed (Type.creusat_watches_watches)) (d : borrowed (Type.creusat_decision_decisions)) : Type.core_option_option bool + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 149 4 149 37] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 150 4 150 42] Invariant1.invariant' ( * t) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 151 4 151 42] Invariant2.invariant' ( * w) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 152 4 152 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 153 4 153 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 154 4 154 43] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 155 4 155 57] Unsat0.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref)) (Type.creusat_trail_trail_Trail_assignments ( * t))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 149 4 149 37] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 150 4 150 42] Invariant1.invariant' ( ^ t) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 151 4 151 42] Invariant2.invariant' ( ^ w) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 152 4 152 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 156 4 156 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 157 4 157 29] Equisat0.equisat ( * f) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 158 4 162 7] match (result) with + | Type.Core_Option_Option_Some (False) -> NotSatisfiable0.not_satisfiable ( ^ f) + | Type.Core_Option_Option_Some (True) -> true + | Type.Core_Option_Option_None -> true end } end -module CreuSat_Solver_Impl0_OuterLoop +module CreuSat_Solver_Impl0_HandleConflict use mach.int.UInt64 use mach.int.Int use prelude.Prelude use mach.int.Int32 + use seq.Seq use Type use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner2.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = Invariant7.index_logic, function IndexLogic0.index_logic = SatInner2.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with predicate Invariant0.invariant' = Invariant6.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner2 with predicate SatInner0.sat_inner = Sat1.sat_inner, - predicate SatInner0.sat_inner = SatInner1.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, + function IndexLogic0.index_logic = IndexLogic0.index_logic clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model6.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model6 with function Model0.model = NotSatisfiable0.model, - function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, - function Model2.model = WatchesInvariantInternal0.model, function Model0.model = Invariant4.model, - function Model1.model = UnitAreSat0.model, function Model0.model = LitIdxIn0.model, - function Model0.model = SatInner1.model, function Model0.model = ClausePostWithRegardsToInner0.model, - function Model1.model = Invariant8.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner1 with predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner, - predicate SatInner0.sat_inner = SatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = Sat0.formula_sat_inner, - predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss1.formula_sat_inner - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = Complete0.unset, - predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner, - predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss1.complete_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, - function Model0.model = Model0.model, function Model3.model = InvariantNoDecisionMirror0.model, - function Model1.model = WatchesInvariantInternal0.model, function Model0.model = LongArePostUnitInner0.model, - function Model0.model = UnitAreSat0.model, function Model0.model = SatInner0.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant8.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with predicate Invariant1.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant4.invariant_internal - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtension0.equisat_extension_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model5.model, axiom . - clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model7 with function Model0.model = Model10.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with function Model0.model = Model7.model, + predicate SatInner0.sat_inner = SatInner1.sat_inner + clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate SatInner0.sat_inner = SatInner2.sat_inner + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant7.invariant' + clone CreuSat_Logic_Logic_Unset as Unset0 + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset + clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, + predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 + clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with function Model0.model = Model0.model, + function Model1.model = Model7.model + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model7.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner1.sat_inner, + predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model7.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model0.model, + predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant7.invariant', + predicate Invariant1.invariant' = Invariant8.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant6.invariant' + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, + predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss1.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with function Model0.model = Model0.model, + predicate SatInner0.sat_inner = SatInner2.sat_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, axiom . clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model5 with function Model1.model = Sat0.model, - function Model0.model = Complete0.model, function Model2.model = InvariantNoDecision0.model, - function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant5.model, - function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat1.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat1 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant1.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant1.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Invariant0.model, - function Model0.model = Sat0.model, function Model0.model = EquisatExtension0.model - clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with predicate EquisatExtension0.equisat_extension = NotSatisfiable0.equisat_extension - clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, function Model0.model = Invariant3.model, axiom . - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant2.watches_invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, function Model0.model = Invariant2.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant1.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant1.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable as NotSatisfiable0 - clone CreuSat_Logic_LogicAssignments_Impl1_Complete as Complete0 - clone CreuSat_Logic_LogicFormula_Impl2_Sat as Sat0 - clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant3 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model6 with function Model0.model = Model9.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model6.model, + predicate SatInner0.sat_inner = SatInner1.sat_inner + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model0.model, + function Model1.model = Model7.model, predicate Sat0.sat = Sat0.sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = usize, type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model2.model, + predicate Sorted0.sorted = Sorted0.sorted + clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model3.model, + function Model1.model = Model6.model, + predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model0.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic, + predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model3.model, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model3.model, + predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with function Model0.model = Model6.model + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with function Model0.model = Model7.model, + predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Model0.model + clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with function Model0.model = Model1.model, + predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, + predicate SatInner0.sat_inner = SatInner0.sat_inner + clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner0 with function Model0.model = Model7.model, + predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_decision_node, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model8.model, + function Model1.model = Model0.model, function Model2.model = Model7.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model6.model, + function Model1.model = Model3.model, predicate Invariant0.invariant' = Invariant6.invariant', + function Model2.model = Model2.model, function Model3.model = Model0.model, + predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, + predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, + predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, + predicate Invariant0.invariant' = Invariant5.invariant', function Model0.model = Model3.model, + predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model2.model, + predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, + predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, + predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model6.model, + predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, + predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, + predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, + predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant4.invariant', + function Model0.model = Model7.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with function Model0.model = Model0.model, + predicate Invariant0.invariant' = Invariant4.invariant', function Model1.model = Model7.model + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable as NotSatisfiable0 with function Model0.model = Model7.model, + predicate EquisatExtension0.equisat_extension = EquisatExtension0.equisat_extension + clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat0 with function Model0.model = Model6.model, + predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner + clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant3 with function Model0.model = Model5.model + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 with function Model0.model = Model4.model, + predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, + function Model0.model = Model2.model, function Model1.model = Model3.model, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + function Model0.model = Model1.model, + predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . use mach.int.Int64 - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model11.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_assignments_assignments, - function Model0.model = GetNext0.model - clone Alloc_Vec_Impl0_New_Interface as New0 with type t = uint8 - clone CreuSat_Formula_Impl2_IsSat_Interface as IsSat0 - clone CreuSat_Trail_Impl0_EnqDecision_Interface as EnqDecision0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve4 with type t = Type.creusat_trail_trail - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve3 with type t = Type.creusat_formula_formula - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_decision_decisions - clone CreuSat_Decision_Impl1_GetNext_Interface as GetNext0 - clone CreuSat_Trail_Impl0_BacktrackTo_Interface as BacktrackTo0 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_watches_watches + clone CreuSat_Logic_LogicClause_Impl2_Equals as Equals0 with function Model0.model = Model7.model + clone CreuSat_Logic_LogicFormula_Equisat as Equisat1 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss1.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicFormula_Compatible as Compatible0 with predicate Equals0.equals = Equals0.equals + clone CreuSat_Logic_LogicFormula_EquisatCompatibleInner as EquisatCompatibleInner0 with predicate Compatible0.compatible = Compatible0.compatible, + predicate Equisat0.equisat = Equisat1.equisat + clone CreuSat_Logic_LogicFormula_Impl2_EquisatCompatible as EquisatCompatible0 with function Model0.model = Model1.model, + predicate EquisatCompatibleInner0.equisat_compatible_inner = EquisatCompatibleInner0.equisat_compatible_inner + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 + clone CreusotContracts_Logic_Model_Impl1_Model as Model12 with type t = Type.creusat_formula_formula, + type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model + clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_formula_formula, + type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model + clone CreuSat_Formula_Impl2_SimplifyFormula_Interface as SimplifyFormula0 with predicate Invariant0.invariant' = Invariant0.invariant', + predicate Invariant1.invariant' = Invariant2.invariant', predicate Invariant2.invariant' = Invariant1.invariant', + predicate Equisat0.equisat = Equisat0.equisat, + predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror + clone CreuSat_Formula_Impl2_ReduceDb_Interface as ReduceDb0 with predicate Invariant0.invariant' = Invariant0.invariant', + predicate Invariant1.invariant' = Invariant2.invariant', predicate Invariant2.invariant' = Invariant1.invariant', + predicate Equisat0.equisat = Equisat0.equisat, + predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror + clone CreuSat_Trail_Impl0_LearnUnit_Interface as LearnUnit0 with predicate Invariant0.invariant' = Invariant1.invariant', + predicate Invariant1.invariant' = Invariant3.invariant', predicate Invariant2.invariant' = Invariant0.invariant', + function Model0.model = Model0.model, function Model1.model = Model7.model, + predicate Invariant3.invariant' = Invariant4.invariant', function Model2.model = Model3.model, + function Model3.model = Model6.model, + predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, + predicate Sat0.sat = Sat0.sat, predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror + clone CreuSat_Formula_Impl2_AddUnit_Interface as AddUnit0 with predicate Invariant0.invariant' = Invariant0.invariant', + predicate Invariant1.invariant' = Invariant1.invariant', function Model0.model = Model7.model, + predicate Invariant2.invariant' = Invariant4.invariant', + predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, + predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner, + function Model1.model = Model12.model, + predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner, + predicate EquisatCompatible0.equisat_compatible = EquisatCompatible0.equisat_compatible, + predicate Equisat0.equisat = Equisat0.equisat, function Model2.model = Model0.model, + predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror + clone CreuSat_Solver_Impl0_HandleLongClause_Interface as HandleLongClause0 with predicate Invariant0.invariant' = Invariant0.invariant', + predicate Invariant1.invariant' = Invariant1.invariant', predicate Invariant2.invariant' = Invariant2.invariant', + predicate Invariant3.invariant' = Invariant3.invariant', predicate Invariant4.invariant' = Invariant4.invariant', + function Model0.model = Model12.model, + predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner, + function Model1.model = Model7.model, predicate Equisat0.equisat = Equisat0.equisat, + predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror + clone CreuSat_Trail_Impl0_BacktrackSafe_Interface as BacktrackSafe0 with predicate Invariant0.invariant' = Invariant0.invariant', + predicate Invariant1.invariant' = Invariant1.invariant', predicate Invariant2.invariant' = Invariant3.invariant', + function Model0.model = Model3.model, function Model1.model = Model6.model, + predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, + predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror + clone CreuSat_Formula_Impl2_AddClause_Interface as AddClause0 with predicate Invariant0.invariant' = Invariant0.invariant', + predicate Invariant1.invariant' = Invariant1.invariant', predicate Invariant2.invariant' = Invariant2.invariant', + function Model0.model = Model7.model, predicate Invariant3.invariant' = Invariant4.invariant', + function Model1.model = Model12.model, + predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner, + predicate Equisat0.equisat = Equisat0.equisat, function Model2.model = Model0.model, + predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve4 with type t = Type.creusat_decision_decisions + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve3 with type t = Type.creusat_watches_watches + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_trail_trail + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_formula_formula clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_solver_solver - clone CreuSat_Formula_Impl2_ReduceDb_Interface as ReduceDb0 - clone CreuSat_Trail_Impl0_DecisionLevel_Interface as DecisionLevel0 - clone CreuSat_Solver_Impl0_UnitPropLoop_Interface as UnitPropLoop0 - let rec cfg outer_loop [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 277 4 277 113] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (d : borrowed (Type.creusat_decision_decisions)) (trail : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) : Type.creusat_solver_satresult - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 262 4 262 37] Invariant0.invariant' ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 263 4 263 46] Invariant1.invariant' ( * trail) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 264 4 264 42] Invariant2.invariant' ( * w) ( * f)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 265 4 265 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 266 4 266 41] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 267 4 267 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 262 4 262 37] Invariant0.invariant' ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 263 4 263 46] Invariant1.invariant' ( ^ trail) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 264 4 264 42] Invariant2.invariant' ( ^ w) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 265 4 265 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 268 4 268 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 269 4 269 29] Equisat0.equisat ( * f) ( ^ f) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 270 4 276 7] match (result) with - | Type.CreuSat_Solver_SatResult_Sat _ -> Sat0.sat ( ^ f) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) && Complete0.complete (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) - | Type.CreuSat_Solver_SatResult_Unsat -> NotSatisfiable0.not_satisfiable ( ^ f) - | Type.CreuSat_Solver_SatResult_Unknown -> true - | Type.CreuSat_Solver_SatResult_Err -> true + clone CreuSat_ConflictAnalysis_AnalyzeConflict_Interface as AnalyzeConflict0 with predicate Invariant0.invariant' = Invariant0.invariant', + predicate Invariant1.invariant' = Invariant1.invariant', function Model0.model = Model0.model, + predicate Unsat0.unsat = Unsat0.unsat, predicate Invariant2.invariant' = Invariant3.invariant', + predicate NotSatisfiable0.not_satisfiable = NotSatisfiable0.not_satisfiable, + predicate Invariant3.invariant' = Invariant4.invariant', function Model1.model = Model7.model, + predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, + predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner, + function Model2.model = Model11.model, + predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner, + predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror + let rec cfg handle_conflict [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 163 4 165 21] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (t : borrowed (Type.creusat_trail_trail)) (cref : usize) (w : borrowed (Type.creusat_watches_watches)) (d : borrowed (Type.creusat_decision_decisions)) : Type.core_option_option bool + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 149 4 149 37] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 150 4 150 42] Invariant1.invariant' ( * t) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 151 4 151 42] Invariant2.invariant' ( * w) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 152 4 152 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 153 4 153 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 154 4 154 43] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 155 4 155 57] Unsat0.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref)) (Type.creusat_trail_trail_Trail_assignments ( * t))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 149 4 149 37] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 150 4 150 42] Invariant1.invariant' ( ^ t) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 151 4 151 42] Invariant2.invariant' ( ^ w) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 152 4 152 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 156 4 156 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 157 4 157 29] Equisat0.equisat ( * f) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 158 4 162 7] match (result) with + | Type.Core_Option_Option_Some (False) -> NotSatisfiable0.not_satisfiable ( ^ f) + | Type.Core_Option_Option_Some (True) -> true + | Type.Core_Option_Option_None -> true end } - = - var _0 : Type.creusat_solver_satresult; + = [@vc:do_not_keep_trace] [@vc:sp] + var _0 : Type.core_option_option bool; var self_1 : borrowed (Type.creusat_solver_solver); var f_2 : borrowed (Type.creusat_formula_formula); - var d_3 : borrowed (Type.creusat_decision_decisions); - var trail_4 : borrowed (Type.creusat_trail_trail); + var t_3 : borrowed (Type.creusat_trail_trail); + var cref_4 : usize; var w_5 : borrowed (Type.creusat_watches_watches); - var _6 : (); - var _7 : Type.core_option_option bool; - var _8 : borrowed (Type.creusat_solver_solver); - var _9 : borrowed (Type.creusat_formula_formula); - var _10 : borrowed (Type.creusat_decision_decisions); - var _11 : borrowed (Type.creusat_trail_trail); - var _12 : borrowed (Type.creusat_watches_watches); + var d_6 : borrowed (Type.creusat_decision_decisions); + var res_7 : Type.creusat_conflictanalysis_conflict; + var _8 : Type.creusat_formula_formula; + var _9 : Type.creusat_trail_trail; + var _10 : usize; + var _11 : borrowed (Type.creusat_decision_decisions); + var _12 : (); var _13 : isize; var _14 : (); - var _15 : (); - var slow_16 : usize; - var _17 : bool; - var _18 : usize; - var _19 : usize; - var _20 : bool; - var _21 : usize; - var _22 : usize; - var _23 : bool; - var _24 : (); - var _25 : bool; - var _26 : bool; - var _27 : usize; - var _28 : Type.creusat_trail_trail; - var _29 : bool; - var _30 : usize; - var _31 : usize; - var _32 : usize; + var clause_15 : Type.creusat_clause_clause; + var cref_16 : usize; + var _17 : borrowed (Type.creusat_formula_formula); + var _18 : Type.creusat_clause_clause; + var _19 : Type.creusat_trail_trail; + var _20 : (); + var _21 : Type.core_result_result () (); + var _22 : borrowed (Type.creusat_trail_trail); + var _23 : usize; + var _24 : Type.creusat_formula_formula; + var _25 : borrowed (Type.creusat_decision_decisions); + var _26 : isize; + var _27 : (); + var _28 : (); + var _29 : borrowed (Type.creusat_formula_formula); + var _30 : borrowed (Type.creusat_watches_watches); + var _31 : Type.creusat_trail_trail; + var _32 : borrowed (Type.creusat_solver_solver); var _33 : (); - var _34 : bool; - var _35 : usize; - var _36 : usize; - var _37 : (); - var _38 : borrowed (Type.creusat_formula_formula); - var _39 : borrowed (Type.creusat_watches_watches); - var _40 : Type.creusat_trail_trail; - var _41 : borrowed (Type.creusat_solver_solver); - var _42 : (); - var _43 : borrowed (Type.creusat_trail_trail); - var _44 : Type.creusat_formula_formula; - var _45 : borrowed (Type.creusat_decision_decisions); - var _46 : (); - var _47 : Type.core_option_option usize; - var _48 : borrowed (Type.creusat_decision_decisions); - var _49 : Type.creusat_assignments_assignments; - var _50 : Type.creusat_assignments_assignments; - var _51 : Type.creusat_formula_formula; - var _52 : isize; - var next_53 : usize; - var _54 : (); - var _55 : borrowed (Type.creusat_trail_trail); - var _56 : usize; - var _57 : Type.creusat_formula_formula; - var _58 : bool; - var _59 : Type.creusat_formula_formula; - var _60 : Type.creusat_assignments_assignments; - var _61 : Type.creusat_assignments_assignments; - var _62 : (); - var _63 : Type.alloc_vec_vec uint8 (Type.alloc_alloc_global); - var _64 : (); + var _34 : borrowed (Type.creusat_formula_formula); + var _35 : borrowed (Type.creusat_watches_watches); + var _36 : Type.creusat_trail_trail; + var s_idx_37 : usize; + var clause_38 : Type.creusat_clause_clause; + var _39 : (); + var _40 : borrowed (Type.creusat_solver_solver); + var _41 : borrowed (Type.creusat_formula_formula); + var _42 : borrowed (Type.creusat_trail_trail); + var _43 : borrowed (Type.creusat_watches_watches); + var _44 : borrowed (Type.creusat_decision_decisions); + var _45 : Type.creusat_clause_clause; + var _46 : usize; + var clause_47 : Type.creusat_clause_clause; + var _48 : usize; + var _49 : borrowed (Type.creusat_formula_formula); + var _50 : Type.creusat_clause_clause; + var _51 : borrowed (Type.creusat_watches_watches); + var _52 : Type.creusat_trail_trail; + var _53 : (); + var _54 : borrowed (Type.creusat_trail_trail); + var _55 : Type.creusat_formula_formula; + var _56 : borrowed (Type.creusat_decision_decisions); { self_1 <- self; f_2 <- f; - d_3 <- d; - trail_4 <- trail; + t_3 <- t; + cref_4 <- cref; w_5 <- w; + d_6 <- d; goto BB0 } BB0 { - _8 <- borrow_mut ( * self_1); - self_1 <- { self_1 with current = ( ^ _8) }; - _9 <- borrow_mut ( * f_2); - f_2 <- { f_2 with current = ( ^ _9) }; - _10 <- borrow_mut ( * d_3); - d_3 <- { d_3 with current = ( ^ _10) }; - _11 <- borrow_mut ( * trail_4); - trail_4 <- { trail_4 with current = ( ^ _11) }; - _12 <- borrow_mut ( * w_5); - w_5 <- { w_5 with current = ( ^ _12) }; - _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 278 14 278 49] UnitPropLoop0.unit_prop_loop _8 _9 _10 _11 _12); + _8 <- * f_2; + _9 <- * t_3; + _10 <- cref_4; + _11 <- borrow_mut ( * d_6); + d_6 <- { d_6 with current = ( ^ _11) }; + res_7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 166 18 166 49] AnalyzeConflict0.analyze_conflict _8 _9 _10 _11); goto BB1 } BB1 { - switch (_7) - | Type.Core_Option_Option_None -> goto BB5 - | Type.Core_Option_Option_Some _ -> goto BB2 + switch (res_7) + | Type.CreuSat_ConflictAnalysis_Conflict_Ground -> goto BB4 + | Type.CreuSat_ConflictAnalysis_Conflict_Unit _ -> goto BB5 + | Type.CreuSat_ConflictAnalysis_Conflict_Learned _ _ -> goto BB14 + | Type.CreuSat_ConflictAnalysis_Conflict_Restart _ -> goto BB2 end } BB2 { - switch (Type.core_option_option_Some_0 _7) - | False -> goto BB4 - | _ -> goto BB3 - end + assume { Resolve0.resolve self_1 }; + clause_47 <- Type.creusat_conflictanalysis_conflict_Restart_0 res_7; + _49 <- borrow_mut ( * f_2); + f_2 <- { f_2 with current = ( ^ _49) }; + _50 <- clause_47; + _51 <- borrow_mut ( * w_5); + w_5 <- { w_5 with current = ( ^ _51) }; + _52 <- * t_3; + _48 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 187 16 187 42] AddClause0.add_clause _49 _50 _51 _52); + goto BB17 } BB3 { - _6 <- (); - _18 <- Type.creusat_solver_solver_Solver_slow ( * self_1); - _20 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 283 34 283 48] (2 : usize) = (0 : usize)); - assert { not _20 }; - goto BB6 + assume { Resolve0.resolve self_1 }; + assume { Resolve1.resolve f_2 }; + assume { Resolve2.resolve t_3 }; + assume { Resolve3.resolve w_5 }; + assume { Resolve4.resolve d_6 }; + absurd } BB4 { assume { Resolve0.resolve self_1 }; - assume { Resolve3.resolve f_2 }; - assume { Resolve2.resolve d_3 }; - assume { Resolve4.resolve trail_4 }; - assume { Resolve1.resolve w_5 }; - _0 <- Type.CreuSat_Solver_SatResult_Unsat; - goto BB34 + assume { Resolve1.resolve f_2 }; + assume { Resolve2.resolve t_3 }; + assume { Resolve3.resolve w_5 }; + assume { Resolve4.resolve d_6 }; + _0 <- Type.Core_Option_Option_Some false; + goto BB23 } BB5 { - assume { Resolve0.resolve self_1 }; - assume { Resolve3.resolve f_2 }; - assume { Resolve2.resolve d_3 }; - assume { Resolve4.resolve trail_4 }; - assume { Resolve1.resolve w_5 }; - _0 <- Type.CreuSat_Solver_SatResult_Err; - goto BB34 + clause_15 <- Type.creusat_conflictanalysis_conflict_Unit_0 res_7; + _17 <- borrow_mut ( * f_2); + f_2 <- { f_2 with current = ( ^ _17) }; + _18 <- clause_15; + _19 <- * t_3; + cref_16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 175 27 175 48] AddUnit0.add_unit _17 _18 _19); + goto BB6 } BB6 { - _19 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 283 34 283 48] (18446744073709551615 : usize) / (2 : usize)); - _17 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 283 22 283 48] _18 < _19); - switch (_17) - | False -> goto BB9 - | _ -> goto BB7 - end + _22 <- borrow_mut ( * t_3); + t_3 <- { t_3 with current = ( ^ _22) }; + _23 <- cref_16; + _24 <- * f_2; + _25 <- borrow_mut ( * d_6); + d_6 <- { d_6 with current = ( ^ _25) }; + _21 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 176 22 176 46] LearnUnit0.learn_unit _22 _23 _24 _25); + goto BB7 } BB7 { - _22 <- Type.creusat_solver_solver_Solver_slow ( * self_1); - _23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 283 51 283 68] (100 : usize) = (0 : usize)); - assert { not _23 }; - goto BB8 + assume { Resolve4.resolve d_6 }; + switch (_21) + | Type.Core_Result_Result_Ok _ -> goto BB8 + | Type.Core_Result_Result_Err _ -> goto BB10 + end } BB8 { - _21 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 283 51 283 68] _22 / (100 : usize)); - slow_16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 283 51 283 74] _21 * (125 : usize)); - goto BB10 + _20 <- (); + _29 <- borrow_mut ( * f_2); + f_2 <- { f_2 with current = ( ^ _29) }; + _30 <- borrow_mut ( * w_5); + w_5 <- { w_5 with current = ( ^ _30) }; + _31 <- * t_3; + _32 <- borrow_mut ( * self_1); + self_1 <- { self_1 with current = ( ^ _32) }; + _28 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 180 16 180 38] ReduceDb0.reduceDB _29 _30 _31 _32); + goto BB11 } BB9 { - slow_16 <- Type.creusat_solver_solver_Solver_slow ( * self_1); - goto BB10 + assume { Resolve0.resolve self_1 }; + assume { Resolve1.resolve f_2 }; + assume { Resolve2.resolve t_3 }; + assume { Resolve3.resolve w_5 }; + absurd } BB10 { - _28 <- * trail_4; - _27 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 284 11 284 33] DecisionLevel0.decision_level _28); - goto BB14 + assume { Resolve0.resolve self_1 }; + assume { Resolve1.resolve f_2 }; + assume { Resolve2.resolve t_3 }; + assume { Resolve3.resolve w_5 }; + _0 <- Type.Core_Option_Option_Some true; + goto BB22 } BB11 { - _25 <- false; - goto BB13 + assume { Resolve0.resolve self_1 }; + _34 <- borrow_mut ( * f_2); + f_2 <- { f_2 with current = ( ^ _34) }; + _35 <- borrow_mut ( * w_5); + w_5 <- { w_5 with current = ( ^ _35) }; + _36 <- * t_3; + assume { Resolve2.resolve t_3 }; + _33 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 181 16 181 40] SimplifyFormula0.simplify_formula _34 _35 _36); + goto BB12 } BB12 { - _30 <- Type.creusat_solver_solver_Solver_fast ( * self_1); - _31 <- slow_16; - _29 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 284 41 284 57] _30 > _31); - _25 <- _29; + assume { Resolve1.resolve f_2 }; + assume { Resolve3.resolve w_5 }; + _12 <- (); goto BB13 } BB13 { - switch (_25) - | False -> goto BB21 - | _ -> goto BB15 - end + goto BB20 } BB14 { - _26 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 284 11 284 37] _27 > (0 : usize)); - switch (_26) - | False -> goto BB11 - | _ -> goto BB12 - end + s_idx_37 <- Type.creusat_conflictanalysis_conflict_Learned_0 res_7; + clause_38 <- Type.creusat_conflictanalysis_conflict_Learned_1 res_7; + _40 <- borrow_mut ( * self_1); + self_1 <- { self_1 with current = ( ^ _40) }; + _41 <- borrow_mut ( * f_2); + f_2 <- { f_2 with current = ( ^ _41) }; + _42 <- borrow_mut ( * t_3); + t_3 <- { t_3 with current = ( ^ _42) }; + _43 <- borrow_mut ( * w_5); + w_5 <- { w_5 with current = ( ^ _43) }; + _44 <- borrow_mut ( * d_6); + d_6 <- { d_6 with current = ( ^ _44) }; + _45 <- clause_38; + _46 <- s_idx_37; + _39 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 184 16 184 66] HandleLongClause0.handle_long_clause _40 _41 _42 _43 _44 _45 _46); + goto BB15 } BB15 { - _32 <- slow_16; - self_1 <- { self_1 with current = (let Type.CreuSat_Solver_Solver a b c d e f g h = * self_1 in Type.CreuSat_Solver_Solver a b c d e _32 g h) }; - _35 <- Type.creusat_solver_solver_Solver_num_lemmas ( * self_1); - _36 <- Type.creusat_solver_solver_Solver_max_lemmas ( * self_1); - _34 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 286 15 286 48] _35 > _36); - switch (_34) - | False -> goto BB18 - | _ -> goto BB16 - end + assume { Resolve0.resolve self_1 }; + assume { Resolve1.resolve f_2 }; + assume { Resolve2.resolve t_3 }; + assume { Resolve3.resolve w_5 }; + assume { Resolve4.resolve d_6 }; + _12 <- (); + goto BB16 } BB16 { - _38 <- borrow_mut ( * f_2); - f_2 <- { f_2 with current = ( ^ _38) }; - _39 <- borrow_mut ( * w_5); - w_5 <- { w_5 with current = ( ^ _39) }; - _40 <- * trail_4; - _41 <- borrow_mut ( * self_1); - self_1 <- { self_1 with current = ( ^ _41) }; - _37 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 287 16 287 42] ReduceDb0.reduceDB _38 _39 _40 _41); - goto BB17 + goto BB20 } BB17 { - assume { Resolve0.resolve self_1 }; - assume { Resolve1.resolve w_5 }; - _33 <- (); - goto BB19 + assume { Resolve3.resolve w_5 }; + _54 <- borrow_mut ( * t_3); + t_3 <- { t_3 with current = ( ^ _54) }; + _55 <- * f_2; + assume { Resolve1.resolve f_2 }; + _56 <- borrow_mut ( * d_6); + d_6 <- { d_6 with current = ( ^ _56) }; + _53 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 188 16 188 41] BacktrackSafe0.backtrack_safe _54 (0 : usize) _55 _56); + goto BB18 } BB18 { - assume { Resolve0.resolve self_1 }; - assume { Resolve1.resolve w_5 }; - _33 <- (); + assume { Resolve2.resolve t_3 }; + assume { Resolve4.resolve d_6 }; + _12 <- (); goto BB19 } BB19 { - _43 <- borrow_mut ( * trail_4); - trail_4 <- { trail_4 with current = ( ^ _43) }; - _44 <- * f_2; - _45 <- borrow_mut ( * d_3); - d_3 <- { d_3 with current = ( ^ _45) }; - _42 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 289 12 289 39] BacktrackTo0.backtrack_to _43 (0 : usize) _44 _45); goto BB20 } BB20 { - _24 <- (); - goto BB22 + _0 <- Type.Core_Option_Option_None; + goto BB21 } BB21 { - assume { Resolve0.resolve self_1 }; - assume { Resolve1.resolve w_5 }; - _24 <- (); - goto BB22 + goto BB25 } BB22 { - _48 <- borrow_mut ( * d_3); - d_3 <- { d_3 with current = ( ^ _48) }; - _50 <- Type.creusat_trail_trail_Trail_assignments ( * trail_4); - _49 <- _50; - _51 <- * f_2; - _47 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 292 14 292 47] GetNext0.get_next _48 _49 _51); goto BB23 } BB23 { - assume { Resolve2.resolve d_3 }; - switch (_47) - | Type.Core_Option_Option_None -> goto BB24 - | Type.Core_Option_Option_Some _ -> goto BB26 - end + goto BB24 } BB24 { - _59 <- * f_2; - assume { Resolve3.resolve f_2 }; - _61 <- Type.creusat_trail_trail_Trail_assignments ( * trail_4); - assume { Resolve4.resolve trail_4 }; - _60 <- _61; - _58 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 301 19 301 47] IsSat0.is_sat _59 _60); - goto BB28 + goto BB25 } BB25 { - assume { Resolve3.resolve f_2 }; - assume { Resolve4.resolve trail_4 }; - absurd - } - BB26 { - next_53 <- Type.core_option_option_Some_0 _47; - _55 <- borrow_mut ( * trail_4); - trail_4 <- { trail_4 with current = ( ^ _55) }; - _56 <- next_53; - _57 <- * f_2; - assume { Resolve3.resolve f_2 }; - _54 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 294 16 294 43] EnqDecision0.enq_decision _55 _56 _57); - goto BB27 - } - BB27 { - assume { Resolve4.resolve trail_4 }; - _46 <- (); - _0 <- Type.CreuSat_Solver_SatResult_Unknown; - goto BB35 - } - BB28 { - switch (_58) - | False -> goto BB32 - | _ -> goto BB29 - end - } - BB29 { - _63 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 302 42 302 52] New0.new ()); - goto BB30 - } - BB30 { - _0 <- Type.CreuSat_Solver_SatResult_Sat _63; - goto BB31 - } - BB31 { - goto BB33 - } - BB32 { - _0 <- Type.CreuSat_Solver_SatResult_Err; - goto BB33 - } - BB33 { - goto BB35 - } - BB34 { - goto BB35 - } - BB35 { return _0 } end -module CreuSat_Solver_Impl0_Inner_Interface +module CreuSat_Util_MinLog_Interface + use mach.int.Int + function min_log (a : int) (b : int) : int +end +module CreuSat_Util_MinLog + use mach.int.Int + function min_log [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 88 0 88 33] (a : int) (b : int) : int = + [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 87 0 87 8] if a <= b then a else b +end +module CreuSat_Util_Min_Interface + use mach.int.UInt64 + use mach.int.Int + use prelude.Prelude + clone CreuSat_Util_MinLog_Interface as MinLog0 + val min [@cfg:stackify] (a : usize) (b : usize) : usize + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 96 0 96 38] UInt64.to_int result = MinLog0.min_log (UInt64.to_int a) (UInt64.to_int b) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 97 0 97 38] UInt64.to_int a <= UInt64.to_int b -> UInt64.to_int result = UInt64.to_int a } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 98 0 98 37] UInt64.to_int b < UInt64.to_int a -> UInt64.to_int result = UInt64.to_int b } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 99 0 99 42] UInt64.to_int result <= UInt64.to_int b /\ UInt64.to_int result <= UInt64.to_int a } + +end +module CreuSat_Util_MaxLog_Interface + use mach.int.Int + function max_log (a : int) (b : int) : int +end +module CreuSat_Util_MaxLog + use mach.int.Int + function max_log [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 109 0 109 33] (a : int) (b : int) : int = + [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 108 0 108 8] if a >= b then a else b +end +module CreuSat_Util_Max_Interface + use mach.int.UInt64 + use mach.int.Int + use prelude.Prelude + clone CreuSat_Util_MaxLog_Interface as MaxLog0 + val max [@cfg:stackify] (a : usize) (b : usize) : usize + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/util.rs" 117 0 117 38] UInt64.to_int result = MaxLog0.max_log (UInt64.to_int a) (UInt64.to_int b) } + +end +module CreuSat_UnitProp_Swap_Interface + use mach.int.UInt64 + use seq.Seq + use mach.int.Int + use mach.int.Int32 + use seq.Permut + use prelude.Prelude + use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicLit_Impl1_SatInner_Interface as SatInner0 + clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model2 + clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + val swap [@cfg:stackify] (f : borrowed (Type.creusat_formula_formula)) (trail : Type.creusat_trail_trail) (watches : Type.creusat_watches_watches) (cref : usize) (j : usize) (k : usize) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 52 0 52 33] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 53 0 53 39] Invariant1.invariant' trail ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 54 0 54 41] Invariant2.invariant' watches ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 55 0 55 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) >= 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 56 0 56 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 57 0 57 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) > UInt64.to_int j} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 58 0 58 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) > UInt64.to_int k} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 59 0 59 69] not SatInner0.sat_inner (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) 0) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 52 0 52 33] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 53 0 53 39] Invariant1.invariant' trail ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 54 0 54 41] Invariant2.invariant' watches ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 61 0 61 78] Permut.exchange (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref))) (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) (UInt64.to_int j) (UInt64.to_int k) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 62 0 62 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 63 0 63 55] Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) = Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 65 0 65 25] Equisat0.equisat ( * f) ( ^ f) } + +end +module CreuSat_Watches_UpdateWatch_Interface + use mach.int.UInt64 + use mach.int.Int + use prelude.Prelude + use mach.int.Int32 + use seq.Seq + use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model3 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic_Interface as ToWatchidxLogic0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model2 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant2 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant1 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant0 + val update_watch [@cfg:stackify] (f : Type.creusat_formula_formula) (trail : Type.creusat_trail_trail) (watches : borrowed (Type.creusat_watches_watches)) (cref : usize) (j : usize) (k : usize) (lit : Type.creusat_lit_lit) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 30 0 30 41] Invariant0.invariant' ( * watches) f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 31 0 31 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 32 0 32 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 33 0 33 26] Invariant1.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 34 0 34 32] Invariant2.invariant' trail f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 35 0 35 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 36 0 36 57] 0 <= UInt64.to_int k /\ UInt64.to_int k < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 37 0 37 46] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses f)) (UInt64.to_int cref))) >= 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 38 0 38 70] Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 30 0 30 41] Invariant0.invariant' ( ^ watches) f } + +end +module CreuSat_UnitProp_CheckAndMoveWatch_Interface use mach.int.UInt64 use mach.int.Int use prelude.Prelude use mach.int.Int32 + use seq.Seq use Type - use prelude.UInt8 - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface as NotSatisfiable0 - clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss_Interface as EventuallySatCompleteNoAss0 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicLit_Impl1_Unsat_Interface as Unsat0 clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 - clone CreuSat_Logic_LogicFormula_Impl2_SatInner_Interface as SatInner0 - clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = uint8, type a = Type.alloc_alloc_global, + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model4 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic_Interface as ToWatchidxLogic0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model3 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicLit_Impl1_SatInner_Interface as SatInner0 + clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model2 + clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model1 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant3 + val check_and_move_watch [@cfg:stackify] (f : borrowed (Type.creusat_formula_formula)) (trail : Type.creusat_trail_trail) (watches : borrowed (Type.creusat_watches_watches)) (cref : usize) (j : usize) (k : usize) (lit : Type.creusat_lit_lit) : bool + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 16 0 16 33] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 17 0 17 36] Invariant1.invariant' trail ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 18 0 18 44] Invariant2.invariant' ( * watches) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 19 0 19 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 20 0 20 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 21 0 21 69] not SatInner0.sat_inner (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) 0) (Model2.model (Type.creusat_trail_trail_Trail_assignments trail))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 22 0 22 39] UInt64.to_int cref < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 23 0 23 57] 2 <= UInt64.to_int k /\ UInt64.to_int k < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 24 0 24 70] Seq.length (Model4.model (Seq.get (Model3.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 16 0 16 33] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 17 0 17 36] Invariant1.invariant' trail ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 18 0 18 44] Invariant2.invariant' ( ^ watches) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 25 0 25 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 26 0 26 25] Equisat0.equisat ( * f) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 27 0 27 55] Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) = Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 28 0 28 114] not result -> Unsat0.unsat (Seq.get (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref))) (UInt64.to_int k)) (Type.creusat_trail_trail_Trail_assignments trail) /\ ^ f = * f /\ * watches = ^ watches } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 29 0 29 75] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref))) = Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) } + +end +module CreuSat_UnitProp_ExistsNewWatchableLit_Interface + use mach.int.UInt64 + use mach.int.Int + use prelude.Prelude + use mach.int.Int32 + use seq.Seq + use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicLit_Impl1_Unsat_Interface as Unsat0 + clone CreuSat_Logic_LogicLit_Impl1_SatInner_Interface as SatInner0 + clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model4 + clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model3 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model2 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, axiom . + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic_Interface as ToWatchidxLogic0 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + val exists_new_watchable_lit [@cfg:stackify] (f : borrowed (Type.creusat_formula_formula)) (trail : Type.creusat_trail_trail) (watches : borrowed (Type.creusat_watches_watches)) (cref : usize) (j : usize) (lit : Type.creusat_lit_lit) : bool + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 86 0 86 33] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 87 0 87 38] Invariant1.invariant' trail ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 88 0 88 44] Invariant2.invariant' ( * watches) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 89 0 89 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 90 0 90 63] ToWatchidxLogic0.to_watchidx_logic lit < Seq.length (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 91 0 91 70] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 92 0 92 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 93 0 93 39] UInt64.to_int cref < Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 94 0 94 46] Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) >= 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 95 0 95 69] not SatInner0.sat_inner (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) 0) (Model4.model (Type.creusat_trail_trail_Trail_assignments trail))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 86 0 86 33] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 87 0 87 38] Invariant1.invariant' trail ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 88 0 88 44] Invariant2.invariant' ( ^ watches) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 96 0 96 136] not result -> (forall m : (int) . 2 <= m /\ m < Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) -> Unsat0.unsat (Seq.get (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) m) (Type.creusat_trail_trail_Trail_assignments trail)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 97 0 97 75] not result -> Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref)) = Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int cref)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 98 0 98 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 99 0 99 55] Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) = Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 100 0 100 25] Equisat0.equisat ( * f) ( ^ f) } + +end +module CreuSat_UnitProp_PropagateLitWithRegardToClause_Interface + use seq.Seq + use mach.int.Int + use mach.int.UInt64 + use prelude.Prelude + use mach.int.Int32 + use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicClause_Impl2_Unsat_Interface as Unsat1 + clone CreuSat_Logic_LogicFormula_Impl2_Unsat_Interface as Unsat0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model4 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model_Interface as Model3 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model2 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, axiom . + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicLit_Impl0_ToWatchidxLogic_Interface as ToWatchidxLogic0 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + val propagate_lit_with_regard_to_clause [@cfg:stackify] (f : borrowed (Type.creusat_formula_formula)) (trail : borrowed (Type.creusat_trail_trail)) (watches : borrowed (Type.creusat_watches_watches)) (cref : usize) (lit : Type.creusat_lit_lit) (j : usize) : Type.core_result_result bool usize + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 149 0 149 33] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 150 0 150 42] Invariant1.invariant' ( * trail) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 151 0 151 44] Invariant2.invariant' ( * watches) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 152 0 152 63] ToWatchidxLogic0.to_watchidx_logic lit < Seq.length (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 153 0 153 70] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( * watches))) (ToWatchidxLogic0.to_watchidx_logic lit))) > UInt64.to_int j} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 154 0 154 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 155 0 155 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 156 0 156 39] UInt64.to_int cref < Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 157 0 157 46] Seq.length (Model3.model (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( * f))) (UInt64.to_int cref))) >= 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 149 0 149 33] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 150 0 150 42] Invariant1.invariant' ( ^ trail) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 151 0 151 44] Invariant2.invariant' ( ^ watches) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 158 0 158 49] Type.creusat_trail_trail_Trail_decisions ( ^ trail) = Type.creusat_trail_trail_Trail_decisions ( * trail) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 159 0 163 3] match (result) with + | Type.Core_Result_Result_Ok (True) -> true + | Type.Core_Result_Result_Ok (False) -> Seq.length (Model4.model (Type.creusat_trail_trail_Trail_trail ( ^ trail))) = Seq.length (Model4.model (Type.creusat_trail_trail_Trail_trail ( * trail))) + | Type.Core_Result_Result_Err n -> UInt64.to_int n < Seq.length (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) /\ Unsat0.unsat ( ^ f) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) /\ Unsat1.unsat (Seq.get (Model2.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int n)) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) + end } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 164 0 164 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 165 0 165 25] Equisat0.equisat ( * f) ( ^ f) } + +end +module CreuSat_UnitProp_PropagateLiteral_Interface + use mach.int.UInt64 + use mach.int.Int + use prelude.Prelude + use mach.int.Int32 + use Type + use seq.Seq + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicClause_Impl2_Unsat_Interface as Unsat1 + clone CreuSat_Logic_LogicFormula_Impl2_Unsat_Interface as Unsat0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic_Interface as IndexLogic0 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + val propagate_literal [@cfg:stackify] (f : borrowed (Type.creusat_formula_formula)) (trail : borrowed (Type.creusat_trail_trail)) (watches : borrowed (Type.creusat_watches_watches)) (lit : Type.creusat_lit_lit) : Type.core_result_result () usize + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 230 0 230 33] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 231 0 231 42] Invariant1.invariant' ( * trail) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 232 0 232 44] Invariant2.invariant' ( * watches) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 233 0 233 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 234 0 234 44] IndexLogic0.index_logic lit < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 230 0 230 33] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 231 0 231 42] Invariant1.invariant' ( ^ trail) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 232 0 232 44] Invariant2.invariant' ( ^ watches) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 235 0 238 3] match (result) with + | Type.Core_Result_Result_Ok () -> true + | Type.Core_Result_Result_Err n -> UInt64.to_int n < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) /\ Unsat0.unsat ( ^ f) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) /\ Unsat1.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int n)) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) + end } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 239 0 239 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 240 0 240 25] Equisat0.equisat ( * f) ( ^ f) } + +end +module CreuSat_UnitProp_UnitPropagate_Interface + use mach.int.UInt64 + use mach.int.Int + use prelude.Prelude + use mach.int.Int32 + use Type + use seq.Seq + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicClause_Impl2_Unsat_Interface as Unsat1 + clone CreuSat_Logic_LogicFormula_Impl2_Unsat_Interface as Unsat0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + val unit_propagate [@cfg:stackify] (f : borrowed (Type.creusat_formula_formula)) (trail : borrowed (Type.creusat_trail_trail)) (watches : borrowed (Type.creusat_watches_watches)) : Type.core_result_result () usize + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 280 0 280 33] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 281 0 281 42] Invariant1.invariant' ( * trail) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 282 0 282 44] Invariant2.invariant' ( * watches) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 283 0 283 40] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 280 0 280 33] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 281 0 281 42] Invariant1.invariant' ( ^ trail) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 282 0 282 44] Invariant2.invariant' ( ^ watches) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 284 0 287 3] match (result) with + | Type.Core_Result_Result_Ok () -> true + | Type.Core_Result_Result_Err n -> UInt64.to_int n < Seq.length (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) /\ Unsat0.unsat ( ^ f) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) /\ Unsat1.unsat (Seq.get (Model0.model (Type.creusat_formula_formula_Formula_clauses ( ^ f))) (UInt64.to_int n)) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) + end } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 288 0 288 41] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/unit_prop.rs" 289 0 289 25] Equisat0.equisat ( * f) ( ^ f) } + +end +module CreuSat_Solver_Impl0_UnitPropStep_Interface + use mach.int.UInt64 + use mach.int.Int + use prelude.Prelude + use mach.int.Int32 + use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface as NotSatisfiable0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant3 clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val inner [@cfg:stackify] (self : borrowed (Type.creusat_solver_solver)) (formula : borrowed (Type.creusat_formula_formula)) (decisions : Type.creusat_decision_decisions) (trail : Type.creusat_trail_trail) (watches : Type.creusat_watches_watches) : Type.creusat_solver_satresult - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 313 4 313 50] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula)) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 314 4 314 36] Invariant0.invariant' ( * formula)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 315 4 315 55] Invariant1.invariant' decisions (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 316 4 316 42] Invariant2.invariant' trail ( * formula)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 317 4 317 44] Invariant3.invariant' watches ( * formula)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 318 4 318 55] Invariant1.invariant' decisions (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula)))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 319 4 323 7] match (result) with - | Type.CreuSat_Solver_SatResult_Sat v -> SatInner0.sat_inner ( ^ formula) (Model0.model v) && Equisat0.equisat ( * formula) ( ^ formula) && EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass ( * formula) - | Type.CreuSat_Solver_SatResult_Unsat -> NotSatisfiable0.not_satisfiable ( ^ formula) && Equisat0.equisat ( * formula) ( ^ formula) + clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + val unit_prop_step [@cfg:stackify] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (d : borrowed (Type.creusat_decision_decisions)) (t : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) : Type.creusat_solver_conflictresult + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 195 4 195 37] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 196 4 196 42] Invariant1.invariant' ( * w) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 197 4 197 42] Invariant2.invariant' ( * t) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 198 4 198 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 199 4 199 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 195 4 195 37] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 196 4 196 42] Invariant1.invariant' ( ^ w) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 197 4 197 42] Invariant2.invariant' ( ^ t) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 198 4 198 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 200 4 200 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 201 4 201 29] Equisat0.equisat ( * f) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 202 4 205 7] match (result) with + | Type.CreuSat_Solver_ConflictResult_Ground -> NotSatisfiable0.not_satisfiable ( ^ f) | _ -> true end } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 324 4 324 41] Equisat0.equisat ( * formula) ( ^ formula) } end -module CreuSat_Solver_Impl0_Inner +module CreuSat_Solver_Impl0_UnitPropStep use mach.int.UInt64 use mach.int.Int use prelude.Prelude use mach.int.Int32 use Type use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, - function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = SatInner2.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = Invariant7.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner2.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner2 with predicate SatInner0.sat_inner = SatInner1.sat_inner, - predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model7.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model7 with function Model0.model = NotSatisfiable0.model, - function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, - function Model2.model = WatchesInvariantInternal0.model, function Model0.model = SatInner1.model, - function Model0.model = Invariant4.model, function Model1.model = UnitAreSat0.model, - function Model0.model = LitIdxIn0.model, function Model0.model = ClausePostWithRegardsToInner0.model, - function Model1.model = Invariant8.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner1 with predicate SatInner0.sat_inner = SatInner0.sat_inner, - predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss1.formula_sat_inner - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with predicate Invariant0.invariant' = Invariant6.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner, - predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss1.complete_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_lit_lit, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model5 with function Model0.model = Model9.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with function Model0.model = Model5.model, + predicate SatInner0.sat_inner = SatInner1.sat_inner + clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate SatInner0.sat_inner = SatInner2.sat_inner + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant7.invariant' + clone CreuSat_Logic_Logic_Unset as Unset0 + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset + clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, + predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = SatInner0.model, - function Model0.model = InvariantMirror0.model, function Model0.model = Model1.model, - function Model3.model = InvariantNoDecisionMirror0.model, function Model1.model = WatchesInvariantInternal0.model, - function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant8.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with predicate Invariant1.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant4.invariant_internal - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtension0.equisat_extension_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model8.model, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model8 with function Model2.model = InvariantNoDecision0.model, - function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant5.model, - function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant2.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant2.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Invariant0.model, - function Model0.model = EquisatExtension0.model - clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with predicate EquisatExtension0.equisat_extension = NotSatisfiable0.equisat_extension - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant3.watches_invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, function Model0.model = Invariant3.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant2.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant2.invariant_no_decision, - axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, function Model0.model = Invariant1.model, axiom . - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable as NotSatisfiable0 - clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner - clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant3 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with function Model0.model = Model6.model, + function Model1.model = Model5.model + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model5.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner1.sat_inner, + predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = uint8, type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model5.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model6.model, + predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant7.invariant', + predicate Invariant1.invariant' = Invariant8.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant6.invariant' + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, + predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss1.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with function Model0.model = Model6.model, + predicate SatInner0.sat_inner = SatInner2.sat_inner + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model8 with function Model0.model = Model10.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model8.model, + predicate SatInner0.sat_inner = SatInner1.sat_inner + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model6.model, + function Model1.model = Model5.model, predicate Sat0.sat = Sat0.sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = usize, type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model2.model, + predicate Sorted0.sorted = Sorted0.sorted + clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model3.model, + function Model1.model = Model8.model, + predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model6.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic, + predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model3.model, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model3.model, + predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with function Model0.model = Model8.model + clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with function Model0.model = Model5.model, + predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Model6.model + clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with function Model0.model = Model0.model, + predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, + predicate SatInner0.sat_inner = SatInner0.sat_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_decision_node, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model8.model, + function Model1.model = Model3.model, predicate Invariant0.invariant' = Invariant6.invariant', + function Model2.model = Model2.model, function Model3.model = Model6.model, + predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, + predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, + predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, + predicate Invariant0.invariant' = Invariant5.invariant', function Model0.model = Model3.model, + predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model2.model, + predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, + predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, + predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model8.model, + predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, + predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, + predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, + predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model7.model, + function Model1.model = Model6.model, function Model2.model = Model5.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant4.invariant', + function Model0.model = Model5.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with function Model0.model = Model6.model, + predicate Invariant0.invariant' = Invariant4.invariant', function Model1.model = Model5.model + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable as NotSatisfiable0 with function Model0.model = Model5.model, + predicate EquisatExtension0.equisat_extension = EquisatExtension0.equisat_extension + clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant3 with function Model0.model = Model4.model + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, + function Model0.model = Model2.model, function Model1.model = Model3.model, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant1 with function Model0.model = Model1.model, + predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + function Model0.model = Model0.model, + predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . use mach.int.Int64 - clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve6 with type t = uint8, - predicate Resolve0.resolve = Resolve5.resolve - clone CreuSat_Logic_LogicAssignments_Impl1_Complete as Complete0 with predicate Complete0.complete = OuterLoop0.complete - clone CreuSat_Logic_LogicFormula_Impl2_Sat as Sat1 with predicate Sat0.sat = OuterLoop0.sat - clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve5 with type t = uint8 - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve4 with type t = Type.creusat_formula_formula - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve3 with type t = Type.creusat_solver_solver - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_watches_watches - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_trail_trail - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_decision_decisions - clone CreuSat_Solver_Impl0_OuterLoop_Interface as OuterLoop0 - let rec cfg inner [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 325 4 327 18] (self : borrowed (Type.creusat_solver_solver)) (formula : borrowed (Type.creusat_formula_formula)) (decisions : Type.creusat_decision_decisions) (trail : Type.creusat_trail_trail) (watches : Type.creusat_watches_watches) : Type.creusat_solver_satresult - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 313 4 313 50] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula)) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 314 4 314 36] Invariant0.invariant' ( * formula)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 315 4 315 55] Invariant1.invariant' decisions (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 316 4 316 42] Invariant2.invariant' trail ( * formula)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 317 4 317 44] Invariant3.invariant' watches ( * formula)} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 318 4 318 55] Invariant1.invariant' decisions (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula)))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 319 4 323 7] match (result) with - | Type.CreuSat_Solver_SatResult_Sat v -> SatInner0.sat_inner ( ^ formula) (Model0.model v) && Equisat0.equisat ( * formula) ( ^ formula) && EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass ( * formula) - | Type.CreuSat_Solver_SatResult_Unsat -> NotSatisfiable0.not_satisfiable ( ^ formula) && Equisat0.equisat ( * formula) ( ^ formula) + clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner2 with function Model0.model = Model5.model, + predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner + clone CreuSat_Logic_LogicFormula_Impl2_UnsatInner as UnsatInner1 with function Model0.model = Model6.model, + predicate UnsatInner0.unsat_inner = UnsatInner2.unsat_inner + clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat1 with function Model0.model = Model8.model, + predicate UnsatInner0.unsat_inner = UnsatInner2.unsat_inner + clone CreuSat_Logic_LogicFormula_Impl2_Unsat as Unsat0 with function Model0.model = Model8.model, + predicate UnsatInner0.unsat_inner = UnsatInner1.unsat_inner + clone CreuSat_Solver_Impl0_HandleConflict_Interface as HandleConflict0 with predicate Invariant0.invariant' = Invariant0.invariant', + predicate Invariant1.invariant' = Invariant2.invariant', predicate Invariant2.invariant' = Invariant1.invariant', + predicate Invariant3.invariant' = Invariant3.invariant', function Model0.model = Model6.model, + predicate Unsat0.unsat = Unsat1.unsat, predicate Equisat0.equisat = Equisat0.equisat, + predicate NotSatisfiable0.not_satisfiable = NotSatisfiable0.not_satisfiable, + predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve4 with type t = Type.creusat_watches_watches + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve3 with type t = Type.creusat_trail_trail + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_decision_decisions + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_formula_formula + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_solver_solver + clone CreuSat_UnitProp_UnitPropagate_Interface as UnitPropagate0 with predicate Invariant0.invariant' = Invariant0.invariant', + predicate Invariant1.invariant' = Invariant2.invariant', predicate Invariant2.invariant' = Invariant1.invariant', + function Model0.model = Model6.model, predicate Unsat0.unsat = Unsat0.unsat, predicate Unsat1.unsat = Unsat1.unsat, + predicate Equisat0.equisat = Equisat0.equisat, + predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror + let rec cfg unit_prop_step [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 206 4 206 118] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (d : borrowed (Type.creusat_decision_decisions)) (t : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) : Type.creusat_solver_conflictresult + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 195 4 195 37] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 196 4 196 42] Invariant1.invariant' ( * w) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 197 4 197 42] Invariant2.invariant' ( * t) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 198 4 198 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 199 4 199 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 195 4 195 37] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 196 4 196 42] Invariant1.invariant' ( ^ w) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 197 4 197 42] Invariant2.invariant' ( ^ t) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 198 4 198 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 200 4 200 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 201 4 201 29] Equisat0.equisat ( * f) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 202 4 205 7] match (result) with + | Type.CreuSat_Solver_ConflictResult_Ground -> NotSatisfiable0.not_satisfiable ( ^ f) | _ -> true end } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 324 4 324 41] Equisat0.equisat ( * formula) ( ^ formula) } - = - var _0 : Type.creusat_solver_satresult; + = [@vc:do_not_keep_trace] [@vc:sp] + var _0 : Type.creusat_solver_conflictresult; var self_1 : borrowed (Type.creusat_solver_solver); - var formula_2 : borrowed (Type.creusat_formula_formula); - var decisions_3 : Type.creusat_decision_decisions; - var trail_4 : Type.creusat_trail_trail; - var watches_5 : Type.creusat_watches_watches; - ghost var old_f_6 : borrowed (Type.creusat_formula_formula); - var _7 : (); - var _8 : (); - var _9 : (); - var _10 : Type.creusat_solver_satresult; - var _11 : borrowed (Type.creusat_solver_solver); - var _12 : borrowed (Type.creusat_formula_formula); - var _13 : borrowed (Type.creusat_decision_decisions); - var _14 : borrowed (Type.creusat_decision_decisions); + var f_2 : borrowed (Type.creusat_formula_formula); + var d_3 : borrowed (Type.creusat_decision_decisions); + var t_4 : borrowed (Type.creusat_trail_trail); + var w_5 : borrowed (Type.creusat_watches_watches); + var _6 : Type.core_result_result () usize; + var _7 : borrowed (Type.creusat_formula_formula); + var _8 : borrowed (Type.creusat_trail_trail); + var _9 : borrowed (Type.creusat_watches_watches); + var _10 : isize; + var cref_11 : usize; + var _12 : Type.core_option_option bool; + var _13 : borrowed (Type.creusat_solver_solver); + var _14 : borrowed (Type.creusat_formula_formula); var _15 : borrowed (Type.creusat_trail_trail); - var _16 : borrowed (Type.creusat_trail_trail); + var _16 : usize; var _17 : borrowed (Type.creusat_watches_watches); - var _18 : borrowed (Type.creusat_watches_watches); + var _18 : borrowed (Type.creusat_decision_decisions); var _19 : isize; - var _20 : (); - var _21 : Type.alloc_vec_vec uint8 (Type.alloc_alloc_global); - var o_22 : Type.creusat_solver_satresult; - var _23 : (); { self_1 <- self; - formula_2 <- formula; - decisions_3 <- decisions; - trail_4 <- trail; - watches_5 <- watches; - goto BB0 - } - BB0 { - goto BB1 - } - BB1 { - goto BB2 - } - BB2 { - goto BB3 - } - BB3 { - goto BB4 - } - BB4 { - _7 <- (); - old_f_6 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 328 20 328 38] formula_2); - goto BB5 - } - BB5 { - goto BB6 - } - BB6 { - goto BB7 - } - BB7 { - goto BB8 - } - BB8 { - goto BB9 - } - BB9 { - invariant equi { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 329 8 329 59] Equisat0.equisat ( * old_f_6) ( * formula_2) }; - invariant num_vars { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 330 8 330 68] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula_2)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * old_f_6)) }; - invariant maintains_f { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 331 8 331 54] Invariant0.invariant' ( * formula_2) }; - invariant maintains_t { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 332 8 332 60] Invariant2.invariant' trail_4 ( * formula_2) }; - invariant maintains_w { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 333 8 333 62] Invariant3.invariant' watches_5 ( * formula_2) }; - invariant maintains_d { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 334 8 334 73] Invariant1.invariant' decisions_3 (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula_2))) }; - invariant proph_f { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 335 8 335 57] ^ formula_2 = ^ old_f_6 }; - _11 <- borrow_mut ( * self_1); - self_1 <- { self_1 with current = ( ^ _11) }; - _12 <- borrow_mut ( * formula_2); - formula_2 <- { formula_2 with current = ( ^ _12) }; - _14 <- borrow_mut decisions_3; - decisions_3 <- ^ _14; - _13 <- borrow_mut ( * _14); - _14 <- { _14 with current = ( ^ _13) }; - _16 <- borrow_mut trail_4; - trail_4 <- ^ _16; - _15 <- borrow_mut ( * _16); - _16 <- { _16 with current = ( ^ _15) }; - _18 <- borrow_mut watches_5; - watches_5 <- ^ _18; - _17 <- borrow_mut ( * _18); - _18 <- { _18 with current = ( ^ _17) }; - _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 337 18 337 84] OuterLoop0.outer_loop _11 _12 _13 _15 _17); - goto BB10 - } - BB10 { - assume { Resolve0.resolve _14 }; - assume { Resolve1.resolve _16 }; - assume { Resolve2.resolve _18 }; - switch (_10) - | Type.CreuSat_Solver_SatResult_Sat _ -> goto BB13 - | Type.CreuSat_Solver_SatResult_Unknown -> goto BB12 - | _ -> goto BB11 - end - } - BB11 { - assume { Resolve3.resolve self_1 }; - assume { Resolve4.resolve formula_2 }; - o_22 <- _10; - _0 <- o_22; - goto BB16 - } - BB12 { - _9 <- (); - goto BB15 - } - BB13 { - assume { Resolve3.resolve self_1 }; - assume { Resolve4.resolve formula_2 }; - assume { Resolve5.resolve _21 }; - _21 <- Type.creusat_assignments_assignments_Assignments_0 (Type.creusat_trail_trail_Trail_assignments trail_4); - _0 <- Type.CreuSat_Solver_SatResult_Sat _21; - goto BB14 - } - BB14 { - goto BB17 - } - BB15 { - goto BB9 - } - BB16 { - goto BB17 - } - BB17 { - goto BB18 - } - BB18 { - goto BB19 - } - BB19 { - goto BB20 - } - BB20 { - goto BB21 - } - BB21 { - return _0 - } - -end -module CreuSat_Trail_Impl0_New_Interface - use prelude.Prelude - use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant2 - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with axiom . - val new [@cfg:stackify] (f : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) : Type.creusat_trail_trail - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 42 4 42 30] Invariant0.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 43 4 43 32] Invariant1.invariant' a f} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 44 4 44 36] Invariant2.invariant' result f } - -end -module CreuSat_Trail_Impl0_New - use prelude.Prelude - use Type - use mach.int.Int - use prelude.UInt8 - use mach.int.UInt64 - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = Invariant5.index_logic, function IndexLogic0.index_logic = SatInner0.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant5 with predicate Invariant0.invariant' = Invariant4.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model5.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model5 with function Model1.model = InvariantMirror0.model, - function Model0.model = FormulaInvariant0.model, function Model0.model = Invariant3.model, - function Model1.model = UnitAreSat0.model, function Model0.model = LitIdxIn0.model, - function Model0.model = ClausePostWithRegardsToInner0.model, function Model1.model = Invariant6.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = InvariantMirror0.model, - function Model0.model = Model0.model, function Model3.model = InvariantNoDecisionMirror0.model, - function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant6.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant6 with predicate Invariant1.invariant' = Invariant4.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant3.invariant_internal - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model1.model, axiom . - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model1 with function Model0.model = Invariant1.model, - function Model2.model = InvariantNoDecision0.model, function Model0.model = InvariantNoDecisionMirror0.model, - function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant2.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant2.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant2.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant1 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant2.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Invariant0.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with axiom . - clone Alloc_Vec_Impl0_New_Interface as New1 with type t = usize - clone Alloc_Vec_Impl0_New_Interface as New0 with type t = Type.creusat_trail_step - clone Alloc_Vec_FromElem_Interface as FromElem0 with type t = usize - let rec cfg new [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 45 4 45 52] (f : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) : Type.creusat_trail_trail - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 42 4 42 30] Invariant0.invariant' f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 43 4 43 32] Invariant1.invariant' a f} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 44 4 44 36] Invariant2.invariant' result f } - - = - var _0 : Type.creusat_trail_trail; - var f_1 : Type.creusat_formula_formula; - var a_2 : Type.creusat_assignments_assignments; - var _3 : Type.creusat_assignments_assignments; - var _4 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - var _5 : usize; - var _6 : Type.alloc_vec_vec (Type.creusat_trail_step) (Type.alloc_alloc_global); - var _7 : Type.alloc_vec_vec usize (Type.alloc_alloc_global); - { - f_1 <- f; - a_2 <- a; + f_2 <- f; + d_3 <- d; + t_4 <- t; + w_5 <- w; goto BB0 } BB0 { + _7 <- borrow_mut ( * f_2); + f_2 <- { f_2 with current = ( ^ _7) }; + _8 <- borrow_mut ( * t_4); + t_4 <- { t_4 with current = ( ^ _8) }; + _9 <- borrow_mut ( * w_5); + w_5 <- { w_5 with current = ( ^ _9) }; + _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 207 14 207 37] UnitPropagate0.unit_propagate _7 _8 _9); goto BB1 } BB1 { - _3 <- a_2; - _5 <- Type.creusat_formula_formula_Formula_num_vars f_1; - _4 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 48 26 48 64] FromElem0.from_elem (18446744073709551615 : usize) _5); - goto BB2 + switch (_6) + | Type.Core_Result_Result_Ok _ -> goto BB4 + | Type.Core_Result_Result_Err _ -> goto BB2 + end } BB2 { - _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 49 19 49 29] New0.new ()); - goto BB3 + cref_11 <- Type.core_result_result_Err_0 _6; + _13 <- borrow_mut ( * self_1); + self_1 <- { self_1 with current = ( ^ _13) }; + _14 <- borrow_mut ( * f_2); + f_2 <- { f_2 with current = ( ^ _14) }; + _15 <- borrow_mut ( * t_4); + t_4 <- { t_4 with current = ( ^ _15) }; + _16 <- cref_11; + _17 <- borrow_mut ( * w_5); + w_5 <- { w_5 with current = ( ^ _17) }; + _18 <- borrow_mut ( * d_3); + d_3 <- { d_3 with current = ( ^ _18) }; + _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 209 31 209 69] HandleConflict0.handle_conflict _13 _14 _15 _16 _17 _18); + goto BB5 } BB3 { - _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 51 23 51 33] New1.new ()); - goto BB4 + assume { Resolve0.resolve self_1 }; + assume { Resolve1.resolve f_2 }; + assume { Resolve2.resolve d_3 }; + assume { Resolve3.resolve t_4 }; + assume { Resolve4.resolve w_5 }; + absurd } BB4 { - _0 <- Type.CreuSat_Trail_Trail _3 _4 _6 (0 : usize) _7; - goto BB5 + assume { Resolve0.resolve self_1 }; + assume { Resolve1.resolve f_2 }; + assume { Resolve2.resolve d_3 }; + assume { Resolve3.resolve t_4 }; + assume { Resolve4.resolve w_5 }; + _0 <- Type.CreuSat_Solver_ConflictResult_Ok; + goto BB12 } BB5 { - goto BB6 + assume { Resolve0.resolve self_1 }; + assume { Resolve1.resolve f_2 }; + assume { Resolve2.resolve d_3 }; + assume { Resolve3.resolve t_4 }; + assume { Resolve4.resolve w_5 }; + switch (_12) + | Type.Core_Option_Option_None -> goto BB6 + | Type.Core_Option_Option_Some _ -> goto BB7 + end } BB6 { - goto BB7 + _0 <- Type.CreuSat_Solver_ConflictResult_Continue; + goto BB11 } BB7 { - goto BB8 + switch (Type.core_option_option_Some_0 _12) + | False -> goto BB9 + | _ -> goto BB10 + end } BB8 { - goto BB9 + absurd } BB9 { + _0 <- Type.CreuSat_Solver_ConflictResult_Ground; + goto BB11 + } + BB10 { + _0 <- Type.CreuSat_Solver_ConflictResult_Err; + goto BB11 + } + BB11 { + goto BB12 + } + BB12 { return _0 } end -module CreuSat_Watches_Impl0_New_Interface +module CreuSat_Solver_Impl0_UnitPropLoop_Interface + use mach.int.UInt64 + use mach.int.Int use prelude.Prelude + use mach.int.Int32 use Type - clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant0 - val new [@cfg:stackify] (f : Type.creusat_formula_formula) : Type.creusat_watches_watches - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 74 4 74 36] Invariant0.invariant' result f } + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface as NotSatisfiable0 + clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant3 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + val unit_prop_loop [@cfg:stackify] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (d : borrowed (Type.creusat_decision_decisions)) (t : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) : Type.core_option_option bool + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 218 4 218 37] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 219 4 219 42] Invariant1.invariant' ( * t) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 220 4 220 42] Invariant2.invariant' ( * w) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 221 4 221 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 222 4 222 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 218 4 218 37] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 219 4 219 42] Invariant1.invariant' ( ^ t) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 220 4 220 42] Invariant2.invariant' ( ^ w) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 221 4 221 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 223 4 227 7] match (result) with + | Type.Core_Option_Option_Some (False) -> NotSatisfiable0.not_satisfiable ( ^ f) + | Type.Core_Option_Option_Some (True) -> true + | Type.Core_Option_Option_None -> true + end } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 228 4 228 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 229 4 229 29] Equisat0.equisat ( * f) ( ^ f) } end -module CreuSat_Watches_Impl0_New - use prelude.Prelude - use Type +module CreuSat_Solver_Impl0_UnitPropLoop use mach.int.UInt64 use mach.int.Int - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model3.model, axiom . - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic - clone CreuSat_Logic_LogicClause_Impl0_Model as Model3 with function Model2.model = WatchesInvariantInternal0.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model1.model = WatchesInvariantInternal0.model, axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant0.watches_invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, function Model0.model = Invariant0.model, axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant0 - clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve2 with type t = Type.creusat_watches_watcher, - predicate Resolve0.resolve = Resolve1.resolve - clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve1 with type t = Type.creusat_watches_watcher, - predicate Resolve0.resolve = Resolve0.resolve - clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone Alloc_Vec_Impl1_Push_Interface as Push0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl0_New_Interface as New1 with type t = Type.creusat_watches_watcher - clone Alloc_Vec_Impl0_New_Interface as New0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - let rec cfg new [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 75 4 75 38] (f : Type.creusat_formula_formula) : Type.creusat_watches_watches - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 74 4 74 36] Invariant0.invariant' result f } + use prelude.Prelude + use mach.int.Int32 + use Type + use prelude.UInt8 + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_lit_lit, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model5 with function Model0.model = Model9.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner2 with function Model0.model = Model5.model, + predicate SatInner0.sat_inner = SatInner1.sat_inner + clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate SatInner0.sat_inner = SatInner2.sat_inner + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant7.invariant' + clone CreuSat_Logic_Logic_Unset as Unset0 + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset + clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, + predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 + clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with function Model0.model = Model6.model, + function Model1.model = Model5.model + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model5.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner1.sat_inner, + predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = uint8, type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model5.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model6.model, + predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant7.invariant', + predicate Invariant1.invariant' = Invariant8.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant6.invariant' + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, + predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with function Model0.model = Model6.model, + predicate SatInner0.sat_inner = SatInner2.sat_inner + clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss1.eventually_sat_complete_no_ass + clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model7 with function Model0.model = Model10.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model7.model, + predicate SatInner0.sat_inner = SatInner1.sat_inner + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model6.model, + function Model1.model = Model5.model, predicate Sat0.sat = Sat0.sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = usize, type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model1.model, + predicate Sorted0.sorted = Sorted0.sorted + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model2.model, + function Model1.model = Model7.model, + predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model6.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic, + predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model2.model, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model2.model, + predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with function Model0.model = Model7.model + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with function Model0.model = Model5.model, + predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, + predicate SatInner0.sat_inner = SatInner0.sat_inner + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Model6.model + clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with function Model0.model = Model0.model, + predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_decision_node, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model8.model, + function Model1.model = Model6.model, function Model2.model = Model5.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model7.model, + function Model1.model = Model2.model, predicate Invariant0.invariant' = Invariant6.invariant', + function Model2.model = Model1.model, function Model3.model = Model6.model, + predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, + predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, + predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, + predicate Invariant0.invariant' = Invariant5.invariant', function Model0.model = Model2.model, + predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model1.model, + predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, + predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, + predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model7.model, + predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, + predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, + predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, + predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant4.invariant', + function Model0.model = Model5.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with function Model0.model = Model6.model, + predicate Invariant0.invariant' = Invariant4.invariant', function Model1.model = Model5.model + clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable as NotSatisfiable0 with function Model0.model = Model5.model, + predicate EquisatExtension0.equisat_extension = EquisatExtension0.equisat_extension + clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant3 with function Model0.model = Model4.model + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 with function Model0.model = Model3.model, + predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, + function Model0.model = Model1.model, function Model1.model = Model2.model, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + function Model0.model = Model0.model, + predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . + use mach.int.Int64 + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve4 with type t = Type.creusat_watches_watches + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve3 with type t = Type.creusat_trail_trail + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_decision_decisions + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_formula_formula + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_solver_solver + clone CreuSat_Solver_Impl0_UnitPropStep_Interface as UnitPropStep0 with predicate Invariant0.invariant' = Invariant0.invariant', + predicate Invariant1.invariant' = Invariant2.invariant', predicate Invariant2.invariant' = Invariant1.invariant', + predicate Invariant3.invariant' = Invariant3.invariant', predicate Equisat0.equisat = Equisat0.equisat, + predicate NotSatisfiable0.not_satisfiable = NotSatisfiable0.not_satisfiable, + predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror + let rec cfg unit_prop_loop [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 230 4 230 116] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (d : borrowed (Type.creusat_decision_decisions)) (t : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) : Type.core_option_option bool + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 218 4 218 37] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 219 4 219 42] Invariant1.invariant' ( * t) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 220 4 220 42] Invariant2.invariant' ( * w) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 221 4 221 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 222 4 222 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 218 4 218 37] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 219 4 219 42] Invariant1.invariant' ( ^ t) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 220 4 220 42] Invariant2.invariant' ( ^ w) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 221 4 221 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 223 4 227 7] match (result) with + | Type.Core_Option_Option_Some (False) -> NotSatisfiable0.not_satisfiable ( ^ f) + | Type.Core_Option_Option_Some (True) -> true + | Type.Core_Option_Option_None -> true + end } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 228 4 228 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 229 4 229 29] Equisat0.equisat ( * f) ( ^ f) } - = - var _0 : Type.creusat_watches_watches; - var f_1 : Type.creusat_formula_formula; - var i_2 : usize; - var watches_3 : Type.alloc_vec_vec (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)) (Type.alloc_alloc_global); - var _4 : (); - var _5 : (); - var _6 : bool; - var _7 : usize; - var _8 : usize; + = [@vc:do_not_keep_trace] [@vc:sp] + var _0 : Type.core_option_option bool; + var self_1 : borrowed (Type.creusat_solver_solver); + var f_2 : borrowed (Type.creusat_formula_formula); + var d_3 : borrowed (Type.creusat_decision_decisions); + var t_4 : borrowed (Type.creusat_trail_trail); + var w_5 : borrowed (Type.creusat_watches_watches); + ghost var old_f_6 : borrowed (Type.creusat_formula_formula); + var _7 : (); + ghost var old_t_8 : borrowed (Type.creusat_trail_trail); var _9 : (); - var _10 : borrowed (Type.alloc_vec_vec (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)) (Type.alloc_alloc_global)); - var _11 : Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global); - var _12 : (); - var _13 : borrowed (Type.alloc_vec_vec (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)) (Type.alloc_alloc_global)); - var _14 : Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global); + ghost var old_w_10 : borrowed (Type.creusat_watches_watches); + var _11 : (); + ghost var old_d_12 : borrowed (Type.creusat_decision_decisions); + var _13 : (); + var _14 : (); var _15 : (); - var _16 : (); - var _17 : (); - var _18 : Type.alloc_vec_vec (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)) (Type.alloc_alloc_global); + var _16 : Type.creusat_solver_conflictresult; + var _17 : borrowed (Type.creusat_solver_solver); + var _18 : borrowed (Type.creusat_formula_formula); + var _19 : borrowed (Type.creusat_decision_decisions); + var _20 : borrowed (Type.creusat_trail_trail); + var _21 : borrowed (Type.creusat_watches_watches); + var _22 : isize; + var _23 : (); + var _24 : (); + var _25 : (); { - f_1 <- f; + self_1 <- self; + f_2 <- f; + d_3 <- d; + t_4 <- t; + w_5 <- w; goto BB0 } BB0 { - i_2 <- (0 : usize); - watches_3 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 77 26 77 36] New0.new ()); + _7 <- (); + old_f_6 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 231 20 231 32] f_2); goto BB1 } BB1 { + _9 <- (); + old_t_8 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 232 20 232 32] t_4); goto BB2 } BB2 { + _11 <- (); + old_w_10 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 233 20 233 32] w_5); goto BB3 } BB3 { - invariant i_less { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 78 8 78 47] UInt64.to_int i_2 <= UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_1) }; - invariant maintains_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 79 8 79 81] WatchesInvariantInternal0.watches_invariant_internal (Model0.model watches_3) (UInt64.to_int i_2) f_1 }; - _7 <- i_2; - _8 <- Type.creusat_formula_formula_Formula_num_vars f_1; - _6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 80 14 80 28] _7 < _8); - switch (_6) - | False -> goto BB9 - | _ -> goto BB4 - end + _13 <- (); + old_d_12 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 234 20 234 32] d_3); + goto BB4 } BB4 { - _10 <- borrow_mut watches_3; - watches_3 <- ^ _10; - _11 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 81 25 81 35] New1.new ()); goto BB5 } BB5 { - _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 81 12 81 36] Push0.push _10 _11); + invariant maintains_f { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 235 8 235 48] Invariant0.invariant' ( * f_2) }; + invariant maintains_t { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 236 8 236 50] Invariant1.invariant' ( * t_4) ( * f_2) }; + invariant maintains_w { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 237 8 237 50] Invariant2.invariant' ( * w_5) ( * f_2) }; + invariant maintains_d { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 238 8 238 59] Invariant3.invariant' ( * d_3) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f_2))) }; + invariant equi { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 239 8 239 53] Equisat0.equisat ( * old_f_6) ( * f_2) }; + invariant num_vars { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 240 8 240 62] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f_2)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * old_f_6)) }; + invariant prophf { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 241 8 241 50] ^ f_2 = ^ old_f_6 }; + invariant propht { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 242 8 242 50] ^ t_4 = ^ old_t_8 }; + invariant prophw { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 243 8 243 50] ^ w_5 = ^ old_w_10 }; + invariant prophd { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 244 8 244 50] ^ d_3 = ^ old_d_12 }; + _17 <- borrow_mut ( * self_1); + self_1 <- { self_1 with current = ( ^ _17) }; + _18 <- borrow_mut ( * f_2); + f_2 <- { f_2 with current = ( ^ _18) }; + _19 <- borrow_mut ( * d_3); + d_3 <- { d_3 with current = ( ^ _19) }; + _20 <- borrow_mut ( * t_4); + t_4 <- { t_4 with current = ( ^ _20) }; + _21 <- borrow_mut ( * w_5); + w_5 <- { w_5 with current = ( ^ _21) }; + _16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 246 18 246 49] UnitPropStep0.unit_prop_step _17 _18 _19 _20 _21); goto BB6 } BB6 { - _13 <- borrow_mut watches_3; - watches_3 <- ^ _13; - _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 82 25 82 35] New1.new ()); - goto BB7 + switch (_16) + | Type.CreuSat_Solver_ConflictResult_Ok -> goto BB9 + | Type.CreuSat_Solver_ConflictResult_Err -> goto BB11 + | Type.CreuSat_Solver_ConflictResult_Ground -> goto BB10 + | Type.CreuSat_Solver_ConflictResult_Continue -> goto BB7 + end } BB7 { - _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 82 12 82 36] Push0.push _13 _14); - goto BB8 + _15 <- (); + goto BB5 } BB8 { - i_2 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 83 12 83 18] i_2 + (1 : usize)); - _5 <- (); - goto BB3 + assume { Resolve0.resolve self_1 }; + assume { Resolve1.resolve f_2 }; + assume { Resolve2.resolve d_3 }; + assume { Resolve3.resolve t_4 }; + assume { Resolve4.resolve w_5 }; + absurd } BB9 { - _4 <- (); - assume { Resolve0.resolve _18 }; - _18 <- watches_3; - _0 <- Type.CreuSat_Watches_Watches _18; - goto BB10 + assume { Resolve0.resolve self_1 }; + assume { Resolve1.resolve f_2 }; + assume { Resolve2.resolve d_3 }; + assume { Resolve3.resolve t_4 }; + assume { Resolve4.resolve w_5 }; + _0 <- Type.Core_Option_Option_Some true; + goto BB12 } BB10 { - goto BB11 + assume { Resolve0.resolve self_1 }; + assume { Resolve1.resolve f_2 }; + assume { Resolve2.resolve d_3 }; + assume { Resolve3.resolve t_4 }; + assume { Resolve4.resolve w_5 }; + _0 <- Type.Core_Option_Option_Some false; + goto BB12 } BB11 { + assume { Resolve0.resolve self_1 }; + assume { Resolve1.resolve f_2 }; + assume { Resolve2.resolve d_3 }; + assume { Resolve3.resolve t_4 }; + assume { Resolve4.resolve w_5 }; + _0 <- Type.Core_Option_Option_None; + goto BB12 + } + BB12 { return _0 } end -module CreuSat_Watches_Impl0_InitWatches_Interface +module CreuSat_Trail_Impl0_EnqDecision_Interface + use mach.int.UInt64 + use mach.int.Int + use seq.Seq + use mach.int.Int32 + use prelude.UInt8 + use prelude.Prelude + use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner_Interface as LongArePostUnitInner0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model1 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_Logic_Unset_Interface as Unset0 + clone CreuSat_Logic_LogicAssignments_Impl0_Model_Interface as Model0 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + val enq_decision [@cfg:stackify] (self : borrowed (Type.creusat_trail_trail)) (idx : usize) (_f : Type.creusat_formula_formula) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 268 4 268 31] Invariant0.invariant' _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 269 4 269 43] Invariant1.invariant' ( * self) _f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 270 4 270 36] UInt64.to_int idx < UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars _f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 271 4 271 49] Unset0.unset (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self))) (UInt64.to_int idx))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 275 4 275 78] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self))) _f (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self)))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 269 4 269 43] Invariant1.invariant' ( ^ self) _f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 272 4 273 76] forall j : (int) . 0 <= j /\ j < Seq.length (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self))) /\ j <> UInt64.to_int idx -> Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( * self))) j = Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) j } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 274 4 274 88] UInt8.to_int (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) (UInt64.to_int idx)) = 1 \/ UInt8.to_int (Seq.get (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) (UInt64.to_int idx)) = 0 } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 276 4 276 87] LongArePostUnitInner0.long_are_post_unit_inner (Model1.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) _f (Model0.model (Type.creusat_trail_trail_Trail_assignments ( ^ self))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 277 4 277 65] Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail ( ^ self))) = 1 + Seq.length (Model1.model (Type.creusat_trail_trail_Trail_trail ( * self))) } + +end +module CreuSat_Solver_Impl0_OuterLoop_Interface use mach.int.UInt64 use mach.int.Int use prelude.Prelude use mach.int.Int32 use Type - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant1.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant1 with axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant0 - val init_watches [@cfg:stackify] (self : borrowed (Type.creusat_watches_watches)) (f : Type.creusat_formula_formula) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 132 4 132 42] Invariant0.invariant' ( * self) f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 133 4 133 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 134 4 134 30] Invariant1.invariant' f} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 132 4 132 42] Invariant0.invariant' ( ^ self) f } + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface as NotSatisfiable0 + clone CreuSat_Logic_LogicAssignments_Impl1_Complete_Interface as Complete0 + clone CreuSat_Logic_LogicFormula_Impl2_Sat_Interface as Sat0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant3 + clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant2 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + val outer_loop [@cfg:stackify] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (d : borrowed (Type.creusat_decision_decisions)) (trail : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) : Type.creusat_solver_satresult + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 262 4 262 37] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 263 4 263 46] Invariant1.invariant' ( * trail) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 264 4 264 42] Invariant2.invariant' ( * w) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 265 4 265 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 266 4 266 41] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 267 4 267 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 262 4 262 37] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 263 4 263 46] Invariant1.invariant' ( ^ trail) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 264 4 264 42] Invariant2.invariant' ( ^ w) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 265 4 265 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 268 4 268 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 269 4 269 29] Equisat0.equisat ( * f) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 270 4 276 7] match (result) with + | Type.CreuSat_Solver_SatResult_Sat _ -> Sat0.sat ( ^ f) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) /\ Complete0.complete (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) + | Type.CreuSat_Solver_SatResult_Unsat -> NotSatisfiable0.not_satisfiable ( ^ f) + | Type.CreuSat_Solver_SatResult_Unknown -> true + | Type.CreuSat_Solver_SatResult_Err -> true + end } end -module CreuSat_Watches_Impl0_InitWatches +module CreuSat_Solver_Impl0_OuterLoop use mach.int.UInt64 use mach.int.Int use prelude.Prelude use mach.int.Int32 use Type - use seq.Seq - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic, - function IndexLogic0.index_logic = Invariant3.index_logic - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant2.invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model4.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model4 with function Model2.model = WatchesInvariantInternal0.model, - function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, - function Model0.model = Invariant2.model - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant2 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model1.model = WatchesInvariantInternal0.model, - function Model0.model = InvariantMirror0.model, function Model0.model = Model1.model, axiom . - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant1.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Invariant1.model - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant1.invariant_mirror - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant0.watches_invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, function Model0.model = Invariant0.model, axiom . - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant1 with axiom . - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant0 - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy2 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type Output0.output = IndexMut0.output - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - predicate HasValue0.has_value = IndexMut0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - predicate InBounds0.in_bounds = IndexMut0.in_bounds - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = ToNegWatchidx0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = ToNegWatchidxLogic0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic as ToNegWatchidxLogic0 with function ToNegWatchidxLogic0.to_neg_watchidx_logic = ToNegWatchidx0.to_neg_watchidx_logic - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model7.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model7 with type t = Type.creusat_clause_clause, - function Model0.model = Len1.model, function Model0.model = Index1.model - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model6.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model6 with type t = Type.creusat_formula_formula, - function Model0.model = Index0.model + use prelude.UInt8 + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant7.invariant' + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner2 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = Type.creusat_lit_lit, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model6 with function Model0.model = Model10.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner1 with function Model0.model = Model6.model, + predicate SatInner0.sat_inner = SatInner2.sat_inner + clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner + clone CreuSat_Logic_Logic_Unset as Unset0 + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset + clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, + predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 + clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_clause_clause, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with function Model0.model = Model7.model, + function Model1.model = Model6.model + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner2.sat_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model6.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner2.sat_inner, + predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model6.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model7.model, + predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant7.invariant', + predicate Invariant1.invariant' = Invariant8.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant6.invariant' + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, + predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss1.eventually_sat_complete_no_ass + clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = uint8, type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with function Model0.model = Model7.model, + predicate SatInner0.sat_inner = SatInner1.sat_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model5 with function Model0.model = Model9.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat1 with function Model0.model = Model5.model, + predicate SatInner0.sat_inner = SatInner2.sat_inner + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model7.model, + function Model1.model = Model6.model, predicate Sat0.sat = Sat1.sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = usize, type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model1.model, + predicate Sorted0.sorted = Sorted0.sorted + clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model2.model, + function Model1.model = Model5.model, + predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model7.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic, + predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model2.model, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model2.model, + predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with function Model0.model = Model5.model + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with function Model0.model = Model6.model, + predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Model7.model + clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with function Model0.model = Model0.model, + predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, + predicate SatInner0.sat_inner = SatInner0.sat_inner + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_decision_node, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model8.model, + function Model1.model = Model7.model, function Model2.model = Model6.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model5.model, + function Model1.model = Model2.model, predicate Invariant0.invariant' = Invariant6.invariant', + function Model2.model = Model1.model, function Model3.model = Model7.model, + predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, + predicate Sat0.sat = Sat1.sat, predicate Sorted0.sorted = Sorted0.sorted, + predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, + predicate Invariant0.invariant' = Invariant5.invariant', function Model0.model = Model2.model, + predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model1.model, + predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, + predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, + predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model5.model, + predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, + predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, + predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, + predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant4.invariant', + function Model0.model = Model6.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with function Model0.model = Model7.model, + predicate Invariant0.invariant' = Invariant4.invariant', function Model1.model = Model6.model + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable as NotSatisfiable0 with function Model0.model = Model6.model, + predicate EquisatExtension0.equisat_extension = EquisatExtension0.equisat_extension + clone CreuSat_Logic_LogicAssignments_Impl1_Complete as Complete0 with function Model0.model = Model5.model, + predicate Unset0.unset = Unset0.unset + clone CreuSat_Logic_LogicFormula_Impl2_Sat as Sat0 with function Model0.model = Model0.model, + function Model1.model = Model5.model, + predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner + clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant3 with function Model0.model = Model4.model + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant2 with function Model0.model = Model3.model, + predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant1 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, + function Model0.model = Model1.model, function Model1.model = Model2.model, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + function Model0.model = Model0.model, + predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . + use mach.int.Int64 + clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy0 + clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_assignments_assignments, + type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model5.model + clone Alloc_Vec_Impl0_New_Interface as New0 with type t = uint8, function Model0.model = Model9.model + clone CreuSat_Formula_Impl2_IsSat_Interface as IsSat0 with predicate Invariant0.invariant' = Invariant0.invariant', + predicate Invariant1.invariant' = Invariant5.invariant', predicate Sat0.sat = Sat0.sat, + predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror + clone CreuSat_Trail_Impl0_EnqDecision_Interface as EnqDecision0 with predicate Invariant0.invariant' = Invariant0.invariant', + predicate Invariant1.invariant' = Invariant1.invariant', function Model0.model = Model5.model, + predicate Unset0.unset = Unset0.unset, function Model1.model = Model2.model, + predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, + predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve4 with type t = Type.creusat_trail_trail + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve3 with type t = Type.creusat_formula_formula + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_decision_decisions + clone CreuSat_Decision_Impl1_GetNext_Interface as GetNext0 with predicate Invariant0.invariant' = Invariant3.invariant', + predicate Invariant1.invariant' = Invariant5.invariant', function Model0.model = Model11.model, + predicate Unset0.unset = Unset0.unset, predicate Complete0.complete = Complete0.complete + clone CreuSat_Trail_Impl0_BacktrackTo_Interface as BacktrackTo0 with function Model0.model = Model1.model, + predicate Invariant0.invariant' = Invariant0.invariant', predicate Invariant1.invariant' = Invariant1.invariant', + predicate Invariant2.invariant' = Invariant3.invariant', function Model1.model = Model2.model, + function Model2.model = Model5.model, + predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, + predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_watches_watches - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone Alloc_Vec_Impl1_Push_Interface as Push0 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type i = usize, type a = Type.alloc_alloc_global - clone CreuSat_Lit_Impl1_ToNegWatchidx_Interface as ToNegWatchidx0 - clone CreuSat_Clause_Impl0_Index_Interface as Index1 - clone CreuSat_Clause_Impl3_Len_Interface as Len1 - clone CreuSat_Formula_Impl0_Index_Interface as Index0 - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global - let rec cfg init_watches [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 135 4 135 47] (self : borrowed (Type.creusat_watches_watches)) (f : Type.creusat_formula_formula) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 132 4 132 42] Invariant0.invariant' ( * self) f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 133 4 133 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 134 4 134 30] Invariant1.invariant' f} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 132 4 132 42] Invariant0.invariant' ( ^ self) f } + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_solver_solver + clone CreuSat_Formula_Impl2_ReduceDb_Interface as ReduceDb0 with predicate Invariant0.invariant' = Invariant0.invariant', + predicate Invariant1.invariant' = Invariant2.invariant', predicate Invariant2.invariant' = Invariant1.invariant', + predicate Equisat0.equisat = Equisat0.equisat, + predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror + clone CreuSat_Trail_Impl0_DecisionLevel_Interface as DecisionLevel0 with function Model0.model = Model1.model + clone CreuSat_Solver_Impl0_UnitPropLoop_Interface as UnitPropLoop0 with predicate Invariant0.invariant' = Invariant0.invariant', + predicate Invariant1.invariant' = Invariant1.invariant', predicate Invariant2.invariant' = Invariant2.invariant', + predicate Invariant3.invariant' = Invariant3.invariant', + predicate NotSatisfiable0.not_satisfiable = NotSatisfiable0.not_satisfiable, + predicate Equisat0.equisat = Equisat0.equisat, + predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror + let rec cfg outer_loop [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 277 4 277 113] (self : borrowed (Type.creusat_solver_solver)) (f : borrowed (Type.creusat_formula_formula)) (d : borrowed (Type.creusat_decision_decisions)) (trail : borrowed (Type.creusat_trail_trail)) (w : borrowed (Type.creusat_watches_watches)) : Type.creusat_solver_satresult + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 262 4 262 37] Invariant0.invariant' ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 263 4 263 46] Invariant1.invariant' ( * trail) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 264 4 264 42] Invariant2.invariant' ( * w) ( * f)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 265 4 265 48] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 266 4 266 41] Invariant3.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 267 4 267 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) < div 18446744073709551615 2} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 262 4 262 37] Invariant0.invariant' ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 263 4 263 46] Invariant1.invariant' ( ^ trail) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 264 4 264 42] Invariant2.invariant' ( ^ w) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 265 4 265 48] Invariant3.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f))) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 268 4 268 45] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * f)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( ^ f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 269 4 269 29] Equisat0.equisat ( * f) ( ^ f) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 270 4 276 7] match (result) with + | Type.CreuSat_Solver_SatResult_Sat _ -> Sat0.sat ( ^ f) (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) /\ Complete0.complete (Type.creusat_trail_trail_Trail_assignments ( ^ trail)) + | Type.CreuSat_Solver_SatResult_Unsat -> NotSatisfiable0.not_satisfiable ( ^ f) + | Type.CreuSat_Solver_SatResult_Unknown -> true + | Type.CreuSat_Solver_SatResult_Err -> true + end } - = - var _0 : (); - var self_1 : borrowed (Type.creusat_watches_watches); - var f_2 : Type.creusat_formula_formula; - ghost var old_w_3 : borrowed (Type.creusat_watches_watches); - var _4 : (); - var i_5 : usize; + = [@vc:do_not_keep_trace] [@vc:sp] + var _0 : Type.creusat_solver_satresult; + var self_1 : borrowed (Type.creusat_solver_solver); + var f_2 : borrowed (Type.creusat_formula_formula); + var d_3 : borrowed (Type.creusat_decision_decisions); + var trail_4 : borrowed (Type.creusat_trail_trail); + var w_5 : borrowed (Type.creusat_watches_watches); var _6 : (); - var _7 : bool; - var _8 : usize; - var _9 : usize; - var _10 : Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global); - var clause_11 : Type.creusat_clause_clause; - var _12 : Type.creusat_clause_clause; - var _13 : Type.creusat_formula_formula; - var _14 : usize; + var _7 : Type.core_option_option bool; + var _8 : borrowed (Type.creusat_solver_solver); + var _9 : borrowed (Type.creusat_formula_formula); + var _10 : borrowed (Type.creusat_decision_decisions); + var _11 : borrowed (Type.creusat_trail_trail); + var _12 : borrowed (Type.creusat_watches_watches); + var _13 : isize; + var _14 : (); var _15 : (); - var _16 : bool; - var _17 : usize; - var _18 : Type.creusat_clause_clause; - var _19 : (); - var _20 : borrowed (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)); - var _21 : borrowed (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)); - var _22 : borrowed (Type.alloc_vec_vec (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)) (Type.alloc_alloc_global)); - var _23 : usize; - var _24 : Type.creusat_lit_lit; - var _25 : Type.creusat_lit_lit; - var _26 : Type.creusat_clause_clause; - var _27 : Type.creusat_watches_watcher; - var _28 : usize; - var _29 : Type.creusat_lit_lit; - var _30 : Type.creusat_lit_lit; - var _31 : Type.creusat_clause_clause; - var _32 : (); - var _33 : borrowed (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)); - var _34 : borrowed (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)); - var _35 : borrowed (Type.alloc_vec_vec (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)) (Type.alloc_alloc_global)); + var slow_16 : usize; + var _17 : bool; + var _18 : usize; + var _19 : usize; + var _20 : bool; + var _21 : usize; + var _22 : usize; + var _23 : bool; + var _24 : (); + var _25 : bool; + var _26 : bool; + var _27 : usize; + var _28 : Type.creusat_trail_trail; + var _29 : bool; + var _30 : usize; + var _31 : usize; + var _32 : usize; + var _33 : (); + var _34 : bool; + var _35 : usize; var _36 : usize; - var _37 : Type.creusat_lit_lit; - var _38 : Type.creusat_lit_lit; - var _39 : Type.creusat_clause_clause; - var _40 : Type.creusat_watches_watcher; - var _41 : usize; - var _42 : Type.creusat_lit_lit; - var _43 : Type.creusat_lit_lit; - var _44 : Type.creusat_clause_clause; - var _45 : (); + var _37 : (); + var _38 : borrowed (Type.creusat_formula_formula); + var _39 : borrowed (Type.creusat_watches_watches); + var _40 : Type.creusat_trail_trail; + var _41 : borrowed (Type.creusat_solver_solver); + var _42 : (); + var _43 : borrowed (Type.creusat_trail_trail); + var _44 : Type.creusat_formula_formula; + var _45 : borrowed (Type.creusat_decision_decisions); var _46 : (); - var _47 : (); + var _47 : Type.core_option_option usize; + var _48 : borrowed (Type.creusat_decision_decisions); + var _49 : Type.creusat_assignments_assignments; + var _50 : Type.creusat_assignments_assignments; + var _51 : Type.creusat_formula_formula; + var _52 : isize; + var next_53 : usize; + var _54 : (); + var _55 : borrowed (Type.creusat_trail_trail); + var _56 : usize; + var _57 : Type.creusat_formula_formula; + var _58 : bool; + var _59 : Type.creusat_formula_formula; + var _60 : Type.creusat_assignments_assignments; + var _61 : Type.creusat_assignments_assignments; + var _62 : (); + var _63 : Type.alloc_vec_vec uint8 (Type.alloc_alloc_global); + var _64 : (); { self_1 <- self; f_2 <- f; + d_3 <- d; + trail_4 <- trail; + w_5 <- w; goto BB0 } BB0 { - _4 <- (); - old_w_3 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 136 20 136 35] self_1); + _8 <- borrow_mut ( * self_1); + self_1 <- { self_1 with current = ( ^ _8) }; + _9 <- borrow_mut ( * f_2); + f_2 <- { f_2 with current = ( ^ _9) }; + _10 <- borrow_mut ( * d_3); + d_3 <- { d_3 with current = ( ^ _10) }; + _11 <- borrow_mut ( * trail_4); + trail_4 <- { trail_4 with current = ( ^ _11) }; + _12 <- borrow_mut ( * w_5); + w_5 <- { w_5 with current = ( ^ _12) }; + _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 278 14 278 49] UnitPropLoop0.unit_prop_loop _8 _9 _10 _11 _12); goto BB1 } BB1 { - i_5 <- (0 : usize); - goto BB2 + switch (_7) + | Type.Core_Option_Option_None -> goto BB5 + | Type.Core_Option_Option_Some _ -> goto BB2 + end } BB2 { - invariant watch_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 138 8 138 51] Invariant0.invariant' ( * self_1) f_2 }; - invariant same_len { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 139 8 139 72] Seq.length (Model0.model (Type.creusat_watches_watches_Watches_watches ( * self_1))) = 2 * UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_2) }; - invariant proph { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 140 8 140 52] ^ self_1 = ^ old_w_3 }; - _8 <- i_5; - _10 <- Type.creusat_formula_formula_Formula_clauses f_2; - _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 141 18 141 33] Len0.len _10); - goto BB3 + switch (Type.core_option_option_Some_0 _7) + | False -> goto BB4 + | _ -> goto BB3 + end } BB3 { - _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 141 14 141 33] _8 < _9); - switch (_7) - | False -> goto BB20 - | _ -> goto BB4 - end + _6 <- (); + _18 <- Type.creusat_solver_solver_Solver_slow ( * self_1); + _20 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 283 34 283 48] (2 : usize) = (0 : usize)); + assert { not _20 }; + goto BB6 } BB4 { - _13 <- f_2; - _14 <- i_5; - _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 142 26 142 30] Index0.index _13 _14); - goto BB5 + assume { Resolve0.resolve self_1 }; + assume { Resolve3.resolve f_2 }; + assume { Resolve2.resolve d_3 }; + assume { Resolve4.resolve trail_4 }; + assume { Resolve1.resolve w_5 }; + _0 <- Type.CreuSat_Solver_SatResult_Unsat; + goto BB34 } BB5 { - clause_11 <- _12; - _18 <- clause_11; - _17 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 143 15 143 27] Len1.len _18); - goto BB6 + assume { Resolve0.resolve self_1 }; + assume { Resolve3.resolve f_2 }; + assume { Resolve2.resolve d_3 }; + assume { Resolve4.resolve trail_4 }; + assume { Resolve1.resolve w_5 }; + _0 <- Type.CreuSat_Solver_SatResult_Err; + goto BB34 } BB6 { - _16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 143 15 143 31] _17 > (1 : usize)); - switch (_16) - | False -> goto BB18 + _19 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 283 34 283 48] (18446744073709551615 : usize) / (2 : usize)); + _17 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 283 22 283 48] _18 < _19); + switch (_17) + | False -> goto BB9 | _ -> goto BB7 end } BB7 { - _22 <- borrow_mut (Type.creusat_watches_watches_Watches_watches ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Watches_Watches a = * self_1 in Type.CreuSat_Watches_Watches ( ^ _22)) }; - _26 <- clause_11; - _25 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 146 29 146 38] Index1.index _26 (0 : usize)); + _22 <- Type.creusat_solver_solver_Solver_slow ( * self_1); + _23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 283 51 283 68] (100 : usize) = (0 : usize)); + assert { not _23 }; goto BB8 } BB8 { - _24 <- _25; - _23 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 146 29 146 56] ToNegWatchidx0.to_neg_watchidx _24); - goto BB9 + _21 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 283 51 283 68] _22 / (100 : usize)); + slow_16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 283 51 283 74] _21 * (125 : usize)); + goto BB10 } BB9 { - _21 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 146 16 146 57] IndexMut0.index_mut _22 _23); + slow_16 <- Type.creusat_solver_solver_Solver_slow ( * self_1); goto BB10 } BB10 { - _20 <- borrow_mut ( * _21); - _21 <- { _21 with current = ( ^ _20) }; - _28 <- i_5; - _31 <- clause_11; - _30 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 146 91 146 100] Index1.index _31 (1 : usize)); - goto BB11 + _28 <- * trail_4; + _27 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 284 11 284 33] DecisionLevel0.decision_level _28); + goto BB14 } BB11 { - _29 <- _30; - _27 <- Type.CreuSat_Watches_Watcher _28 _29; - _19 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 146 16 146 103] Push0.push _20 _27); - goto BB12 + _25 <- false; + goto BB13 } BB12 { - assume { Resolve0.resolve _21 }; - _35 <- borrow_mut (Type.creusat_watches_watches_Watches_watches ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Watches_Watches a = * self_1 in Type.CreuSat_Watches_Watches ( ^ _35)) }; - _39 <- clause_11; - _38 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 147 29 147 38] Index1.index _39 (1 : usize)); + _30 <- Type.creusat_solver_solver_Solver_fast ( * self_1); + _31 <- slow_16; + _29 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 284 41 284 57] _30 > _31); + _25 <- _29; goto BB13 } BB13 { - _37 <- _38; - _36 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 147 29 147 56] ToNegWatchidx0.to_neg_watchidx _37); - goto BB14 + switch (_25) + | False -> goto BB21 + | _ -> goto BB15 + end } BB14 { - _34 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 147 16 147 57] IndexMut0.index_mut _35 _36); - goto BB15 + _26 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 284 11 284 37] _27 > (0 : usize)); + switch (_26) + | False -> goto BB11 + | _ -> goto BB12 + end } BB15 { - _33 <- borrow_mut ( * _34); - _34 <- { _34 with current = ( ^ _33) }; - _41 <- i_5; - _44 <- clause_11; - _43 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 147 91 147 100] Index1.index _44 (0 : usize)); - goto BB16 + _32 <- slow_16; + self_1 <- { self_1 with current = (let Type.CreuSat_Solver_Solver a b c d e f g h = * self_1 in Type.CreuSat_Solver_Solver a b c d e _32 g h) }; + _35 <- Type.creusat_solver_solver_Solver_num_lemmas ( * self_1); + _36 <- Type.creusat_solver_solver_Solver_max_lemmas ( * self_1); + _34 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 286 15 286 48] _35 > _36); + switch (_34) + | False -> goto BB18 + | _ -> goto BB16 + end } BB16 { - _42 <- _43; - _40 <- Type.CreuSat_Watches_Watcher _41 _42; - _32 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 147 16 147 103] Push0.push _33 _40); + _38 <- borrow_mut ( * f_2); + f_2 <- { f_2 with current = ( ^ _38) }; + _39 <- borrow_mut ( * w_5); + w_5 <- { w_5 with current = ( ^ _39) }; + _40 <- * trail_4; + _41 <- borrow_mut ( * self_1); + self_1 <- { self_1 with current = ( ^ _41) }; + _37 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 287 16 287 42] ReduceDb0.reduceDB _38 _39 _40 _41); goto BB17 } BB17 { - assume { Resolve0.resolve _34 }; - _15 <- (); + assume { Resolve0.resolve self_1 }; + assume { Resolve1.resolve w_5 }; + _33 <- (); goto BB19 } BB18 { - _15 <- (); + assume { Resolve0.resolve self_1 }; + assume { Resolve1.resolve w_5 }; + _33 <- (); goto BB19 } BB19 { - i_5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 149 12 149 18] i_5 + (1 : usize)); - _6 <- (); - goto BB2 + _43 <- borrow_mut ( * trail_4); + trail_4 <- { trail_4 with current = ( ^ _43) }; + _44 <- * f_2; + _45 <- borrow_mut ( * d_3); + d_3 <- { d_3 with current = ( ^ _45) }; + _42 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 289 12 289 39] BacktrackTo0.backtrack_to _43 (0 : usize) _44 _45); + goto BB20 } BB20 { - assume { Resolve1.resolve self_1 }; - _0 <- (); + _24 <- (); + goto BB22 + } + BB21 { + assume { Resolve0.resolve self_1 }; + assume { Resolve1.resolve w_5 }; + _24 <- (); + goto BB22 + } + BB22 { + _48 <- borrow_mut ( * d_3); + d_3 <- { d_3 with current = ( ^ _48) }; + _50 <- Type.creusat_trail_trail_Trail_assignments ( * trail_4); + _49 <- _50; + _51 <- * f_2; + _47 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 292 14 292 47] GetNext0.get_next _48 _49 _51); + goto BB23 + } + BB23 { + assume { Resolve2.resolve d_3 }; + switch (_47) + | Type.Core_Option_Option_None -> goto BB24 + | Type.Core_Option_Option_Some _ -> goto BB26 + end + } + BB24 { + _59 <- * f_2; + assume { Resolve3.resolve f_2 }; + _61 <- Type.creusat_trail_trail_Trail_assignments ( * trail_4); + assume { Resolve4.resolve trail_4 }; + _60 <- _61; + _58 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 301 19 301 47] IsSat0.is_sat _59 _60); + goto BB28 + } + BB25 { + assume { Resolve3.resolve f_2 }; + assume { Resolve4.resolve trail_4 }; + absurd + } + BB26 { + next_53 <- Type.core_option_option_Some_0 _47; + _55 <- borrow_mut ( * trail_4); + trail_4 <- { trail_4 with current = ( ^ _55) }; + _56 <- next_53; + _57 <- * f_2; + assume { Resolve3.resolve f_2 }; + _54 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 294 16 294 43] EnqDecision0.enq_decision _55 _56 _57); + goto BB27 + } + BB27 { + assume { Resolve4.resolve trail_4 }; + _46 <- (); + _0 <- Type.CreuSat_Solver_SatResult_Unknown; + goto BB35 + } + BB28 { + switch (_58) + | False -> goto BB32 + | _ -> goto BB29 + end + } + BB29 { + _63 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 302 42 302 52] New0.new ()); + goto BB30 + } + BB30 { + _0 <- Type.CreuSat_Solver_SatResult_Sat _63; + goto BB31 + } + BB31 { + goto BB33 + } + BB32 { + _0 <- Type.CreuSat_Solver_SatResult_Err; + goto BB33 + } + BB33 { + goto BB35 + } + BB34 { + goto BB35 + } + BB35 { return _0 } end -module CreuSat_Trail_Impl0_LearnUnits_Interface +module CreuSat_Solver_Impl0_Inner_Interface use mach.int.UInt64 - use Type + use mach.int.Int use prelude.Prelude - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant2.invariant_mirror + use mach.int.Int32 + use Type + use prelude.UInt8 + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface as NotSatisfiable0 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant2 with axiom . + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss_Interface as EventuallySatCompleteNoAss0 + clone CreuSat_Logic_LogicFormula_Impl2_Equisat_Interface as Equisat0 + clone CreuSat_Logic_LogicFormula_Impl2_SatInner_Interface as SatInner0 + clone CreusotContracts_Std1_Vec_Impl0_Model_Interface as Model0 with type t = uint8, type a = Type.alloc_alloc_global, + axiom . + clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant3 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant2 clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant1 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant0 - val learn_units [@cfg:stackify] (self : borrowed (Type.creusat_trail_trail)) (f : Type.creusat_formula_formula) (d : borrowed (Type.creusat_decision_decisions)) : Type.core_option_option bool - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 329 4 329 42] Invariant0.invariant' ( * self) f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 330 4 330 48] Invariant1.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 331 4 331 30] Invariant2.invariant' f} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 329 4 329 42] Invariant0.invariant' ( ^ self) f } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 330 4 330 48] Invariant1.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 332 4 335 7] match (result) with - | Type.Core_Option_Option_Some (True) -> NotSatisfiable0.not_satisfiable f + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + val inner [@cfg:stackify] (self : borrowed (Type.creusat_solver_solver)) (formula : borrowed (Type.creusat_formula_formula)) (decisions : Type.creusat_decision_decisions) (trail : Type.creusat_trail_trail) (watches : Type.creusat_watches_watches) : Type.creusat_solver_satresult + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 313 4 313 50] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 314 4 314 36] Invariant0.invariant' ( * formula)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 315 4 315 55] Invariant1.invariant' decisions (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 316 4 316 42] Invariant2.invariant' trail ( * formula)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 317 4 317 44] Invariant3.invariant' watches ( * formula)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 318 4 318 55] Invariant1.invariant' decisions (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula)))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 319 4 323 7] match (result) with + | Type.CreuSat_Solver_SatResult_Sat v -> SatInner0.sat_inner ( ^ formula) (Model0.model v) /\ Equisat0.equisat ( * formula) ( ^ formula) /\ EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass ( * formula) + | Type.CreuSat_Solver_SatResult_Unsat -> NotSatisfiable0.not_satisfiable ( ^ formula) /\ Equisat0.equisat ( * formula) ( ^ formula) | _ -> true end } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 324 4 324 41] Equisat0.equisat ( * formula) ( ^ formula) } end -module CreuSat_Trail_Impl0_LearnUnits +module CreuSat_Solver_Impl0_Inner use mach.int.UInt64 - use Type - use prelude.Prelude use mach.int.Int + use prelude.Prelude + use mach.int.Int32 + use Type use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = LongArePostUnitInner0.index_logic, - function IndexLogic0.index_logic = LitIdxIn0.index_logic, - function IndexLogic0.index_logic = LitIsUniqueInner0.index_logic, - function IndexLogic0.index_logic = ClausePostWithRegardsToInner0.index_logic, - function IndexLogic0.index_logic = Invariant6.index_logic, function IndexLogic0.index_logic = SatInner0.index_logic, - function IndexLogic0.index_logic = UnsatInner0.index_logic, - function IndexLogic0.index_logic = NoDuplicateIndexesInner0.index_logic - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner0.is_positive_logic, - function IsPositiveLogic0.is_positive_logic = UnsatInner0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner0 with predicate SatInner0.sat_inner = Sat0.sat_inner, - predicate SatInner0.sat_inner = ClausePostWithRegardsToInner0.sat_inner, - predicate SatInner0.sat_inner = TrailEntriesAreAssignedInner0.sat_inner, - predicate SatInner0.sat_inner = SatInner1.sat_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model4.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model4 with function Model0.model = NotSatisfiable0.model, - function Model1.model = InvariantMirror0.model, function Model0.model = FormulaInvariant0.model, - function Model1.model = UnitAreSat0.model, function Model0.model = LitIdxIn0.model, - function Model0.model = Invariant5.model, function Model0.model = ClausePostWithRegardsToInner0.model, - function Model1.model = Invariant7.model, function Model0.model = SatInner1.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner1 with predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss0.formula_sat_inner - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant4.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant5.invariant_internal - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner2 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = Type.creusat_lit_lit, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model7 with function Model0.model = Model10.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner1 with function Model0.model = Model7.model, + predicate SatInner0.sat_inner = SatInner2.sat_inner + clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant7.invariant' + clone CreuSat_Logic_Logic_Unset as Unset0 + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset + clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, + predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 clone CreusotContracts_Std1_Vec_Impl0_Model as Model6 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model3.model = InvariantNoDecisionMirror0.model, - function Model0.model = InvariantMirror0.model, function Model0.model = Model3.model, - function Model0.model = LongArePostUnitInner0.model, function Model0.model = UnitAreSat0.model, - function Model0.model = LitNotInLessInner0.model, function Model0.model = Invariant7.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant7 with predicate Invariant1.invariant' = Invariant4.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = uint8, type a = Type.alloc_alloc_global, - function Model0.model = Model5.model, axiom . - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant4 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtension0.equisat_extension_inner - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model5 with function Model2.model = InvariantNoDecision0.model, - function Model0.model = InvariantNoDecisionMirror0.model, function Model0.model = Invariant3.model, - function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant0.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant0.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant3 with predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model3 with function Model0.model = Invariant2.model, - function Model0.model = EquisatExtension0.model - clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with predicate EquisatExtension0.equisat_extension = NotSatisfiable0.equisat_extension - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant2.formula_invariant - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = Invariant2.invariant_mirror + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with function Model0.model = Model6.model, + function Model1.model = Model7.model + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner2.sat_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model7.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner2.sat_inner, + predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model7.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model6.model, + predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant7.invariant', + predicate Invariant1.invariant' = Invariant8.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant6.invariant' + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, + predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss1.eventually_sat_complete_no_ass + clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_watches_watcher, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range + clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = uint8, type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model8 with function Model0.model = Model0.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model8.model, + predicate SatInner0.sat_inner = SatInner2.sat_inner + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model6.model, + function Model1.model = Model7.model, predicate Sat0.sat = Sat0.sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model3 with type t = usize, type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model3.model, + predicate Sorted0.sorted = Sorted0.sorted + clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_trail_step, + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model4.model, + function Model1.model = Model8.model, + predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model6.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic, + predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model4.model, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model4.model, + predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant5 with function Model0.model = Model8.model + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant4 with function Model0.model = Model7.model, + predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Model6.model + clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with function Model0.model = Model1.model, + predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model9.model, + function Model1.model = Model6.model, function Model2.model = Model7.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreusotContracts_Std1_Vec_Impl0_Model as Model5 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model8.model, + function Model1.model = Model4.model, predicate Invariant0.invariant' = Invariant6.invariant', + function Model2.model = Model3.model, function Model3.model = Model6.model, + predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, + predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, + predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, + predicate Invariant0.invariant' = Invariant5.invariant', function Model0.model = Model4.model, + predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model3.model, + predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, + predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, + predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model8.model, + predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, + predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, + predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, + predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, function Model0.model = Invariant1.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant0.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant0.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable as NotSatisfiable0 - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant2 with axiom . - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant1 - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant0 - clone CreuSat_Logic_LogicClause_Impl2_UnsatInner as UnsatInner1 with predicate UnsatInner0.unsat_inner = Unsat1.unsat_inner - clone CreuSat_Logic_LogicLit_Impl1_UnsetInner as UnsetInner0 with predicate UnsetInner0.unset_inner = Unset1.unset_inner - clone CreuSat_Logic_LogicClause_Impl2_Unsat as Unsat1 with predicate Unsat0.unsat = ResolveEmptyClause0.unsat - clone CreuSat_Logic_LogicLit_Impl1_Unsat as Unsat0 with predicate Unsat0.unsat = LitUnsat0.unsat - clone CreuSat_Logic_LogicAssignments_Impl0_ModelTy as ModelTy2 with type ModelTy0.modelTy = Model11.modelTy - clone CreuSat_Logic_LogicLit_Impl1_Unset as Unset1 with predicate Unset0.unset = LitSet0.unset - clone CreusotContracts_Logic_Model_Impl0_Model as Model11 with type t = Type.creusat_assignments_assignments, - function Model0.model = LitSet0.model, function Model0.model = LitUnsat0.model - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy1 with type ModelTy0.modelTy = Model10.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model10 with type t = Type.creusat_clause_clause, - function Model0.model = Len1.model, function Model0.model = Index1.model - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model9.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model as Model9 with type t = Type.creusat_formula_formula, - function Model0.model = Index0.model - clone CreuSat_Trail_Impl0_LearnUnit_Interface as LearnUnit0 - clone CreuSat_ConflictAnalysis_ResolveEmptyClause_Interface as ResolveEmptyClause0 + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant4.invariant', + function Model0.model = Model7.model + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with function Model0.model = Model6.model, + predicate Invariant0.invariant' = Invariant4.invariant', function Model1.model = Model7.model + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable as NotSatisfiable0 with function Model0.model = Model7.model, + predicate EquisatExtension0.equisat_extension = EquisatExtension0.equisat_extension + clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner0 with function Model0.model = Model6.model, + predicate SatInner0.sat_inner = SatInner1.sat_inner + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, + predicate SatInner0.sat_inner = SatInner0.sat_inner + clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant3 with function Model0.model = Model5.model, + predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, + function Model0.model = Model3.model, function Model1.model = Model4.model, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant1 with function Model0.model = Model2.model + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + function Model0.model = Model1.model, + predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . + use mach.int.Int64 + clone CreusotContracts_Logic_Resolve_Impl2_Resolve as Resolve6 with type t = uint8 + clone CreuSat_Logic_LogicAssignments_Impl1_Complete as Complete0 with function Model0.model = Model8.model, + predicate Unset0.unset = Unset0.unset + clone CreuSat_Logic_LogicFormula_Impl2_Sat as Sat1 with function Model0.model = Model1.model, + function Model1.model = Model8.model, + predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner + clone CreusotContracts_Std1_Vec_Impl1_Resolve as Resolve5 with type t = uint8, function Model0.model = Model0.model, + predicate Resolve0.resolve = Resolve6.resolve + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve4 with type t = Type.creusat_formula_formula + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve3 with type t = Type.creusat_solver_solver + clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = Type.creusat_watches_watches clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_trail_trail clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_decision_decisions - clone CreuSat_Lit_Impl1_LitUnsat_Interface as LitUnsat0 - clone CreuSat_Lit_Impl1_LitSet_Interface as LitSet0 - clone CreuSat_Clause_Impl0_Index_Interface as Index1 - clone CreuSat_Clause_Impl3_Len_Interface as Len1 - clone CreuSat_Formula_Impl0_Index_Interface as Index0 - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_clause_clause, type a = Type.alloc_alloc_global - let rec cfg learn_units [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 336 4 336 81] (self : borrowed (Type.creusat_trail_trail)) (f : Type.creusat_formula_formula) (d : borrowed (Type.creusat_decision_decisions)) : Type.core_option_option bool - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 329 4 329 42] Invariant0.invariant' ( * self) f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 330 4 330 48] Invariant1.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 331 4 331 30] Invariant2.invariant' f} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 329 4 329 42] Invariant0.invariant' ( ^ self) f } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 330 4 330 48] Invariant1.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 332 4 335 7] match (result) with - | Type.Core_Option_Option_Some (True) -> NotSatisfiable0.not_satisfiable f + clone CreuSat_Solver_Impl0_OuterLoop_Interface as OuterLoop0 with predicate Invariant0.invariant' = Invariant0.invariant', + predicate Invariant1.invariant' = Invariant2.invariant', predicate Invariant2.invariant' = Invariant3.invariant', + predicate Invariant3.invariant' = Invariant1.invariant', predicate Equisat0.equisat = Equisat0.equisat, + predicate Sat0.sat = Sat1.sat, predicate Complete0.complete = Complete0.complete, + predicate NotSatisfiable0.not_satisfiable = NotSatisfiable0.not_satisfiable, + predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror + let rec cfg inner [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 325 4 327 18] (self : borrowed (Type.creusat_solver_solver)) (formula : borrowed (Type.creusat_formula_formula)) (decisions : Type.creusat_decision_decisions) (trail : Type.creusat_trail_trail) (watches : Type.creusat_watches_watches) : Type.creusat_solver_satresult + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 313 4 313 50] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula)) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 314 4 314 36] Invariant0.invariant' ( * formula)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 315 4 315 55] Invariant1.invariant' decisions (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula)))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 316 4 316 42] Invariant2.invariant' trail ( * formula)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 317 4 317 44] Invariant3.invariant' watches ( * formula)} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 318 4 318 55] Invariant1.invariant' decisions (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula)))} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 319 4 323 7] match (result) with + | Type.CreuSat_Solver_SatResult_Sat v -> SatInner0.sat_inner ( ^ formula) (Model0.model v) /\ Equisat0.equisat ( * formula) ( ^ formula) /\ EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass ( * formula) + | Type.CreuSat_Solver_SatResult_Unsat -> NotSatisfiable0.not_satisfiable ( ^ formula) /\ Equisat0.equisat ( * formula) ( ^ formula) | _ -> true end } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 324 4 324 41] Equisat0.equisat ( * formula) ( ^ formula) } - = - var _0 : Type.core_option_option bool; - var self_1 : borrowed (Type.creusat_trail_trail); - var f_2 : Type.creusat_formula_formula; - var d_3 : borrowed (Type.creusat_decision_decisions); - var _4 : (); - var i_5 : usize; - ghost var old_d_6 : borrowed (Type.creusat_decision_decisions); + = [@vc:do_not_keep_trace] [@vc:sp] + var _0 : Type.creusat_solver_satresult; + var self_1 : borrowed (Type.creusat_solver_solver); + var formula_2 : borrowed (Type.creusat_formula_formula); + var decisions_3 : Type.creusat_decision_decisions; + var trail_4 : Type.creusat_trail_trail; + var watches_5 : Type.creusat_watches_watches; + ghost var old_f_6 : borrowed (Type.creusat_formula_formula); var _7 : (); - ghost var old_self_8 : borrowed (Type.creusat_trail_trail); + var _8 : (); var _9 : (); - var _10 : (); - var _11 : (); - var _12 : bool; - var _13 : usize; - var _14 : usize; - var _15 : Type.alloc_vec_vec (Type.creusat_clause_clause) (Type.alloc_alloc_global); - var clause_16 : Type.creusat_clause_clause; - var _17 : Type.creusat_clause_clause; - var _18 : Type.creusat_formula_formula; - var _19 : usize; - var _20 : (); - var _21 : bool; - var _22 : usize; - var _23 : Type.creusat_clause_clause; - var lit_24 : Type.creusat_lit_lit; - var _25 : Type.creusat_lit_lit; - var _26 : Type.creusat_clause_clause; - var _27 : bool; - var _28 : Type.creusat_lit_lit; - var _29 : Type.creusat_assignments_assignments; - var _30 : Type.creusat_assignments_assignments; - var _31 : bool; - var _32 : Type.creusat_lit_lit; - var _33 : Type.creusat_assignments_assignments; - var _34 : Type.creusat_assignments_assignments; - var _35 : (); - var _36 : bool; - var _37 : Type.creusat_formula_formula; - var _38 : Type.creusat_trail_trail; - var _39 : usize; - var _40 : Type.core_result_result () (); - var _41 : borrowed (Type.creusat_trail_trail); - var _42 : usize; - var _43 : Type.creusat_formula_formula; - var _44 : borrowed (Type.creusat_decision_decisions); - var _45 : (); - var _46 : (); - var _47 : (); + var _10 : Type.creusat_solver_satresult; + var _11 : borrowed (Type.creusat_solver_solver); + var _12 : borrowed (Type.creusat_formula_formula); + var _13 : borrowed (Type.creusat_decision_decisions); + var _14 : borrowed (Type.creusat_decision_decisions); + var _15 : borrowed (Type.creusat_trail_trail); + var _16 : borrowed (Type.creusat_trail_trail); + var _17 : borrowed (Type.creusat_watches_watches); + var _18 : borrowed (Type.creusat_watches_watches); + var _19 : isize; + var _20 : (); + var _21 : Type.alloc_vec_vec uint8 (Type.alloc_alloc_global); + var o_22 : Type.creusat_solver_satresult; + var _23 : (); { self_1 <- self; - f_2 <- f; - d_3 <- d; + formula_2 <- formula; + decisions_3 <- decisions; + trail_4 <- trail; + watches_5 <- watches; goto BB0 } BB0 { - i_5 <- (0 : usize); - _7 <- (); - old_d_6 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 338 20 338 32] d_3); goto BB1 } BB1 { - _9 <- (); - old_self_8 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 339 23 339 38] self_1); goto BB2 } BB2 { goto BB3 } BB3 { - invariant self_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 340 8 340 50] Invariant0.invariant' ( * self_1) f_2 }; - invariant proph { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 341 8 341 55] ^ old_self_8 = ^ self_1 }; - invariant proph_d { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 342 8 342 51] ^ old_d_6 = ^ d_3 }; - invariant d_inv { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 343 8 343 53] Invariant1.invariant' ( * d_3) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f_2)) }; - _13 <- i_5; - _15 <- Type.creusat_formula_formula_Formula_clauses f_2; - _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 344 18 344 33] Len0.len _15); goto BB4 } BB4 { - _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 344 14 344 33] _13 < _14); - switch (_12) - | False -> goto BB21 - | _ -> goto BB5 - end + _7 <- (); + old_f_6 <- ghost ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 328 20 328 38] formula_2); + goto BB5 } BB5 { - _18 <- f_2; - _19 <- i_5; - _17 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 345 26 345 30] Index0.index _18 _19); goto BB6 } BB6 { - clause_16 <- _17; - _23 <- clause_16; - _22 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 346 15 346 27] Len1.len _23); goto BB7 } BB7 { - _21 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 346 15 346 32] _22 = (1 : usize)); - switch (_21) - | False -> goto BB19 - | _ -> goto BB8 - end + goto BB8 } BB8 { - _26 <- clause_16; - _25 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 347 26 347 35] Index1.index _26 (0 : usize)); goto BB9 } BB9 { - lit_24 <- _25; - _28 <- lit_24; - _30 <- Type.creusat_trail_trail_Trail_assignments ( * self_1); - _29 <- _30; - _27 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 348 19 348 49] LitSet0.lit_set _28 _29); + invariant equi { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 329 8 329 59] Equisat0.equisat ( * old_f_6) ( * formula_2) }; + invariant num_vars { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 330 8 330 68] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula_2)) = UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * old_f_6)) }; + invariant maintains_f { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 331 8 331 54] Invariant0.invariant' ( * formula_2) }; + invariant maintains_t { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 332 8 332 60] Invariant2.invariant' trail_4 ( * formula_2) }; + invariant maintains_w { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 333 8 333 62] Invariant3.invariant' watches_5 ( * formula_2) }; + invariant maintains_d { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 334 8 334 73] Invariant1.invariant' decisions_3 (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars ( * formula_2))) }; + invariant proph_f { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 335 8 335 57] ^ formula_2 = ^ old_f_6 }; + _11 <- borrow_mut ( * self_1); + self_1 <- { self_1 with current = ( ^ _11) }; + _12 <- borrow_mut ( * formula_2); + formula_2 <- { formula_2 with current = ( ^ _12) }; + _14 <- borrow_mut decisions_3; + decisions_3 <- ^ _14; + _13 <- borrow_mut ( * _14); + _14 <- { _14 with current = ( ^ _13) }; + _16 <- borrow_mut trail_4; + trail_4 <- ^ _16; + _15 <- borrow_mut ( * _16); + _16 <- { _16 with current = ( ^ _15) }; + _18 <- borrow_mut watches_5; + watches_5 <- ^ _18; + _17 <- borrow_mut ( * _18); + _18 <- { _18 with current = ( ^ _17) }; + _10 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 337 18 337 84] OuterLoop0.outer_loop _11 _12 _13 _15 _17); goto BB10 } BB10 { - switch (_27) - | False -> goto BB16 + assume { Resolve0.resolve _14 }; + assume { Resolve1.resolve _16 }; + assume { Resolve2.resolve _18 }; + switch (_10) + | Type.CreuSat_Solver_SatResult_Sat _ -> goto BB13 + | Type.CreuSat_Solver_SatResult_Unknown -> goto BB12 | _ -> goto BB11 end } BB11 { - _32 <- lit_24; - _34 <- Type.creusat_trail_trail_Trail_assignments ( * self_1); - _33 <- _34; - _31 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 349 23 349 55] LitUnsat0.lit_unsat _32 _33); - goto BB12 + assume { Resolve3.resolve self_1 }; + assume { Resolve4.resolve formula_2 }; + o_22 <- _10; + _0 <- o_22; + goto BB16 } BB12 { - switch (_31) - | False -> goto BB15 - | _ -> goto BB13 - end + _9 <- (); + goto BB15 } BB13 { - assume { Resolve0.resolve d_3 }; - _37 <- f_2; - _38 <- * self_1; - assume { Resolve1.resolve self_1 }; - _39 <- i_5; - _36 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 353 36 353 68] ResolveEmptyClause0.resolve_empty_clause _37 _38 _39); + assume { Resolve3.resolve self_1 }; + assume { Resolve4.resolve formula_2 }; + assume { Resolve5.resolve _21 }; + _21 <- Type.creusat_assignments_assignments_Assignments_0 (Type.creusat_trail_trail_Trail_assignments trail_4); + _0 <- Type.CreuSat_Solver_SatResult_Sat _21; goto BB14 } BB14 { - _0 <- Type.Core_Option_Option_Some _36; - goto BB22 + goto BB17 } BB15 { - _20 <- (); - goto BB18 + goto BB9 } BB16 { - _41 <- borrow_mut ( * self_1); - self_1 <- { self_1 with current = ( ^ _41) }; - _42 <- i_5; - _43 <- f_2; - _44 <- borrow_mut ( * d_3); - d_3 <- { d_3 with current = ( ^ _44) }; - _40 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 356 20 356 44] LearnUnit0.learn_unit _41 _42 _43 _44); goto BB17 } BB17 { - _20 <- (); goto BB18 } BB18 { - goto BB20 + goto BB19 } BB19 { - _20 <- (); goto BB20 } BB20 { - i_5 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 359 12 359 18] i_5 + (1 : usize)); - _11 <- (); - goto BB3 + goto BB21 } BB21 { - assume { Resolve1.resolve self_1 }; - assume { Resolve0.resolve d_3 }; - _10 <- (); - _0 <- Type.Core_Option_Option_None; - goto BB22 - } - BB22 { return _0 } +end +module CreuSat_Trail_Impl0_New_Interface + use prelude.Prelude + use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant2 + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + val new [@cfg:stackify] (f : Type.creusat_formula_formula) (a : Type.creusat_assignments_assignments) : Type.creusat_trail_trail + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 42 4 42 30] Invariant0.invariant' f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 43 4 43 32] Invariant1.invariant' a f} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 44 4 44 36] Invariant2.invariant' result f } + +end +module CreuSat_Watches_Impl0_New_Interface + use prelude.Prelude + use Type + clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant0 + val new [@cfg:stackify] (f : Type.creusat_formula_formula) : Type.creusat_watches_watches + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 74 4 74 36] Invariant0.invariant' result f } + +end +module CreuSat_Watches_Impl0_InitWatches_Interface + use mach.int.UInt64 + use mach.int.Int + use prelude.Prelude + use mach.int.Int32 + use Type + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant1 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + clone CreuSat_Logic_LogicWatches_Impl0_Invariant_Interface as Invariant0 + val init_watches [@cfg:stackify] (self : borrowed (Type.creusat_watches_watches)) (f : Type.creusat_formula_formula) : () + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 132 4 132 42] Invariant0.invariant' ( * self) f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 133 4 133 44] UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f) < div 18446744073709551615 2} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 134 4 134 30] Invariant1.invariant' f} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 132 4 132 42] Invariant0.invariant' ( ^ self) f } + +end +module CreuSat_Trail_Impl0_LearnUnits_Interface + use mach.int.UInt64 + use Type + use prelude.Prelude + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror_Interface as InvariantMirror0 + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable_Interface as NotSatisfiable0 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant_Interface as Invariant2 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + axiom . + clone CreuSat_Logic_LogicDecision_Impl0_Invariant_Interface as Invariant1 + clone CreuSat_Logic_LogicTrail_Impl2_Invariant_Interface as Invariant0 + val learn_units [@cfg:stackify] (self : borrowed (Type.creusat_trail_trail)) (f : Type.creusat_formula_formula) (d : borrowed (Type.creusat_decision_decisions)) : Type.core_option_option bool + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 329 4 329 42] Invariant0.invariant' ( * self) f} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 330 4 330 48] Invariant1.invariant' ( * d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f))} + requires {[#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 331 4 331 30] Invariant2.invariant' f} + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 329 4 329 42] Invariant0.invariant' ( ^ self) f } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 330 4 330 48] Invariant1.invariant' ( ^ d) (UInt64.to_int (Type.creusat_formula_formula_Formula_num_vars f)) } + ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/trail.rs" 332 4 335 7] match (result) with + | Type.Core_Option_Option_Some (True) -> NotSatisfiable0.not_satisfiable f + | _ -> true + end } + end module CreuSat_Solver_Solver_Interface use Type @@ -23710,8 +8209,8 @@ module CreuSat_Solver_Solver_Interface clone CreuSat_Logic_LogicFormula_Impl0_Model_Interface as Model0 val solver [@cfg:stackify] (formula : borrowed (Type.creusat_formula_formula)) : Type.creusat_solver_satresult ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 351 0 355 3] match (result) with - | Type.CreuSat_Solver_SatResult_Sat assn -> FormulaSatInner0.formula_sat_inner (Model0.model ( ^ formula)) (Model1.model assn) && Equisat0.equisat ( * formula) ( ^ formula) - | Type.CreuSat_Solver_SatResult_Unsat -> NotSatisfiable0.not_satisfiable ( ^ formula) && Equisat0.equisat ( * formula) ( ^ formula) + | Type.CreuSat_Solver_SatResult_Sat assn -> FormulaSatInner0.formula_sat_inner (Model0.model ( ^ formula)) (Model1.model assn) /\ Equisat0.equisat ( * formula) ( ^ formula) + | Type.CreuSat_Solver_SatResult_Unsat -> NotSatisfiable0.not_satisfiable ( ^ formula) /\ Equisat0.equisat ( * formula) ( ^ formula) | _ -> true end } @@ -23721,132 +8220,168 @@ module CreuSat_Solver_Solver use prelude.Prelude use mach.int.Int use prelude.UInt8 - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = SatInner1.index_logic - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = SatInner1.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with predicate SatInner0.sat_inner = SatInner0.sat_inner + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 + clone CreuSat_Logic_LogicLit_Impl1_SatInner as SatInner1 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, + function IndexLogic0.index_logic = IndexLogic0.index_logic clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model3.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model3 with function Model0.model = NotSatisfiable0.model, - function Model0.model = SatInner0.model - clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner0 with predicate SatInner0.sat_inner = FormulaSatInner0.sat_inner, - predicate SatInner0.sat_inner = SatInner2.sat_inner - clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate FormulaSatInner0.formula_sat_inner = EventuallySatCompleteNoAss1.formula_sat_inner - clone CreuSat_Logic_Logic_Unset as Unset0 with predicate Unset0.unset = CompleteInner0.unset - clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss0.complete_inner, - predicate CompleteInner0.complete_inner = EventuallySatCompleteNoAss1.complete_inner - clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EquisatExtensionInner0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtension0.equisat_extension_inner + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicClause_Impl0_Model as Model3 with function Model0.model = Model4.model + clone CreuSat_Logic_LogicClause_Impl2_SatInner as SatInner0 with function Model0.model = Model3.model, + predicate SatInner0.sat_inner = SatInner1.sat_inner + clone CreuSat_Logic_LogicFormula_FormulaSatInner as FormulaSatInner0 with predicate SatInner0.sat_inner = SatInner0.sat_inner + clone CreuSat_Logic_Logic_Unset as Unset0 + clone CreuSat_Logic_LogicAssignments_CompleteInner as CompleteInner0 with predicate Unset0.unset = Unset0.unset + clone CreuSat_Logic_LogicFormula_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss1 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, + predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner + clone CreuSat_Logic_LogicClause_EquisatExtensionInner as EquisatExtensionInner0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss1.eventually_sat_complete_no_ass clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = Model0.model, function Model0.model = SatInner2.model, - axiom . - clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner2 with predicate SatInner0.sat_inner = EventuallySatCompleteNoAss0.sat_inner - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = EquisatExtension0.model - clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with predicate EquisatExtension0.equisat_extension = NotSatisfiable0.equisat_extension - clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = Equisat0.eventually_sat_complete_no_ass - clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable as NotSatisfiable0 - clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicFormula_Impl2_SatInner as SatInner2 with function Model0.model = Model2.model, + predicate SatInner0.sat_inner = SatInner0.sat_inner + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model0 with function Model0.model = Model2.model + clone CreuSat_Logic_LogicClause_Impl2_EquisatExtension as EquisatExtension0 with function Model0.model = Model0.model, + predicate EquisatExtensionInner0.equisat_extension_inner = EquisatExtensionInner0.equisat_extension_inner + clone CreuSat_Logic_LogicFormula_Impl2_EventuallySatCompleteNoAss as EventuallySatCompleteNoAss0 with predicate CompleteInner0.complete_inner = CompleteInner0.complete_inner, + predicate SatInner0.sat_inner = SatInner2.sat_inner + clone CreuSat_Logic_LogicFormula_Impl2_NotSatisfiable as NotSatisfiable0 with function Model0.model = Model3.model, + predicate EquisatExtension0.equisat_extension = EquisatExtension0.equisat_extension + clone CreuSat_Logic_LogicFormula_Impl2_Equisat as Equisat0 with predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = uint8, type a = Type.alloc_alloc_global, axiom . use mach.int.Int64 use mach.int.UInt64 - clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with predicate UnsatInner0.unsat_inner = ClausePostWithRegardsToInner0.unsat_inner - clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 with predicate SortedRange0.sorted_range = Sorted0.sorted_range - clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with predicate Invariant1.invariant' = Invariant6.invariant' - clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with predicate Invariant0.invariant' = Invariant6.invariant', - predicate Invariant0.invariant' = VarsInRangeInner0.invariant' - clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssigned0.trail_entries_are_assigned_inner - clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = LongArePostUnitInner0.clause_post_with_regards_to_inner - clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with predicate LitIdxIn0.lit_idx_in = InvariantNoDecisionMirror0.lit_idx_in, - predicate LitIdxIn0.lit_idx_in = LitNotInLessInner0.lit_idx_in - clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLess0.lit_not_in_less_inner - clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = InvariantNoDecisionMirror0.invariant', - predicate Invariant0.invariant' = CrefsInRange0.invariant' - clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate CrefsInRange0.crefs_in_range = TrailInvariant0.crefs_in_range - clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = InvariantInternal0.no_duplicate_indexes_inner - clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate VarsInRangeInner0.vars_in_range_inner = InvariantInternal0.vars_in_range_inner + clone CreuSat_Logic_LogicLit_Impl1_UnsatInner as UnsatInner0 with function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicUtil_SortedRange as SortedRange0 + clone CreuSat_Logic_LogicTrail_Impl0_Invariant as Invariant8 with function Model0.model = Model2.model, + function Model1.model = Model3.model + clone CreuSat_Logic_LogicLit_Impl1_Invariant as Invariant7 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicTrail_TrailEntriesAreAssignedInner as TrailEntriesAreAssignedInner0 with predicate SatInner0.sat_inner = SatInner1.sat_inner + clone CreuSat_Logic_LogicTrail_ClausePostWithRegardsToInner as ClausePostWithRegardsToInner0 with function Model0.model = Model3.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic, predicate SatInner0.sat_inner = SatInner1.sat_inner, + predicate UnsatInner0.unsat_inner = UnsatInner0.unsat_inner + clone CreuSat_Logic_LogicLit_Impl1_LitIdxIn as LitIdxIn0 with function Model0.model = Model3.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicTrail_LitNotInLessInner as LitNotInLessInner0 with function Model0.model = Model2.model, + predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in + clone CreuSat_Logic_LogicTrail_Impl1_Invariant as Invariant6 with predicate Invariant0.invariant' = Invariant7.invariant', + predicate Invariant1.invariant' = Invariant8.invariant' + clone CreuSat_Logic_LogicTrail_CrefsInRange as CrefsInRange0 with predicate Invariant0.invariant' = Invariant6.invariant' + clone CreuSat_Logic_LogicClause_NoDuplicateIndexesInner as NoDuplicateIndexesInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicClause_VarsInRangeInner as VarsInRangeInner0 with predicate Invariant0.invariant' = Invariant7.invariant' clone CreusotContracts_Std1_Vec_Impl0_Model as Model11 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . - clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate Sorted0.sorted = InvariantNoDecisionMirror0.sorted, - predicate Sorted0.sorted = DecisionsAreSorted0.sorted - clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model6 with function Model0.model = Invariant1.model, - function Model2.model = InvariantNoDecision0.model, function Model0.model = InvariantNoDecisionMirror0.model, - function Model1.model = TrailEntriesAreAssigned0.model, function Model0.model = Sat0.model - clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with predicate Sat0.sat = InvariantNoDecisionMirror0.sat, - predicate Sat0.sat = UnitAreSat0.sat - clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with predicate LitIsUniqueInner0.lit_is_unique_inner = InvariantNoDecisionMirror0.lit_is_unique_inner, - predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUnique0.lit_is_unique_inner - clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with predicate UnitAreSat0.unit_are_sat = InvariantNoDecision0.unit_are_sat, - predicate UnitAreSat0.unit_are_sat = InvariantNoDecisionMirror0.unit_are_sat - clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = usize, type a = Type.alloc_alloc_global, - function Model0.model = Invariant2.model, function Model1.model = InvariantNoDecision0.model, - function Model2.model = InvariantNoDecisionMirror0.model, function Model0.model = DecisionsAreSorted0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with predicate DecisionsAreSorted0.decisions_are_sorted = InvariantNoDecision0.decisions_are_sorted + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicUtil_Sorted as Sorted0 with predicate SortedRange0.sorted_range = SortedRange0.sorted_range + clone CreuSat_Logic_LogicAssignments_Impl0_Model as Model6 with function Model0.model = Model1.model + clone CreuSat_Logic_LogicLit_Impl1_Sat as Sat0 with function Model0.model = Model6.model, + predicate SatInner0.sat_inner = SatInner1.sat_inner + clone CreuSat_Logic_LogicTrail_LitIsUniqueInner as LitIsUniqueInner0 with function IndexLogic0.index_logic = IndexLogic0.index_logic + clone CreuSat_Logic_LogicTrail_UnitAreSat as UnitAreSat0 with function Model0.model = Model2.model, + function Model1.model = Model3.model, predicate Sat0.sat = Sat0.sat + clone CreusotContracts_Std1_Vec_Impl0_Model as Model7 with type t = usize, type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_DecisionsAreSorted as DecisionsAreSorted0 with function Model0.model = Model7.model, + predicate Sorted0.sorted = Sorted0.sorted clone CreusotContracts_Std1_Vec_Impl0_Model as Model8 with type t = Type.creusat_trail_step, - type a = Type.alloc_alloc_global, function Model1.model = Invariant2.model, - function Model0.model = InvariantNoDecision0.model, function Model1.model = InvariantNoDecisionMirror0.model, - function Model0.model = LitNotInLess0.model, function Model0.model = LitIsUnique0.model, - function Model0.model = TrailEntriesAreAssigned0.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = InvariantNoDecision0.trail_entries_are_assigned - clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecision0.long_are_post_unit_inner, - predicate LongArePostUnitInner0.long_are_post_unit_inner = InvariantNoDecisionMirror0.long_are_post_unit_inner - clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with predicate LitIsUnique0.lit_is_unique = InvariantNoDecision0.lit_is_unique - clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with predicate LitNotInLess0.lit_not_in_less = InvariantNoDecision0.lit_not_in_less - clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 with predicate LitToLevelInvariant0.lit_to_level_invariant = InvariantNoDecision0.lit_to_level_invariant - clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate TrailInvariant0.trail_invariant = InvariantNoDecision0.trail_invariant - clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate InvariantInternal0.invariant_internal = Invariant5.invariant_internal - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant4.watches_invariant_internal + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_TrailEntriesAreAssigned as TrailEntriesAreAssigned0 with function Model0.model = Model8.model, + function Model1.model = Model6.model, + predicate TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner = TrailEntriesAreAssignedInner0.trail_entries_are_assigned_inner + clone CreuSat_Logic_LogicTrail_LongArePostUnitInner as LongArePostUnitInner0 with function Model0.model = Model2.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic, + predicate ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner = ClausePostWithRegardsToInner0.clause_post_with_regards_to_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitIsUnique as LitIsUnique0 with function Model0.model = Model8.model, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner + clone CreuSat_Logic_LogicTrail_Impl2_LitNotInLess as LitNotInLess0 with function Model0.model = Model8.model, + predicate LitNotInLessInner0.lit_not_in_less_inner = LitNotInLessInner0.lit_not_in_less_inner + clone CreuSat_Logic_LogicTrail_LitToLevelInvariant as LitToLevelInvariant0 + clone CreuSat_Logic_LogicTrail_TrailInvariant as TrailInvariant0 with predicate CrefsInRange0.crefs_in_range = CrefsInRange0.crefs_in_range + clone CreuSat_Logic_LogicClause_InvariantInternal as InvariantInternal0 with predicate VarsInRangeInner0.vars_in_range_inner = VarsInRangeInner0.vars_in_range_inner, + predicate NoDuplicateIndexesInner0.no_duplicate_indexes_inner = NoDuplicateIndexesInner0.no_duplicate_indexes_inner + clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with function Model0.model = Model11.model, + function Model1.model = Model2.model, function Model2.model = Model3.model, + function IndexLogic0.index_logic = IndexLogic0.index_logic clone CreusotContracts_Std1_Vec_Impl0_Model as Model10 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, function Model0.model = Invariant4.model, axiom . + type a = Type.alloc_alloc_global, axiom . clone CreusotContracts_Std1_Vec_Impl0_Model as Model9 with type t = Type.creusat_decision_node, - type a = Type.alloc_alloc_global, function Model0.model = Invariant3.model, axiom . - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = Invariant2.invariant_no_decision_mirror, - predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecision0.invariant_no_decision_mirror - clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant1 with predicate Invariant1.invariant' = New0.invariant', - predicate Invariant1.invariant' = New1.invariant', predicate Invariant0.invariant' = InvariantNoDecision0.invariant' - clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecision0.invariant_no_decision = Invariant2.invariant_no_decision, - axiom . - clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant5 with predicate Invariant0.invariant' = InvariantMirror0.invariant', - predicate Invariant0.invariant' = FormulaInvariant0.invariant' - clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate FormulaInvariant0.formula_invariant = Invariant0.formula_invariant - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant4 with predicate Invariant0.invariant' = New3.invariant', - predicate Invariant0.invariant' = InitWatches0.invariant', predicate Invariant3.invariant' = Inner0.invariant' - clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant3 with predicate Invariant1.invariant' = New2.invariant', - predicate Invariant1.invariant' = LearnUnits0.invariant', predicate Invariant1.invariant' = Inner0.invariant' - clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 with predicate Invariant2.invariant' = New1.invariant', - predicate Invariant0.invariant' = LearnUnits0.invariant', predicate Invariant2.invariant' = Inner0.invariant' - clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with predicate InvariantMirror0.invariant_mirror = CheckFormulaInvariant0.invariant_mirror, - predicate InvariantMirror0.invariant_mirror = New0.invariant_mirror, - predicate InvariantMirror0.invariant_mirror = New1.invariant_mirror, - predicate InvariantMirror0.invariant_mirror = New2.invariant_mirror, - predicate InvariantMirror0.invariant_mirror = InitWatches0.invariant_mirror, - predicate InvariantMirror0.invariant_mirror = LearnUnits0.invariant_mirror, - predicate InvariantMirror0.invariant_mirror = Inner0.invariant_mirror, - predicate InvariantMirror0.invariant_mirror = Invariant0.invariant_mirror - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model5.modelTy - clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with predicate Invariant0.invariant' = CheckFormulaInvariant0.invariant', - predicate Invariant0.invariant' = New0.invariant', predicate Invariant0.invariant' = New1.invariant', - predicate Invariant0.invariant' = New2.invariant', predicate Invariant1.invariant' = InitWatches0.invariant', - predicate Invariant2.invariant' = LearnUnits0.invariant', predicate Invariant0.invariant' = Inner0.invariant', axiom . + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecisionMirror as InvariantNoDecisionMirror0 with function Model0.model = Model6.model, + function Model1.model = Model8.model, predicate Invariant0.invariant' = Invariant6.invariant', + function Model2.model = Model7.model, function Model3.model = Model2.model, + predicate LitIdxIn0.lit_idx_in = LitIdxIn0.lit_idx_in, + predicate LitIsUniqueInner0.lit_is_unique_inner = LitIsUniqueInner0.lit_is_unique_inner, + predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, + predicate Sat0.sat = Sat0.sat, predicate Sorted0.sorted = Sorted0.sorted, + predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat + clone CreuSat_Logic_LogicAssignments_Impl1_Invariant as Invariant1 with function Model0.model = Model6.model + clone CreuSat_Logic_LogicTrail_Impl2_InvariantNoDecision as InvariantNoDecision0 with predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror, + predicate Invariant0.invariant' = Invariant1.invariant', function Model0.model = Model8.model, + predicate TrailInvariant0.trail_invariant = TrailInvariant0.trail_invariant, function Model1.model = Model7.model, + predicate LitToLevelInvariant0.lit_to_level_invariant = LitToLevelInvariant0.lit_to_level_invariant, + predicate LitNotInLess0.lit_not_in_less = LitNotInLess0.lit_not_in_less, + predicate LitIsUnique0.lit_is_unique = LitIsUnique0.lit_is_unique, function Model2.model = Model6.model, + predicate LongArePostUnitInner0.long_are_post_unit_inner = LongArePostUnitInner0.long_are_post_unit_inner, + predicate TrailEntriesAreAssigned0.trail_entries_are_assigned = TrailEntriesAreAssigned0.trail_entries_are_assigned, + predicate DecisionsAreSorted0.decisions_are_sorted = DecisionsAreSorted0.decisions_are_sorted, + predicate UnitAreSat0.unit_are_sat = UnitAreSat0.unit_are_sat, axiom . + clone CreuSat_Logic_LogicClause_Impl2_Invariant as Invariant5 with function Model0.model = Model3.model, + predicate InvariantInternal0.invariant_internal = InvariantInternal0.invariant_internal + clone CreuSat_Logic_LogicFormula_FormulaInvariant as FormulaInvariant0 with predicate Invariant0.invariant' = Invariant5.invariant', + function Model0.model = Model3.model + clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant4 with function Model0.model = Model10.model, + predicate WatchesInvariantInternal0.watches_invariant_internal = WatchesInvariantInternal0.watches_invariant_internal + clone CreuSat_Logic_LogicDecision_Impl0_Invariant as Invariant3 with function Model0.model = Model9.model + clone CreuSat_Logic_LogicTrail_Impl2_Invariant as Invariant2 with predicate InvariantNoDecision0.invariant_no_decision = InvariantNoDecision0.invariant_no_decision, + function Model0.model = Model7.model, function Model1.model = Model8.model, + predicate InvariantNoDecisionMirror0.invariant_no_decision_mirror = InvariantNoDecisionMirror0.invariant_no_decision_mirror + clone CreuSat_Logic_LogicFormula_Impl2_InvariantMirror as InvariantMirror0 with function Model0.model = Model2.model, + predicate Invariant0.invariant' = Invariant5.invariant', function Model1.model = Model3.model + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 + clone CreuSat_Logic_LogicFormula_Impl2_Invariant as Invariant0 with predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror, + function Model0.model = Model0.model, + predicate FormulaInvariant0.formula_invariant = FormulaInvariant0.formula_invariant, axiom . clone CreusotContracts_Logic_Model_Impl0_Model as Model5 with type t = Type.creusat_formula_formula, - function Model0.model = CheckFormulaInvariant0.model - clone CreuSat_Solver_Impl0_Inner_Interface as Inner0 + type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model0.model + clone CreuSat_Solver_Impl0_Inner_Interface as Inner0 with predicate Invariant0.invariant' = Invariant0.invariant', + predicate Invariant1.invariant' = Invariant3.invariant', predicate Invariant2.invariant' = Invariant2.invariant', + predicate Invariant3.invariant' = Invariant4.invariant', function Model0.model = Model1.model, + predicate SatInner0.sat_inner = SatInner2.sat_inner, predicate Equisat0.equisat = Equisat0.equisat, + predicate EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass = EventuallySatCompleteNoAss0.eventually_sat_complete_no_ass, + predicate NotSatisfiable0.not_satisfiable = NotSatisfiable0.not_satisfiable, + predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror clone CreuSat_Solver_Impl0_New_Interface as New4 clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.creusat_decision_decisions - clone CreuSat_Trail_Impl0_LearnUnits_Interface as LearnUnits0 - clone CreuSat_Watches_Impl0_InitWatches_Interface as InitWatches0 - clone CreuSat_Watches_Impl0_New_Interface as New3 - clone CreuSat_Decision_Impl1_New_Interface as New2 - clone CreuSat_Trail_Impl0_New_Interface as New1 - clone CreuSat_Assignments_Impl2_New_Interface as New0 + clone CreuSat_Trail_Impl0_LearnUnits_Interface as LearnUnits0 with predicate Invariant0.invariant' = Invariant2.invariant', + predicate Invariant1.invariant' = Invariant3.invariant', predicate Invariant2.invariant' = Invariant0.invariant', + predicate NotSatisfiable0.not_satisfiable = NotSatisfiable0.not_satisfiable, + predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror + clone CreuSat_Watches_Impl0_InitWatches_Interface as InitWatches0 with predicate Invariant0.invariant' = Invariant4.invariant', + predicate Invariant1.invariant' = Invariant0.invariant', + predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror + clone CreuSat_Watches_Impl0_New_Interface as New3 with predicate Invariant0.invariant' = Invariant4.invariant' + clone CreuSat_Decision_Impl1_New_Interface as New2 with predicate Invariant0.invariant' = Invariant0.invariant', + predicate Invariant1.invariant' = Invariant3.invariant', + predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror + clone CreuSat_Trail_Impl0_New_Interface as New1 with predicate Invariant0.invariant' = Invariant0.invariant', + predicate Invariant1.invariant' = Invariant1.invariant', predicate Invariant2.invariant' = Invariant2.invariant', + predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror + clone CreuSat_Assignments_Impl2_New_Interface as New0 with predicate Invariant0.invariant' = Invariant0.invariant', + predicate Invariant1.invariant' = Invariant1.invariant', + predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_formula_formula - clone CreuSat_Formula_Impl2_CheckFormulaInvariant_Interface as CheckFormulaInvariant0 + clone CreuSat_Formula_Impl2_CheckFormulaInvariant_Interface as CheckFormulaInvariant0 with function Model0.model = Model5.model, + function Model1.model = Model1.model, + predicate FormulaSatInner0.formula_sat_inner = FormulaSatInner0.formula_sat_inner, + predicate NotSatisfiable0.not_satisfiable = NotSatisfiable0.not_satisfiable, + predicate Invariant0.invariant' = Invariant0.invariant', + predicate InvariantMirror0.invariant_mirror = InvariantMirror0.invariant_mirror let rec cfg solver [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 356 0 356 49] (formula : borrowed (Type.creusat_formula_formula)) : Type.creusat_solver_satresult ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/solver.rs" 351 0 355 3] match (result) with - | Type.CreuSat_Solver_SatResult_Sat assn -> FormulaSatInner0.formula_sat_inner (Model0.model ( ^ formula)) (Model1.model assn) && Equisat0.equisat ( * formula) ( ^ formula) - | Type.CreuSat_Solver_SatResult_Unsat -> NotSatisfiable0.not_satisfiable ( ^ formula) && Equisat0.equisat ( * formula) ( ^ formula) + | Type.CreuSat_Solver_SatResult_Sat assn -> FormulaSatInner0.formula_sat_inner (Model0.model ( ^ formula)) (Model1.model assn) /\ Equisat0.equisat ( * formula) ( ^ formula) + | Type.CreuSat_Solver_SatResult_Unsat -> NotSatisfiable0.not_satisfiable ( ^ formula) /\ Equisat0.equisat ( * formula) ( ^ formula) | _ -> true end } - = + = [@vc:do_not_keep_trace] [@vc:sp] var _0 : Type.creusat_solver_satresult; var formula_1 : borrowed (Type.creusat_formula_formula); var _2 : (); @@ -24050,137 +8585,6 @@ module CreuSat_Watches_Impl0_MoveToEnd_Interface ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 118 4 118 43] Invariant0.invariant' ( ^ self) _f } ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 123 4 123 93] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( ^ self))) (UInt64.to_int old_idx))) = Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( * self))) (UInt64.to_int old_idx))) } -end -module CreuSat_Watches_Impl0_MoveToEnd - use mach.int.Int - use prelude.Prelude - use mach.int.UInt64 - use mach.int.Int32 - use seq.Seq - use Type - clone CreusotContracts_Std1_Vec_Impl0_Model as Model4 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model3.model, axiom . - clone CreuSat_Logic_LogicClause_Impl0_Model as Model3 with function Model2.model = WatchesInvariantInternal0.model - clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model1.model = WatchesInvariantInternal0.model, axiom . - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = ToNegWatchidxLogic0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = ToNegWatchidxLogic0.index_logic, - function IndexLogic0.index_logic = WatchesInvariantInternal0.index_logic - clone CreusotContracts_Std1_Vec_Impl0_Model as Model1 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global, function Model0.model = WatchesInvariantInternal0.model, axiom . - clone CreuSat_Logic_LogicWatches_WatchesInvariantInternal as WatchesInvariantInternal0 with predicate WatchesInvariantInternal0.watches_invariant_internal = Invariant0.watches_invariant_internal - clone CreusotContracts_Std1_Vec_Impl0_Model as Model0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type a = Type.alloc_alloc_global, function Model0.model = Invariant0.model, axiom . - clone CreuSat_Logic_LogicLit_Impl0_ToNegWatchidxLogic as ToNegWatchidxLogic0 - clone CreuSat_Logic_LogicWatches_Impl0_Invariant as Invariant0 - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy1 with type t = Type.creusat_watches_watcher, - type ModelTy0.modelTy = Model6.modelTy - clone CreusotContracts_Std1_Slice_Impl0_Model as Model5 with type t = Type.creusat_watches_watcher, - function Model0.model = DerefMut0.model, function Model1.model = Swap0.model, function Model0.model = Model6.model, - axiom . - clone CreusotContracts_Logic_Model_Impl1_Model as Model6 with type t = seq (Type.creusat_watches_watcher), - function Model0.model = Swap0.model - clone CreusotContracts_Std1_Slice_Impl3_ResolveElswhere as ResolveElswhere0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - predicate ResolveElswhere0.resolve_elswhere = IndexMut0.resolve_elswhere - clone CreusotContracts_Std1_Slice_Impl0_ModelTy as ModelTy0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone Core_Slice_Index_Impl2_Output as Output0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type Output0.output = Index0.output, type Output0.output = IndexMut0.output - clone CreusotContracts_Std1_Slice_Impl3_HasValue as HasValue0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - predicate HasValue0.has_value = Index0.has_value, predicate HasValue0.has_value = IndexMut0.has_value - clone CreusotContracts_Std1_Slice_Impl3_InBounds as InBounds0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - predicate InBounds0.in_bounds = Index0.in_bounds, predicate InBounds0.in_bounds = IndexMut0.in_bounds - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve2 with type t = seq (Type.creusat_watches_watcher) - clone Core_Slice_Impl0_Swap_Interface as Swap0 with type t = Type.creusat_watches_watcher - clone Alloc_Vec_Impl11_DerefMut_Interface as DerefMut0 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve1 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global) - clone Alloc_Vec_Impl17_IndexMut_Interface as IndexMut0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type i = usize, type a = Type.alloc_alloc_global - clone CreusotContracts_Logic_Resolve_Impl1_Resolve as Resolve0 with type t = Type.creusat_watches_watches - clone Alloc_Vec_Impl1_Len_Interface as Len0 with type t = Type.creusat_watches_watcher, - type a = Type.alloc_alloc_global - clone Alloc_Vec_Impl16_Index_Interface as Index0 with type t = Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global), - type i = usize, type a = Type.alloc_alloc_global - let rec cfg move_to_end [@cfg:stackify] [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 124 4 124 93] (self : borrowed (Type.creusat_watches_watches)) (old_idx : usize) (old_pos : usize) (new_lit : Type.creusat_lit_lit) (_f : Type.creusat_formula_formula) : () - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 118 4 118 43] Invariant0.invariant' ( * self) _f} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 119 4 119 54] IndexLogic0.index_logic new_lit < div 18446744073709551615 2} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 120 4 120 72] ToNegWatchidxLogic0.to_neg_watchidx_logic new_lit < Seq.length (Model0.model (Type.creusat_watches_watches_Watches_watches ( * self)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 121 4 121 49] UInt64.to_int old_idx < Seq.length (Model0.model (Type.creusat_watches_watches_Watches_watches ( * self)))} - requires {[#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 122 4 122 62] UInt64.to_int old_pos < Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( * self))) (UInt64.to_int old_idx)))} - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 118 4 118 43] Invariant0.invariant' ( ^ self) _f } - ensures { [#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 123 4 123 93] Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( ^ self))) (UInt64.to_int old_idx))) = Seq.length (Model1.model (Seq.get (Model0.model (Type.creusat_watches_watches_Watches_watches ( * self))) (UInt64.to_int old_idx))) } - - = - var _0 : (); - var self_1 : borrowed (Type.creusat_watches_watches); - var old_idx_2 : usize; - var old_pos_3 : usize; - var new_lit_4 : Type.creusat_lit_lit; - var _f_5 : Type.creusat_formula_formula; - var end'_6 : usize; - var _7 : usize; - var _8 : Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global); - var _9 : Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global); - var _10 : Type.alloc_vec_vec (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)) (Type.alloc_alloc_global); - var _11 : usize; - var _12 : (); - var _13 : borrowed (seq (Type.creusat_watches_watcher)); - var _14 : borrowed (seq (Type.creusat_watches_watcher)); - var _15 : borrowed (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)); - var _16 : borrowed (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)); - var _17 : borrowed (Type.alloc_vec_vec (Type.alloc_vec_vec (Type.creusat_watches_watcher) (Type.alloc_alloc_global)) (Type.alloc_alloc_global)); - var _18 : usize; - var _19 : usize; - var _20 : usize; - { - self_1 <- self; - old_idx_2 <- old_idx; - old_pos_3 <- old_pos; - new_lit_4 <- new_lit; - _f_5 <- _f; - goto BB0 - } - BB0 { - _10 <- Type.creusat_watches_watches_Watches_watches ( * self_1); - _11 <- old_idx_2; - _9 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 125 18 125 39] Index0.index _10 _11); - goto BB1 - } - BB1 { - _8 <- _9; - _7 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 125 18 125 45] Len0.len _8); - goto BB2 - } - BB2 { - end'_6 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 125 18 125 49] _7 - (1 : usize)); - _17 <- borrow_mut (Type.creusat_watches_watches_Watches_watches ( * self_1)); - self_1 <- { self_1 with current = (let Type.CreuSat_Watches_Watches a = * self_1 in Type.CreuSat_Watches_Watches ( ^ _17)) }; - assume { Resolve0.resolve self_1 }; - _18 <- old_idx_2; - _16 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 126 8 126 29] IndexMut0.index_mut _17 _18); - goto BB3 - } - BB3 { - _15 <- borrow_mut ( * _16); - _16 <- { _16 with current = ( ^ _15) }; - assume { Resolve1.resolve _16 }; - _14 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 126 8 126 48] DerefMut0.deref_mut _15); - goto BB4 - } - BB4 { - _13 <- borrow_mut ( * _14); - _14 <- { _14 with current = ( ^ _13) }; - _19 <- old_pos_3; - _20 <- end'_6; - _12 <- ([#"/Users/xavier/Code/sat/CreuSAT/src/watches.rs" 126 8 126 48] Swap0.swap _13 _19 _20); - goto BB5 - } - BB5 { - assume { Resolve2.resolve _14 }; - _0 <- (); - return _0 - } - end module CreuSat_Clause_Impl1 use Type @@ -24188,16 +8592,16 @@ module CreuSat_Clause_Impl1 use prelude.Prelude use mach.int.UInt64 clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_lit_lit, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . - clone CreuSat_Clause_Impl0_Output as Output0 with type Output0.output = IndexMut1.output - clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model1.model = IndexMut0.model, - function Model0.model = Model0.model + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Clause_Impl0_Output as Output0 + clone CreuSat_Logic_LogicClause_Impl0_ModelTy as ModelTy0 + clone CreuSat_Logic_LogicClause_Impl0_Model as Model1 with function Model0.model = Model2.model clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_clause_clause, - function Model0.model = IndexMut0.model - clone CreuSat_Clause_Impl1_IndexMut_Interface as IndexMut0 with val index_mut = IndexMut1.index_mut + type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model + clone CreuSat_Clause_Impl1_IndexMut_Interface as IndexMut0 with function Model0.model = Model0.model, + function Model1.model = Model1.model clone Core_Ops_Index_IndexMut_IndexMut_Interface as IndexMut1 with type self = Type.creusat_clause_clause, - type idx = usize + type idx = usize, val index_mut = IndexMut0.index_mut, type Output0.output = Output0.output end module CreuSat_Formula_Impl1 use Type @@ -24205,16 +8609,16 @@ module CreuSat_Formula_Impl1 use prelude.Prelude use mach.int.UInt64 clone CreusotContracts_Std1_Vec_Impl0_Model as Model2 with type t = Type.creusat_clause_clause, - type a = Type.alloc_alloc_global, function Model0.model = Model1.model, axiom . - clone CreuSat_Formula_Impl0_Output as Output0 with type Output0.output = IndexMut1.output - clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Model0.modelTy - clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model1.model = IndexMut0.model, - function Model0.model = Model0.model + type a = Type.alloc_alloc_global, axiom . + clone CreuSat_Formula_Impl0_Output as Output0 + clone CreuSat_Logic_LogicFormula_Impl0_ModelTy as ModelTy0 + clone CreuSat_Logic_LogicFormula_Impl0_Model as Model1 with function Model0.model = Model2.model clone CreusotContracts_Logic_Model_Impl1_Model as Model0 with type t = Type.creusat_formula_formula, - function Model0.model = IndexMut0.model - clone CreuSat_Formula_Impl1_IndexMut_Interface as IndexMut0 with val index_mut = IndexMut1.index_mut + type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model + clone CreuSat_Formula_Impl1_IndexMut_Interface as IndexMut0 with function Model0.model = Model0.model, + function Model1.model = Model1.model clone Core_Ops_Index_IndexMut_IndexMut_Interface as IndexMut1 with type self = Type.creusat_formula_formula, - type idx = usize + type idx = usize, val index_mut = IndexMut0.index_mut, type Output0.output = Output0.output end module Core_Clone_Clone_CloneFrom_Interface type self @@ -24222,13 +8626,6 @@ module Core_Clone_Clone_CloneFrom_Interface val clone_from [@cfg:stackify] (self : borrowed self) (source : self) : () requires {false} -end -module Core_Clone_Clone_CloneFrom - type self - use prelude.Prelude - val clone_from [@cfg:stackify] (self : borrowed self) (source : self) : () - requires {false} - end module Core_Clone_Clone_Clone_Interface type self @@ -24236,25 +8633,19 @@ module Core_Clone_Clone_Clone_Interface val clone' [@cfg:stackify] (self : self) : self requires {false} -end -module Core_Clone_Clone_Clone - type self - use prelude.Prelude - val clone' [@cfg:stackify] (self : self) : self - requires {false} - end module CreuSat_Decision_Impl2 use Type clone Core_Clone_Clone_CloneFrom_Interface as CloneFrom0 with type self = Type.creusat_decision_node - clone CreuSat_Decision_Impl2_Clone_Interface as Clone0 with val clone' = Clone1.clone' - clone Core_Clone_Clone_Clone_Interface as Clone1 with type self = Type.creusat_decision_node + clone CreuSat_Decision_Impl2_Clone_Interface as Clone0 + clone Core_Clone_Clone_Clone_Interface as Clone1 with type self = Type.creusat_decision_node, + val clone' = Clone0.clone' end module CreuSat_Lit_Impl4 use Type clone Core_Clone_Clone_CloneFrom_Interface as CloneFrom0 with type self = Type.creusat_lit_lit - clone CreuSat_Lit_Impl4_Clone_Interface as Clone0 with val clone' = Clone1.clone' - clone Core_Clone_Clone_Clone_Interface as Clone1 with type self = Type.creusat_lit_lit + clone CreuSat_Lit_Impl4_Clone_Interface as Clone0 + clone Core_Clone_Clone_Clone_Interface as Clone1 with type self = Type.creusat_lit_lit, val clone' = Clone0.clone' end module CreuSat_Decision_Impl3 @@ -24269,11 +8660,12 @@ module CreuSat_Lit_Impl0_ModelTy end module CreuSat_Lit_Impl0 use Type - clone CreuSat_Lit_Impl0_ModelTy as ModelTy0 with type modelTy = ModelTy1.modelTy, - type ModelTy0.modelTy = Model1.modelTy - clone CreuSat_Lit_Impl0_Model as Model0 with function model = Model1.model - clone CreusotContracts_Logic_Model_Model_Model_Interface as Model1 with type self = Type.creusat_lit_lit - clone CreusotContracts_Logic_Model_Model_ModelTy as ModelTy1 with type self = Type.creusat_lit_lit + clone CreuSat_Lit_Impl0_ModelTy as ModelTy0 + clone CreuSat_Lit_Impl0_Model as Model0 + clone CreusotContracts_Logic_Model_Model_Model_Interface as Model1 with type self = Type.creusat_lit_lit, + function model = Model0.model, type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Model_ModelTy as ModelTy1 with type self = Type.creusat_lit_lit, + type modelTy = ModelTy0.modelTy end module Core_Cmp_PartialEq_Ne_Interface type self @@ -24282,49 +8674,31 @@ module Core_Cmp_PartialEq_Ne_Interface val ne [@cfg:stackify] (self : self) (other : rhs) : bool requires {false} -end -module Core_Cmp_PartialEq_Ne - type self - type rhs - use prelude.Prelude - val ne [@cfg:stackify] (self : self) (other : rhs) : bool - requires {false} - end module Core_Cmp_PartialEq_Eq_Interface type self type rhs use prelude.Prelude - clone CreusotContracts_Logic_Model_Model_ModelTy as ModelTy0 with type self = self, - type ModelTy0.modelTy = Model0.modelTy, type ModelTy0.modelTy = Model1.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model1 with type t = rhs - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = self - val eq [@cfg:stackify] (self : self) (other : rhs) : bool - ensures { result = (Model0.model self = Model1.model other) } - -end -module Core_Cmp_PartialEq_Eq - type self - type rhs - use prelude.Prelude - clone CreusotContracts_Logic_Model_Model_ModelTy as ModelTy0 with type self = self, - type ModelTy0.modelTy = Model0.modelTy, type ModelTy0.modelTy = Model1.modelTy - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model1 with type t = rhs - clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = self + clone CreusotContracts_Logic_Model_Model_ModelTy as ModelTy0 with type self = self + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model1 with type t = rhs, + type ModelTy0.modelTy = ModelTy0.modelTy + clone CreusotContracts_Logic_Model_Impl0_Model_Interface as Model0 with type t = self, + type ModelTy0.modelTy = ModelTy0.modelTy val eq [@cfg:stackify] (self : self) (other : rhs) : bool ensures { result = (Model0.model self = Model1.model other) } end module CreuSat_Lit_Impl2 use Type - clone CreuSat_Lit_Impl0_Model as Model1 with function Model0.model = Model0.model - clone CreuSat_Lit_Impl0_ModelTy as ModelTy0 with type ModelTy0.modelTy = Eq1.modelTy, - type ModelTy0.modelTy = Model0.modelTy + clone CreuSat_Lit_Impl0_Model as Model1 + clone CreuSat_Lit_Impl0_ModelTy as ModelTy0 clone CreusotContracts_Logic_Model_Impl0_Model as Model0 with type t = Type.creusat_lit_lit, - function Model0.model = Eq1.model, function Model1.model = Eq1.model + type ModelTy0.modelTy = ModelTy0.modelTy, function Model0.model = Model1.model clone Core_Cmp_PartialEq_Ne_Interface as Ne0 with type self = Type.creusat_lit_lit, type rhs = Type.creusat_lit_lit - clone CreuSat_Lit_Impl2_Eq_Interface as Eq0 with val eq = Eq1.eq - clone Core_Cmp_PartialEq_Eq_Interface as Eq1 with type self = Type.creusat_lit_lit, type rhs = Type.creusat_lit_lit + clone CreuSat_Lit_Impl2_Eq_Interface as Eq0 + clone Core_Cmp_PartialEq_Eq_Interface as Eq1 with type self = Type.creusat_lit_lit, type rhs = Type.creusat_lit_lit, + val eq = Eq0.eq, function Model0.model = Model0.model, function Model1.model = Model0.model, + type ModelTy0.modelTy = ModelTy0.modelTy end module CreuSat_Lit_Impl3_Output use Type @@ -24341,20 +8715,15 @@ module Core_Ops_Bit_Not_Not_Interface val not' [@cfg:stackify] (self : self) : Output0.output requires {false} -end -module Core_Ops_Bit_Not_Not - type self - clone Core_Ops_Bit_Not_Output as Output0 with type self = self - val not' [@cfg:stackify] (self : self) : Output0.output - requires {false} - end module CreuSat_Lit_Impl3 use Type - clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 with function IsPositiveLogic0.is_positive_logic = Not0.is_positive_logic - clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 with function IndexLogic0.index_logic = Not0.index_logic - clone CreuSat_Lit_Impl3_Output as Output0 with type output = Output1.output, type Output0.output = Not1.output - clone CreuSat_Lit_Impl3_Not_Interface as Not0 with val not' = Not1.not' - clone Core_Ops_Bit_Not_Not_Interface as Not1 with type self = Type.creusat_lit_lit - clone Core_Ops_Bit_Not_Output as Output1 with type self = Type.creusat_lit_lit + clone CreuSat_Logic_LogicLit_Impl0_IsPositiveLogic as IsPositiveLogic0 + clone CreuSat_Logic_LogicLit_Impl0_IndexLogic as IndexLogic0 + clone CreuSat_Lit_Impl3_Output as Output0 + clone CreuSat_Lit_Impl3_Not_Interface as Not0 with function IndexLogic0.index_logic = IndexLogic0.index_logic, + function IsPositiveLogic0.is_positive_logic = IsPositiveLogic0.is_positive_logic + clone Core_Ops_Bit_Not_Not_Interface as Not1 with type self = Type.creusat_lit_lit, val not' = Not0.not', + type Output0.output = Output0.output + clone Core_Ops_Bit_Not_Output as Output1 with type self = Type.creusat_lit_lit, type output = Output0.output end diff --git a/mlcfgs/CreuSAT/why3session.xml b/mlcfgs/CreuSAT/why3session.xml index 2a2293f8..c0f3f654 100644 --- a/mlcfgs/CreuSAT/why3session.xml +++ b/mlcfgs/CreuSAT/why3session.xml @@ -5,10272 +5,681 @@ - + - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + - - + + + + - - + + + + - - + + + + - - + + - - + + + + - - + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + - - + + + + - - - - - - - + + + + + + - - - - - - - - + + + + - - - - - - - - - - - - - - - - - + + + + - - + + + + - - + + + + - - - - - + + + + - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - + + - - + + - - + + - - - - - - + + - - + + + + - - + + + + - - - - - - - - + + - - + + - - + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + - - + + - - + + - - + + + + - - + + + + - - + + + + - - + + + + - - + + + + - - + + + + - - + + + - - + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + - - - + + + @@ -10305,93 +714,58 @@ - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + + - + - + - + - + - + - + diff --git a/mlcfgs/CreuSAT/why3shapes.gz b/mlcfgs/CreuSAT/why3shapes.gz index 4b0a12adf16a27596d836891604666f4cbd63e69..03c4a84607e23c90ae674e6a1a436785dde58243 100644 GIT binary patch literal 14602 zcmV+lIrYXLiwFP!00000|LuKQZyZUI=DU7{-g;N_;`g!WYJd<*O971@V7fQ=O@yD- zM61YZkt%8S*Y9WU5t$K@2QyO_sZya*%#85E%-r2BH#h$uFP`81GyGQWp8sCn-Cf__ z{IBQc`HTPg?B#uU72e*Jm*M*6D&D@o$#>yD!u#u+d!zn@e?xj#-rt4$tGnB`s5$=m zd;fFu{@1H?dsE+Dr~A9`V#N~=FHzy|sPOk`$<^>5mHDueuftC(dEI*s|9JPlgg;OE zT#3Y;QpPI9thCH)%?;PDsFpYppjL^m*sE91Rxh8|+jq~eZ_q-xEAz6Sfe>%YufK*z zLxl}A50Ic2d=~!vQ+Qi$e!2f=`1LlIw=1^0`)BumZIFjw%6%`%S3KO`UNw+c^3?^f z7=O-MM7h^>0z)nz|MafZ8){K4T9lg>)u9&U>-yITmQ9 zU}TA1998zWcjfmzV{=>sH|68~zQKK6M?`X|;r-kDj>&RvaGK&fC&#j+*f)!}O3IZy zvZPw6eI>7Neh=@i!_7VL-QfP~^}Bbs?^b$c{=K^dy_(e?YS>BnKdmf*vYr`k29sWK zPGdb?zJA6(R>CI!^Ti(S(%!y)Sw|j(CGJ*254@rM(lkNvFN*$5-;`e|{qu*Fa_yI! zF_OPb+g4`wYp8Bl!t`&38fxG4N~!)0M3(sW&v1A3dwBc4tdv-flkV?O3agWF8mAq8 zg|@D*-roLlomPtVVr(US`zHNLx>jMm*7Zu7vAVRwYx*{zDGf;5zv=a~zJC|4-wyx& zqy78#8c%P*%zg*!;sSJ$s#Q|^8LVWpUmYh21jQ65DHbCw2XOcrur?;IE?#b?hh9z( zM@(4zm9}jZF`TCHWlh7-zZneps{z>cEa59-N5UIoC-}WGt;X1wF*Bl@E+P!(wCdl~ z%E(u*=R`MamS+ULo-jSLMA-1w4A!#k4HD-48#{hTUVT_;-4NCLheY$)ua1CLD=nuO zYq@|>i(XKSfN9==-KQAf`o$rMEw&~0)vxdO2nCG7kqq3d%#kJS%AUpQ-OBG{^?0?5)pIuE^_)!${VBW% zb^04b4EM{2AZGZmd?@iCFQqc5`Rn_)Vg2{j@R!svRJ`kr{P~<}Az%N#lVnLu!BQc; z4ezl8&w{M{`~5YQh9*&N8r`pNZpyo{%{Fw73jSp_ntmvd_yoDTtLyx6XR&9Pws+-i zz2fZ;{j66av@iEp&=Bd%hbt96(3gCrL#8ji@|BskLVaA>{+AxS2v>exa9RnA2e0VK z6=#I(mFPeC*vJwo6hm7BGAQ>93L316e0>kP94egHd_Z1I+BteS0OgM1=xw!k(;nV@ z#vb0Rd-!PwhV$Xvkko7l-5+Rr*uPp@Q&+P8a3k#}YY z(DZG^RUb46tt-eq{08vvN;4q`E2p*6U$n&{*nHr|AA-hKv`KI!_+-5ZF?6?U1)#MN zSaG-jk#(^~HkFSjq~LoNiD3QZVwHTpKHhBl*j^`iv$ar0VyX>|`vbk9E&*=vZ)c7h zHpxT0g)sY2@}GYFS8L3KdVLe#PD);h$vT@^RYz)at%cL6qZf-02%gnQ$KG#VSTs2Z`~}W^B({mO^;it_9$suYF^(j{skPqB5E~jAWizfOeb^&e!`=OwV-1x? zrnS>m8a{@PJbV=4qYNKa_^8826F%AvvlFugdrTW|8knt_8CzWApgJafwd-w;poVJe zGA6u@`AWz&O+>3Ww&xGiW^K-_v-Q( z((G*NO@kVZ%?Pw+nXaSNk@wpKa%%$hGK%dYkRJ)8#6}d|69ZVZhxfg`Q7u$*t+w>v zs>^|OgCrzj2n_bXc7r2ct;|%lRBCD7QSXb#a_Hk^!9~ryy}kM63S_wY?e^~e>irEw z>O_q@O3-G5A^p_rW#5VRUnSf@Wd9Z8M1>o#xG%q5X|X8ycRX#KQ5R^ZHD~yg znnvuRrrGS3VEDEvHCTLx4bEurw7fzN+0IZo?_rZ$-} zt>e=Nan^xpjnKoFQ}xQ9qiGT1Yd3USdepZ-zo0=3_n))V6+eFMfcoT{UU(Tk9fs!2 z=4kiT#d4N@0jeIvZ~wl)Y2EK-!7Fm1JTO5&ANHEImNyvb&yCUl0XJIRf7pxByH<>l zdiJ;G6}r9|#QsAxI6@~fc3^6JLZ%aRBk+>R=Gj9KeHJyYv#)bNefIL@%Z(;YeDq?Y z`!q*L-&dO!5f@vNZQ94UFLF1q=wnI_i)69=bBvOQ4*p|d8y`usi=WX1NUSI1S=qUskwR7fZXV56NQHUd*(gi@9oau|u62R4&Ws z?t@*{|C?59mo;zYy0+ZZR$H~@thSseXG4vJ&#ykC89Uhmo0H(a6BXX%hK1T{UD6Y|^|(EF zegAr#A}gVK6vcc}t;8^=R)SBXD`;Ng3;i=Z=gW$0sK{L}z*gK36}hK>@O&a9p--}n zj1&~wGLw*aFXhn!5`_=(fr)^ml4l6W*1;J9vUT?*1SA^P8&%jG%X@baYQ|;pUVVy$ zr23yhLK2t_!(sp81neFZkYmuyKf_IaTdo?cV?e@mm#3cX+ON-+hTuuHXD}S?IC<9B zO1)|ZW9^$~dW^s@Jp$uuy?g%?1p`dB_1RE)5J8+bf2|p6Z~1FEU;As#+}wBP?3G=) zottEf9V$O>oq#^mU~-=@LRW4Iz;WYq<+r@moS#9ZEw}J_t-K63xA#{leSKH2Lws8Z zsd3f690KnzFuebLcYU{haP`06QQ+gg{YG-bj@ymU)E)|t@F;(=KQe<}pMlzvwNo>R zPbHx`ui+!e)2!`@IWLxwK%VWTojj3t@-Xe>S+x7h7Q|b$JE!3zX!lnL{+p6ltNj#G zCsIfqrqCHt4!bC%wkUK?!$(l)zslWxc!voF1?j47JhU%I&dcy|5*)-g5_mji6UJI; zTI-5!dV4Vhf*lC%;C2z*!QH0I{$MS0=8+oQF5}1i_;@QGgS%zy5%qIMU;?#%R#*q{ zJQUWkf7X2pqz}&chXU^0CcJ4*?ml$e1Mp@Xfb&RnM$iX!HzJU3fBg*tiiA^dZ~lJ% z@RNcE zlOWp#)_?x%LzwRHwv{}F5AQ4=KCU@{pKydq9UKVzTnAyX7Uro3OLaSDiLJvthoCM# z*~fk{L~}kEX)DD%(su8ltRCf{td?QWVokdpA)I{su^4E%Gvsp;*?Ed|7ycx%P93a6 z6L&=R)y4_h%-M30uS5IBLOrCh%^W^VovrC6^=9huF(7c9JF{K7r6MZTHm&vc3qG{i z9-pN{0F-vG@XkjR;2Tnn#_v^UA>7kU26#wja8cm1cx?z4BZ~DyO0WF z81I7hYje7-L(O~!L#{(~x*?}~pf2kw?0^17(FNn5zun%HilNFwM>Ybu!%f%!h|IXH9F*ujDUW`u`9AfHty4dIDocO9bE5MW6VZ^%$*dFh)BWKRB zURTX0Vt=vbRD(C>V%O2?Qwe;s6L3jjzWsRStXvYfgLs^qw-aNrcBZfRd|0+!h!gK~ zufc}JhQWO7Y%V0z3W~FuEdjgi` zVW~GEt(k@VNJ{g!d`N^cYU}avU~L&H(X2s3mV@Y)p`D(lF8AfmGl#5Liavt-dsq#W}tLmMgme=+|7JNFVxj} z^HrW6HrG3w&sTLu^xdKvnwUy&wccDC5&G)^wNxbI0A6 z0iyHMdL-*!DLW*}R%Q=R)5l6xHIu4RchBc}T}kp0qh9|`;Qw< z%2IW4c#oWm=^pufTikE$$2DNCwztJwFS}0goV8c&&)h{nb`yQb>AG-ea=!Ik3=~>E zm%~_{huc|u<7aJ+&v(X$T(-OX33&Hq911=C(@xvARqtmm_9=Z-bDgn=Z}w##&PX?; z3uUc3?CT_2UMl+Ydh+Jk-=;r?r0BOd^tjc)d}>zA^Z4J-|6h4`OOs%{0pY-0qs&Xc zly}c>0apcB1kB_z7CJd_II``E+r4S#8zttg4OKR@5)a(5vWr%7O)Jh=r&jy&dh&Ll z*XGAqc1D&NbV5*>B?ScETX56Vi$#^hg?{#Or|+v-C7TN<0wLHkHXl!g(NbC0Z64+c z1h+c@T00o|viLp}FQ!BsH$9pcc0=%6v3@&zT@TE~=>z;>+=e)DUiB(|@aj%+lLsd7 z#dJ|!4Bwk?cU*qAYJ;7cF42qA7y1F4@c`pljjTzyjdw;jdpw_or9i1zrrC~kL1)~$K=%aM|^NP*?n z=Q#gnc`%0kzeOQA-y(H=SWey|btfrYOMeOxZ|kub27Bwp2E-!=wXJg1H@DixncmEe zi>(Q?cOP#$?>gfE%Qr)lW|+16cJgLZz1Mc()(*9Yau z&8@iT83s+9+z*qi@huE~Ca3!M?Z|vNw*v=GGCf4H zNj5BpIL+;Zmy>M6ax2{YIAPeK-gRFHAKrbo+`@8`e)rhutyb+b9DnPBe{vQUwdH&} z`8e>3>n;DFTJ@Xs$l)>H_8Cu}x118R--!7-?D}xCi3j9Ed~d%*Z19#WS{k?8+G1&a zj=ODKHh<&K7fZgr;v2`;N=&0x<${~9)by>I1!GD}-XMG8mfPf@&oRy>I}gU}E^E7V zp%VXIJRV^K(93YhF&ML7&bAI)Y~hgY8mr+sAIR74om(_AvT2ZSaUETA{=XQWw`+zL zHP=J$FZ%U#avXZuhThYSbGp6L`)}fta`vm=wKs_&dXP7dXi9lJTVB^Wh8qjD5_%=f zO4xPIdO(fbcEH*O`64TxP~~M?o;8iXoT!pEo~d;^?@B_F96JM&WI_FXy(>JzaDv zX&u`(N>(}{wJ)wG^bFy{_)a5bkD6SQc#NYb*E%w4I^7Hl+eb0{iBp9d(f$C+8*d+7 z;YvB$518$n6JGi_=eO3|&Tl#;GW6Ad+U>POPqz=9=>B+;Z2z3|CUz@f`3b6t)|1XZ z&%u?3)fs?1dpSm}FL-B|ZjY@!7zfJX8`$#2a6fF1Ia%DdYZHSk5^X-w`+WneqRQ|NPIHWk#4Z`R zxtM)wI!L{gk$a_vxSIZu}cQ41Xupej2~hCCHnHYj`O@XZ+qaNQNf$_>CUkzRg$l%50jN z#y5;FUrb)pa6Df_jBnTX=fz)afIq$N0NC!~o7*E|?Q+{w;6a*S>3voCjM$$*0;1rX z2}Ry)Fg!RK{1ZukdQRF0Y0q~OpYJVl1o`(@o(;e`$jmAEW=fgK7;K`(CcCV=b~L6z zWAl_#Eu3rK+xpjb8)F37yuyoi4f7P^#d`0-RqHsl9xv7{cfKRMZQRzFR580ZMBa?o za=&OdSHIZY(!C=|w_Z29uHudubK78{4(L^&yyPe`?spW#4^3wnOgp_6s@b zM{M~u&QXneL+7P{6(@w_EfMTPv-Ls_gxY$+hdFX4g6Ac0Jws#d-Axm;4l#!3*iu)t z*V8Sjt5fcl;aicv4_Z>Yu66y~wiMr7&pW@@owubsy@nObr!S)e-ln0~2ZYj=j_@0L zDery{{rZLVDJQIKQ?I!+1E>?UC>l6w6 zC7HPo*=a|TWt>8jBk;GAGt`?QTR+r$FM6I4^Puyk(WT>jI~>fvZHKElJF@c+onbso zwvW$fstlgG^&ITxpQN{wi;#wQZ#E`M`5jbxAKt$GZ<-ia<5Z<1j-cY)!Z`#@|oaqQx6PVM0jfX3p>~fX|ywsn^ zY>3s=US^nNuDplpVR5Yy_)A8It=wu3R({!I3NVpw#IO0 z*k&Y}mBQzbroi!qi|D~fi*`B5q7i>a8-AB1;f4ch-5s+JWO>&8W&Gfok@H5H%ek?$ zu~*J8&WEc+yJux5?wgsk&zj$@;j3+1x|OMXx{l`$WI=q`L^kwu?}#U4&vg zMLpWuGL3tirzgW(gb*!_@;AGCdvkVgJMN+r`%@0I6PXk`K6R%EwLTGfC>~90F|U4; z!VsS+#?h91S#JGfJM9=>_=ov;uxK{a{h?e>o$=VsWDT5q0_E7u?Y;1P)XsB!ESeDw zv#rPb*-5|jfr`I8aNhAVg=IC-eJJ(H#58P5!@d}%NjcuaxPQVUsIEKm4>U#b-~?_e z?;>L5z2QtYPu`@<74}0%a zn)it9xwlH-{azjym*cy$95~`k{sFtdBbE z*RIz_wV*=)Cu!FY+t1|cIOJ#81C(F-GX%v?e=~o^%c(b^MeOjspu6^ZZLb{dh1oQ` z!%cC(>RG!fD4^#M-#s{3vrwOh2K6A{)f2wEmtTHZq??hAx9R5a*ui)AM`w?GciX@{ zeOd1~Fr)EsIQ_Cb9wSD+J7f#*LZcs#Y5B?h$gtmx-{-t}WNX0g#SpnkM_b+uyt#Eg z#&b&5x%48WlCRoj>cp6GxS2%S;Pp_t>YWX`LunyV5s&sLe_oron$ zmdta`F8wpcauKmQkwVhdNs){(C3&lbutnA9TwHSg%yWPsg^IN%UNZBHGh0dwfh-rP zo(p!#{Uvvo++K2X$@L{yms|plz!Q%=5<)yhRYQ?g8m}w2Mn|Ea3vnqpp&z2vCUfRY z)~Ya7W%Wc(W1UJ70DFl}P}*J!b1C$tP?th3y3-=dq+|6pxKtCX08%pWLFZDbIzCta zQh`38q`6ceySh}UCoUCWV3*QgN_Q#kr8JjPUrKc;<)svtl3z-8Dg32y5A-jkcQpqe ztKg)Rye%A(qZHw#_5x$fQ?$1#FTgY}P zG4#o)V627CU=@~A;AT`!tE=Ff9Vu zGpq@yafFB0mtI{$35E{r`K4!<&OdUrw3f9(c~8zp!vbR^WhS9WKs(PlH*MUTr-+#f zK*76Ml(tr3>Pcpy(vkA!jP|NwW}hf>K5J&G|)?iLv!d}D2 z;bZYZGiVdaG(Kom2z*eEd^Y5?A+HU&ZKylyk2*w;yt#f*j-wnSGNK$qIfil!ptJ9367>_=Cm|(^wRNr4Iupg9`Azx3UHDKTX0_G(?po0b-+8BTifDD>GKKjRa zd=CC1EH}*a%Cd_(uwYVjK{{otQb4|qhXLN2#szo-Fs`Wy{bP*2mf4^oTDh-PC{=?5 zvnoCd7L~UWx=S}34F54s-`dNfgb<}DlLCuUS0;>7L6uy%DM5A}$cP_f^$5nQxaxyf z*2)|dQ!?>dtYQpys!_H(jW{5LTtZD6H{fn4Tma1&v}4eakw3=p8;&8%7%G*WkBnrN zHdZ*NgSKQOSJQQ40QqAaANM#yjv3`L&pL`Clgv;KDauEJXwI50-vH;2v3&evDFcH> z31%7+mxVNY>%6F1NYlqt{}|IJ zG^P}-A}qPq`kVuP4g|oi@j-Rqz<~q@7To&pmN333t$eXMSr=HyOk@vTB$~iW(J&4=VeB80 zI7Ab!g5f60#8i|aC`*Qu)j(CNfjI6DOQ5V1W18{81W(zdq>OhaF$3L4X3GWw`9Cy~ zB3(kL4A_niH9*AV>?n2}tIjd4O(zmC`J)pmWCe3btL!17oJz$Nic;1fm6WoIfl&Mh zv1nGYYM9dks;AR|NtK|S22*u50xM8Hm(&ZoIqc(eGIGcOo2rTehKu7q^Qt4ARN%So z%?eOSfJy>X5{%O@}x-r7_7BE3d`xB1dG`)AtD_{D;w&IzgAs4X}hg9K3ETVE7NUJUG< zO1qy~M2P{8+87av76z-obRZuApkPeVC0H<;(J58#1JtmLLFP54n)}Lxee)=Qb(G1y zLhKuuiaxT0)e9IgOI?mq^_2^Q?9l+slaQgn?o>KR6LriM;#2y9DUf9v02Yr6XlPE# z1&ArIX6T`UY`dJiO3}i0>8B(FYCSr@tKm>)YLG!%l_LbVFNV%{8^|AK2Ef(h1YW3O zN>Q!`R!VkWLK4IjBG?+1=OC-8?qfxu2pGIfg5J6W9aCmDnp}!cS_Sath5%G2L8=qF z5$H!iNfXf0gro)m96E#*h!4t9pVTS!O5J`-Q zb?2N)e@6&Ql4qF`edrR4QNSGL9Wbsn7d?!w`M!|mOjn72RMo2ZY%9yASj$;~M#ZEZ z&Ta~grZn2pXiQUU^bGB3z@`D425cHVHX5OvvQLv9B~(+n@j5~P30;)rKEqloJ_P8) z-99t?4@DCV{nTcoDxI;0L4&CQ^MDfWz>IcEok|n)9ni$Wx^r0hJQ+G2oRY2CfEy^# z$Lnf4O~fB=u1ILrqOxd|fK6jzl9>{?s5)|Du4d#Xe?Zc3N}%PrN>JZxgjJOla}~BA z(&(hFe$fTcWR0KlSILnK4PhFUglD?u2dA3897E8!1AKox>umHFy3%L;2TR8^vr zUUEgIXD6WgLBxYLyJCgHiXZ?>jLd?|i{u>_(3_%Sp%YR6AmoFpW>#ccrDC9fCno);LgoJSYCKIYMsqqfkPLu(GrIkZPx zu|p7&Z~)Q)NCzMt%3B%)>fC;%Ss|SZF&n9E^di9YX2EAya#Y?_(VZ!tKMiE8Q;r2A zy;e>$S-2HmL;DGkS70OEnxd?jPX(dKIi>BBE(_SqT)`O9wn~)&i5Y$2UOp|PiYU?6 z2nJ3Y>&`_bDH}qx1mhgb$%RjDvVo4?iamM_-Bx|clRZ`ZgQ3CH{RH|woV)9sk zDsmA##7)XEXWKP-$;IPEK$xNn<_bqe#woF8V3rcNb12fK@AXKOeAGx7BXbI1p&-A3 zq_4K9NQn-0&X69iBcUEYA^;{-=_w7U(;O17y2P?FDO%}Rj}(z;N}?@^#w1#kXbuY= zAL@%jGtr?yj{@a5A&zn|&?LH&Tt6OUJ%f=zv6HM+r7>#KOGtVpgU0Mjed8{WpYg=B-W9Z-y!1G zR|5`XnJ%yx!Alj#n5*iF17`~BgFKS5p`D{wLAD19+Y>4Ziia#QXc(z31WxINX9r@= z?u65(g|?|;FoFukP$VP-oZAuXP4GByXiEPSicQ%;Fa=E^2)3r}6D*RP zQ(q+tF3Frz5gB4e7tG6?qm0m0G9--5dIw~fg5*B?D$w}|#VOe=81yD(B+PaLvpy&r zVEo#h2V2e^B&q4*0#gH2HX|t;f6^ie5n-N1!Sdb%BIkDKbAeEZ)kaoWB<~B1CYD1@ z9+NPeg9k0n?G(mJ(lj4+P|?G{E-~9;oh7A|htxWibhhy`ckH={B1I=EGn^;zODHfE z>?5eGm{QNBLW2~1f(fS3aEm|LVGEQZG|WqkjFvI*nl)ghlJJk|H`M$g2mt zsdDWitZV?rJ4E~|LsblBx~5ZCl-NFFsxhHKd5*ENjtrrJa)u6Kp`6iQ5d{Fv1Ee#HN%0hv zGR}(x%aM|sftfsqb%J*NBS(X4SRBwsDUB-A98BE-fD9Z=Os;64ffgNq0;qsN0LT)I z%3xXy21MW-R=eRja&Z1WsT^q*^cNkF%p%$30FIN796c!^c#BptR+;IZA5Rxfg9B;O zKYi>I4x;zzqG+N`z)rv-D#`KaEw@G~X)A}g&#_NNXc$i$O$`G`a23FhHB>fVgn$64 zl$XsFWBGt4y7l4-qsf&HHD`~J(+PSTR7C5fFH&Zh0zKu5qLQ4>)pC5GJ255#iOWH$3f*lvxDWJb|DyUkMaTS`ikg8e(6AETCuS!Y@ zgUD`H!S_yy%ovB2YFU*bdb*X=aSHn>&{sw5X+=8~{s`0{|6e5nz_LZJQK|^L5Q?$M zB`7nj4)X`12%xjvrR)tW&;b}MfmCzU+E@mIubIV4P#OkcLl?~oV9$w4z@FTlj}|kZ z0!-MFOf``D)5g-$9cWy!EQE8}3hOapp=n##h&uNh_!Olk zd-9kAnxlmrL* z1WlEMERm2UQhhdTeEbaK$*~Y&Hp?RPNBZ$hjILGB|%) z@7pSU#w1UkQby74zk}M~MGVa9paXbj(b>1gm9}Sh5Iy)TRT^krI-6Ag5+~j-S#Iw~5Y#Y3HLT3SAj*Y+^h~X{3o^ zYrpYRIx8w$OiCM*!AfE|IZNABHhV6r@oDE?WB6i6P@}|G8q(zHZnmM2FYwy z&7wriWCiUcyQ zF3>80t0Gh)y{dJuz90z9K!5Z`db--LWUrGAPC&!LuOQPn=K2eRQFCz0(gr~UU+~E} zQw^jFoif3LG=O2g0w^Iz??DXhL-mPsm7)1oN;FE7lw#N#DE2FXL%TnW(Mj~6ov|!c zs4c}Q#!^O)O@{((_@HNx9$~d8SQrXci-OgnV6`ZZmOQ!x(@|hL3QR{4({U(A42c+z zLpg_X4&@xmIh3;~XWeJUs3c0kkSYcnXqA%blClW6e3TV>M8`-xF|0`0j;e$NK^9WA z9{jk9z)ApH;Y@X`9h2+HtsB#8$i4-WuP>z`=gg)sH*+O^XIx$~q zWFvlXQ8a^6B?t8VcT55&tcyXBkqo7m>Ee?0xeA!50p^A1BoOR7Cj(DR`dVvI#a2&V zIxG#>w0LHWA7+B!e*jV#m%#X9vB2BOz$m#i_&tkECGht$kV5=H$WctSDr(FP%L0@x zhy&g(pvYM!+Mw#>kbfYO1Q4ML!(xys>*}GK>MFg~u_TJz8Azi3U}Py?`Rri*M`M8j z2L%G7xZwl~)eUY8Eh)*o{0`BlaQK`w6x;-rx7b2a#e$J>tSWTFj=rFo0o24|1_=Ef zkU$t7oMRGvvg%y%g~Nz}dIfos*l~xf4DVk36nuoJhXKn0oJ_a-zf>W(}knC931qi3j4xk?Jex4q@x+` z1!)W6yCp#glrfxi$LfRN9@f953qM7sL%AtVNbtQ%1Zya>GJEa-eD=e=>d8b+Pj0cBfJPy`~z9I9gyph{3WBqx~^-NU8Kr*+~z zgVkQ?0&g8Hr`&ElLmP1_h?4t#!Mc6Wn6l@0#GI>i9h=s{R}QIODAKV+?yWRHqjjX& z=jkk9B)o%mY3RT#{wk3@W|U@>F{5W1(sX%GyS)eGqx*X_CW1z1ntwU~Qeu5Fg+)=B z&)i~FStTt`WFXmLa?k}rUlIr-II{uO3kaZ7aZ1JzDFc%>A@N29!@fKmluN)cOaMVs zK#-C9n()UZKG&G&mBgcPNs5|9>H#{K+}|EhuxwksijFoHRhD$? zMPyzSLwQPAA8tqx4GE$lL7?~JLziixQwyLhfU@Y^0w{}e7UeAab_hYV#>@ny8c;Gh zXXcqOP9#+#Mxaj*h{Y#`RFPa+l`XijDZC|%(lS8e7!#S&okKz1KRLuwwXE>SLV^7h zViB2vmXah}tSJe;J5wAolX4XCVSK_;7tBg3`=k1orcxFqkQO1Oxje%AN1=x8HEr&7K1f`7SIQV|i6f=|2L{@Yo zKu*4B4!oVNP~|~JFX;pn6T)$qtce1vS1~QCs|jc&AsGsSDqcVP|4x69t%Oqn0Qgo@ AfB*mh literal 179988 zcmV)fK&8JQiwFP!00000|LnbMZyY(2DEeK$qQCVX4;Dy1lFYoY7e~;sE({1Wz|Nlh zs6vfg?oqd`a!YdCdw%_81j%IZnXIxryL;{qM((UkG8lXXgYo>QS3f=degFCJ^wS@Q z$EW+_!~gS>`svmGxY)mbv;TN__~rTU`%lOBhmXr}$0jM2mU7TS5A!%O#m4KbAX`|a z&t!8X~{ydYiLExi_mK;=H(6kzB8yl8Pq=hCq^I5U-+cS(?W0{qhiM7`ubwI`pIv4T_5S12;R+TK4%Zhm zSW5m3Lng)kPtk9)3e9}pKkWW?{POVrDgSzd>&1`VlU;OAbnW4^-5no3e7wJVeloLt z1AqHh3sdFAy7>Q@S;3isqNd~O>%tX|y;`^oqpV;8<;}hA*Z$ugzZ~|jDW04c_Y#8Q z3m*a~4xomU`opFh_(LQCqS;CTAX8)>Iej#L;nPH(mMOfKu6=GqkId={9fT8D)HofAae5=VhUZ z5yoR4ZpeJ>HL?d87AYOcIeI6N6nbwx9_F- zBg4-mw!qVYV0{12#dQ*w8lvIos$tPE9UVwV8FqA->|kM$K`olh?x3#yJ`EE%$`tQW zCX+Jq=%<_;6PT5SCU`P|a$XoYT>+w*K+AcU|Cm2=Vj=SZZyFP5n1JY~u#iO3jIa}E zm<%S!aVg=HHgD2_5OdFT2z}}V3foa(Ix0v<1$I=7WC8{BfXtu}ScGMmvi+-g8Zn)&+qrohuw$$)AN5*h5x1s|4kMCD^P_k zl5hq+z$L~Ls_^vj`1OKb?#vy@-=6p)4R0cm_Q+|GVL!;IbM(4fgIfMR&f*-}&G&7}_;=L3}3y7)50pBQ~Ke}sS2^wIp0Pl7(0zwl`$Pw-=_ z3w1`)T-MilO)tgUa2eq>-ygnRB=>u^zg<}J#xTd1bYU67zs!;>G^k_VfE2;JrjC#A zBT`;-QqqwenHxz$tww(R4sO~b?1E)9OV_L#^Jh`q+HXL4Hw%HF%{0*u5uv^UEX^Mh z*wI}41D$}yB;8^{F(AtRZm!I^!L}NR=)>;Qm*xkhHCtO9_lqs^S01+Ku)7s&DK@1J&`k5Bi{_htisJpOWjw+wKeS$-%I zVdiJvK4X)lbvQZSy@hEhAZG2P$Mf7aK;6DKDPJo zzr75isRF=^bf>C7ETUF2TOsoI@a|{B7my-911I`)`1oPJ`#@hCe&PPvjaavYK7oNh zpC9-4AH%Y;$jkli8NYscFt?g;bdMGlGChFC#s1^*;g_8mI+)Jq-IoWLf`^C0V+4(Y zfa!++?%4Vh=8ju%Z}z*%{>EpWuVGWbeZoBg&#(47Ca;!ls_O=H$1bj(fic-A|Fbz~ zzI=TC`OCwXCv&ve|7=y-9|7`le?)%kpKf>mqYTD=KN^+^us;Fyb^IbOX&WtjD6UZ4 z8R}u-m@*Z{-Yu}5xpC1+H)Sr!T?jsV)(-k{@%iy^cYJtnChYidk+Bb1`IT?P$~hm4 zWfD%-7F`*N947oLDkUt$TU!FUETUn&8{9DAch6^Fv3P6Vu3HlpKI!tCb*46_1R3}G z3R%bGhb+?-`Zzk3 zC5lrlQy(V$m|g9m#W|M-&8%>_XM?0AC;)ncC&du`e-}+ediZ*k63jSa^At%5W?hgfO;$=UYmgGm=5~syBH>G)5*_3kjw?VVxcKa2n!Zk@m*CY{NlR(rgZ&2E^EmL-4Xfbrl9Yl{LK%f*+ z3=0qYRe>Pm!?}GcOjQ?>NX=g7emL&lfBF3J{tgU4@XO)J&OY$YcKU(ErY}PGXK#oEQY|VEp(q0Ppy&4I364zj zA1LWLbUh&pZ>su5snz;zzP1}nn`;s|(#&tzTRJm_(y1|&7+Xfo__^FSvvY@5XE;M= z2=kvn6efqad1;rVxj%Dqf9809=Jx(f&6Wq1;H6{}ZTRdqWPN72x$fJU<@Wv$FR&7^ zSYg*+P4m)XE6pESsdzW$gEc&w;p1S-afEwGp3`}lW!yhM9%fGGiL`)5aCmiIXWv|* zqiL9(9Ut73C$eAH_l9cD0lI0;t9091`w%RvD0uFg9b&t(X#lG)Z70U?PE347>v_XArKj)3tW1-!0qW|Uc{@%ym5q~1xBx6tR0o=p1trU zI)KWHo>`%lIfZ8`(3(8;ibP~&y5Hxy0^n-0mB=al6be7q}fcwl#ih; zAH0c%pUOp;SOo`6I(tztbtQA?toTex^G9}-aJ$NI3rvt@FK}0hY*&e}s|1Gv(XJBN zt`g2F6YP&EcsGZJv!Lrl;HDzR#FPVIh!Si0o-jkiV|!u?iG!^#frJa1QErl@B7YRL zdI2oOaeb}gE)6OYX5_0|Wvko2i8&F+n+9g2*F_QTt}C;0{~mAJmaU=pXq*Xi13<|X zJSN5uewz(4lTZn$mX{|h#FqHyyw)9ya9H`xytZk1O!2i6Ml-oJT-96Kn=x;BEo1L( zt7XLPibcOXjoicGz&w1r`}_Xkmje-!3nJ|nWWtGHn{JpP9!_(e6Vc}(`)t=9Ulft- z415)ikEw7xmxud{`xJ`Kz!O<3xmkcv8S9B<4hP;07x&p++)*&?3^QN3;*&=4vX^F{ za2hY}>)=e`0l_ursUb@bEsT35HyNKfH?q-L!An{_6O6*!|@*Se^L){PpCpS76;vnJp zs9Q=)>>=KL=(3}|0>%5@oNb`%Ltg{SN6&b{0fA;MoV$PD!qm6P$XJN;+)LBG*M&(~9PCFy%Xx^7aCZ@Ti|3ni>yuM!@)OC>n| z5sfsF&J%Hg0J97toex$Q@Q4NyK`THX@#hvIKfu+mXlThg~ZOhiT01%ejo^v!)4SJ5nsFkT*s1U z)|(VXPON{~wM0_(y#)CYd5;H`Rbx?mfmKumw|{i)eZ9U&4F9h=pd$}-iM2rD6wR6~{tpTqHATSs~* ztt0JqlIF?3NJN|(<#pDy!2Bl_aVnOGIF)lJSElRaI5EGWyXH;0BKPQAZ~mruMUFCE zkzLgGzdP<8f87adiT~S9Li=y_$B*xKce|08jav)s%?n@6N2r2ZE#(d^^K~@+-JLy4Alu65=JDR46#CUKmG7|La`GoQGkW; z`Cx!Pr-frs$+0WK%;iKXqi|~{b!^Jri>SUl&ice zH*kGnkEc@8@rTfO8PxcDvEeamfuK}r`g>dO70eB++%y=z6k9I00Hfr#B3Yhmwe=$} zeO))ITL*i7wMZL+jelL-0}5NgL(2YKzOLj2PLLJq)uKX8QsQENcl=~tqXrvr-&-0w3y9GmBwMXR8czBWH@rS~Jyw z3(b^AZq=$?Q&*a0HawxVFLI49!N!OPNtf9Go+^{c=1rvdP(tbg6Ga7uy3P%d^3FHXV$U`CvR=xN*DH{TtdXZ{T!7PClsC25JY@xu?sT7*|Pjo7+Nd2f&X`RBCK9yF$KlD@zllB8orO?QKo>M8{^x~&d0R0a4TZw ze2N5}A`zcDal6}>LRLP1%@iH}I6ORm*?;`_@7S#siH9TjO25o8|NBX;oK1G>f?c@U z+Y;3L>LmrpAy7|dwOR-u6XLBT5xuh55oQq-8UvwkVoD}XHYJlK(67)yVlw3Vlqq98 zowN}gQC}^yyh2r2JYDedv^4?olZp)(Y_HJrJ8uED&n=kvK;Ve!l8AfYHzH>{>SaXh z>&sZ62r#^&XP8nsq5~ewFA-Fz?UXF@s@9)*G<~+|QzwuhAI+fa7wtWX1OhP@GtoCV zNvyJO{NeRNJea|7O%+BwHt+(a))ajo^Y706gIZaE^M`#sLd5CtdUUU2>s!Ws*v-gX z2!lj2j@Gmc9r?WJ5U77?OmMXJK^uSUs9H^pF#1K0%|02k5X{G#R==TRxPE-)Y@}Da z;t*Wr0*o8kWL2Ki2&z}&;z#u9OhXTFsgifE;9bF)oR2Ij z62YK8%sh)s@hDQ7UoZy zKd`^iX!Q>mY@~;gvoqN3Dtm+fV5$~~J7FUso0{g2tW0Smnz-1_=E3~oS_1#4W?C3H z9(M2VKYTD{ha3FIHfDFA={50k;ux+R-}L7fTAgzCAMbV_|Mvc(=6B06Vmt9@d7YYw z1y2<@y+wEL(Yt$>ee3b%KRS2`z8r~BQwZixD*tB>)?SSO`)+^#{u`+K?DYBRT4(6@ z$P;Oip@g-Kc^zKF+=pRSfEfVLk8q^#NQf|=*hvebgS6;ms!qAc?WnTge0jLL2X@1U zP8t`5hP~Em=iR-1#^d5gJj1Dp!712~80~Nlgn6XT}M(zv}GD{UkGoG^s2|J)GTkU%{{h#nA6fXnX?_awnL{)oRHj?cKE4o^?8 z{PGG(0eok6(MNOfAOVRXW=ElNtsq8>@Jzmn!+YeNqmb6QCJ;s1bg=}|A2*=ZZLDWN ziN%^;)b-_aYTrh-ih`}8%vMpoTO|tzPN~9bQ-Pi&hGuy;6ELK3Um!x8xxE;Kunb!! zTh@wWr&aRdou{s;FBfs)0+*;Pc)7nUGV~BN2*5Sc{2Fh_m-U&_Ma-nOJN)jiT~8OJ zSt=$cC{WD`G#I)?WhSOcW#3Jt^nxN_wL+RndDnF-3=ZQNi5iK+Yb4!5r&l-9r4d?y znU3VGOF`5K2JzPyh4C#3LEO=Ex5pshyHE+=a(L~STC-Y?ANF^`lr`^v+kYaW5OiSs zz~Jkjf}h?8w9}y<*AM1L@(m<$<_Ux9Ky1KJb`1)6-N0WodIv;+`%DFUOjR)MF8I^}~+EWZxgR2#bAwvnqnAh)~-$lb`V+|QL1ri@{w3&{F z96oVY5E1y#3P0y7gR`(pz~(gB8x)CM0r-=DSr4?-ATjGH`J-boHJkqN(U{zju6z_8 z5izX^l6NGV{xzW}GNv_zb_h#OV^Sew+8Waf5fNG^yR;w(jgXYu5IP|}wGm*yT}UQj zsg0zNGJUJTdaQ3uo8Tke1T*dch_Zu8Lh?;uwQN-ryV}{yd!31+#NoHrQn@GmNr0*5os$B zFcqKYK90$bES?ha1$_boZ}iCE({-ZrrhPiSF|en%JixI3ynp`t?(S~Dr4_#{O++M< zf+QM;hx1e==FoUT9(-rOJve|UHT>I`PoG~#{j%DAI@fnYnV_7HW%9H`^x^X>?1`IH zd~?!p()=i|$jUkedvq{h?(uHN?RXz|Vt>RPU{tuAZr_xG!5aY)sLa1P9zLe?fbl1I95BNH^t|YNO<9bn$X%(6d4vs3`w8Q6YsaEk zZV~P~hV~GQ)WhBsn)JP4*EG+^h+d?9%RFC?Elp_U~O3(5Vrj#+v5B7Rl6F)>&F(`<%w@UCYEO3&8<$b9nfaT^}*gU_EuK=8| z-fSk908V&sxC|AVov~RiX+hU4r`?-D3SQ^Bx%r-Q-SAFhjQIhhiDz6lpRiIDrpC{O zt7nnx7X4f|gx;qy{No`03xt%*>&OyoE~@-?#+nOt7HbYVkm+58HOG%N2%uAeP4!$G@kCe&5BW1l^ z%#KHNHEZNOKAFt1lbw8xAJyHdWHG08Sig0q1}Z!-}X!DBGL*RT+L?M)h3 zF>6M^M3fjmQnbiRtZXQ~q8WbIR<`HIo#iro(LCW+0OOKw#lT8SWNr7?wW)d`=)W6t zWMg>Jz-2x}p)wsI!`$zLxXbuf?BN-HlkDQ-@%TB2;LX$hGr8L!+uXmkcj_XTb|9+h zHs4tx5u;@a^NJvuYmqv>R(@xeNirC4zd;u_#A-X@QeineHYyM7t0TJQ_9Hu z-CK|%04sRbTHg{S?B+A!0+9(Fxs7kV_H$_BHo5v1_VUS*Jsloo-}2M+mrh)}AQ=-2c2U5irn4l2d zo-$5aYf9K=1*Ltv5oNohL8)r##w2zjT8Jamq?k)xEI{u+_=;Ar17EP+!>^?6u0p@} zGzKFjBkEL3xq>hkp$H5-1rv*6Eap!p_13izB{m;*eBRhckxDj49Z5Fr^eDEj7sd1S zqIkMqlwA&Lh}Mf@q>7#Q84A($GEVV&8RtlzI!;8eIqH%;H7P>GoTDzvQ%9ZMeX%H! zmZmV_UsWk#A>P^&&_@-^Q*pkXI2DSl;?z<3U{ebCAbN-p6%S8mOnF&!Tw$lCFllpP z(&lW^?ABB|p0tTnu>}+qqLZeQ)b2{H!e8Z33_+`v>!GRTx~o|~B|AN`7CLPlYXRF) z2nY7eN3juJ3%?&xJf$l^om_Y=PjbzF{q1vnI>e-Z&ueDy60iK5#uE;CUTCVECHy@+Dl zzb3as7bCD#7G&i~VRWR(gy^J>m)*uHQ0lB?`*7EmT1qcXvoi28Vel_=`Ehn%M)7g^ zLJv+u>xF&|Eg4vtQarNf1_UgPomGYpK!1tGY_aBaH!=vf@ zFi5l|pUrwZJpQq_Q9FY!6--JV;k@rq(JpZTY3f(JXq@S^{+V4H)n_Io?y<03p#*cFXIlGbSc7 zV{1ypXvWZ>qov`P>12qxFd1TQPllLl43U5|&&?4V(h*C!3p!#$MdL44L6WE{F3u%Z zn~IBbH6l)oDk_Q#QBquxMvIyWy$TP@EPSv;t} z`P>Xe3#h*sy3kSVI$J4~9Fr-$TDc5hEkb1*R2Pw-kBxU26AQF<+yWDMfS-2WQd#hAm({v{u>}rD`|dxh54>r{47lE zG%w>|*6&7#)zI#++T3-D_jFi^yu(T^YIGe|D(bKrZHHCZIZ7uTR#TzF4D6*zP94`N zi>&XI-X!EY4`5s9l;(M-v{Mp}32ys1^ja;w~j=^Tr|VU|vB^P+#ym=5I|0X1>e<#w!EAL6ie{y#*dw zj3gk<6=ZyF)pIO`a6E;`4=%_{-6SlKeX*|(kYT*ti5c@;$IWjXYmf@OxB0CxoNeC6 z*O)%rJlfGQKkV?B2b+96okfTj*o(uwg@bRD`9=$eB4ZoJ8{6Vh14c}2j|xjBg;gig z5Q*6)Ib$h}V{GikNp+4A^HYNfMa>47(+$8_d)D0!K(0EaDG=ag>LM!jlG*KNG)3nw zp!Jg17grev{*cDcOXcqJWrKDWF@kszWZ z4FkxTIwbjKhmgP}VN|fHXjXMZi*rY`ILCW2kpZoUU|tJVh6b0~i|m{pH!c8d+`Iv> zF~0(=voSUn^M3asL8fs)n8K!S8nYb6m9~!haa+DY?pt{e8k8sRLG_@fJ+O%^AcLdl zi_H%=yK+KqL1uCvwJm;9`L$*3hTr3X}u}cVLDHJ5-@DsDJ}{^Ev7e4VJI>++G{YU z*@#S4>g*;#+k6^2h&tHRSk}`i%X(@rYqzAea!XpP#PR|_v`JJfiH7oFG8(MLRHWI+ zYJ@N$6=r6dx>}ewS};ZQ9o*<@?aV_@J9BzimfOKOo^&=`Gw*7ocwmx7+)Pf|&E%vF z?_0P?v+kQTYh9(|g=Wf*F(rgI*$tz0$M%acfq}hA;TE}h*_Db9?X6nq@LcF{x{gzJjSuPKD6wmt2o+ME%db;NA`qWvyd+kD*Xi~x zvAldp8RJruNqf~b63&lVrVJ$?ikqFZuwnTUK2&i0#Ey z%6)RSaY5v)_kze-H!EPuO7k}+sANK8oLZg^L2+t%k?PT@<&duDH8z{<$(o^b-bLQc zOG6i(c8PiQ5*yz(Xa#N^o^Fcb)+vhs;?5$0H~+EywulIih`6?2vzrj-mAgx_a7|SY zi(hAV8qUj8nce4$Qz^EmlE*g?UeeOR>k=W#+uI~WoTF74hkz{H@!jT!8v#Dq(M)oA zAn2`$^02grrJEumE_&o9T-N0#C8|+W)lnKCyElkDVS@+_QT;)5QtPek5r}bF7l;*m zyG8M2H^q}DP(0V$!G;ss(2w!4n@t$|*#w8f8j*yH)R2I0saHw6C(Sgha|R8fG6l0a zTsD^Z*fsIvX%jzgP5jtB@%<7B=zLQY%E!$uoomfQZK57-jFc*h#;PMlgb$RQs?y<< zkyEvOIH~4<5Q#*qOGRF;-leJBrIb%Ac1f4Hu%t^U1Lis-re6VFoz6hHp}HJ0G!*u) z8nP2dZyjdt#8FNGV;)lH1}e+sy23KUmT(wpRj*xFux6kpZi@;5%5x8lKz)jr*ZaRU$O>JEdpSpOK z`81wo-r`y2?vrdj;Ut?@We=Y>ls$azRrc_?q3kJP5Oh6!?$Pz|xvuN+8)4!x^1a#~ zF*LM2MdaJk12Oa{d&E#z_JkhUFwxm1M`Qwu3Xz=rC1>I-A}NN-kr(KU7%~}w$Yd5N z77fBEYNCvdCb!mswHuTvF%&g<1|f#l&QN+oLmQ@xI>^2M7TZ0twjlZfrBU}*09Ep* z0}yTIHx8o+Q(UCIlNg08x3z*XAMP{h)0|z;t^XS9?=x> zn0adoY6KDcv~VuoP3kyr8OF=zG$PI@ZV^PHQ{G~-We13mLKxRfXd+~DgIdvt@S+a^ z{%eitAA6L1V%$>lB`yYA+jeYj+a`Z6x`Z|2G+~X{64r>Ou;%EwbTMvG*ReTyj@Q0O zv|#J*4hbTvAJf&+v?5ulM#B4Tfb62?d1NO42^|lk;a6?5iHjO%x`K3md^+IH-ka?7jIYMbh|L1H?=Hb~6vE16quvpL0P@0lXz z+}~<#d~P@nc@O}}q%C0?gK?zAGKsIeL2wOQr^fDV1a83_@Idsup zN3mw7Gc*rxlbG?87DID^;h59ld9Gx!X-4g=mRqhKvgzs(23iih z!DLDz@@U~+6misX-&!P1pW_&JWHx2);t_KkvgzUxK@6D?2A;0FJ{g2v9;Uio9_Aqt z%K)UU>1(XvaO$+9R!7gmQ;XhHb)CgH-Oc2d+GDYhLOLK~64$N-?jRPtp|SR!cV2 zmXJg?g(PbWrW{KEH@OoRMK1I1mQC@=+MF94@6#-Y0N^VVq|f( zo|APKxu2~mk;WYR)=7|#;pjKt$lj(4t10lHy-{(sp5xS3bkQtT)`hN#^IhD)|G7T~GjD-n9&kZS8JU_ox4s{%$&;x`H1&|O%iBzDdYkPMMt|PA9L=3O z8ir|Z$&2P5y_C%Sw>CSlHRbaOQ$9PP(Y&Fil1+Q86lgeHrqqdf>=SyD_2Q)w)9eE6 zP!&4_y|(dj(zk_(*(os_o3c}kviW)&MpJQ(QE#IYV;s6fGcc0lAmW-mbYkPI1ej?L zIvEY_12_pE!AZQ$d)G@2Oi>-zY$`$_q_4$4rPgDggp}Z~J^nhq=vD-uKBoytR?b^W|@~{^pC-`kRMTQZV)jI&EL$sp>MYT3MHo zDckXE=J<&-$NbDOZCMusy0*?)dW{^Lc3WlE#X#{bs%-q4GFF^%9`D~iu_+EX<}5$} zX(yUCCp&j;n~Dx^F5dnn#k*(T!|d^R?tA62q!Zb^cL`&YneY->^I#V}&-PKDQCV0{ zKAwtsNN@1zjXiIxOLD)%CQbv~OM%jx=_ocBgR#$E45v4W5VVs4N zl$eM1%@i7zEAudln(V-p_TZ%lpZhRpb&?@#2L#!%ZbOsZY>2FkEmcR^wj6MICz1%= zCD5*?(#KAe)@ddrBr4oeqa1H#!A24fniPr>c&53>NVzy%HWk5SW@=+o#_dvimU~1J zA_AOKc1V=a5GuEbHl#bGeHc?N67u`SGhEVLt{D)6y#OXYETx`_p=EZ0bO&QPno+6* zA>5=gKJ9Eu8oOrv2_|jQz<`lX_eL#epwDDi%o{kw!`mVayF`+x(#YnJVlN($l6D*u z29_mJsu41)f=|K?1&xb~*~-lPU{5 z^C~3Y;G6J+wxVL8vyuf$(?~? zN-3);U>Ki7)4tSm87@yM#j!u3ZMJznH#$4l?dY8@}#(l~m&%s_MRPba06pbg(g zP+<}2)HHPL(udRIrFfilsz~zVq?amZ$H|6Rb^ACuX&R9zpG8QaraewFsp`}%Ri(#? z7psEmx_Er_D#P>RW7<%)j#D>#mK`5$Kbcf;_oB$)ker4M&e)W#^IpZjm+DW>kitB; zv;S9n^#7XYZUpe1ialXr{bphP2C#lJAX7tzacYXEpg^Z!SQz**aVYWt z$4$8u`Vm3A?Ro_86a2+kJtEpyA7$D`|Molh9~eO0$L#iDaiuO~ZpnRC(|GEeeu@yQ zydJarlmOZro}du@9Rs|_l{Wk%Sd&3C2g>Ow?#y)`$@)8BSVH|9pCst6jlhHXa#V>*kY z$!cN1dP3!}?I>WSCTropqEI<$#W9YD-U^k&{K;<~t}k0@VO}VJdAtg?&JxxMuwk+oQS+pNYk-v|KJh;aUODMW9gam7nr$N1()jLMg|ONuz$cs2GpRCE!)2L84q z5)|(;3Ckiu(QxJE=ygNa%{E6b9&Q^^iN-K5N2+U^enCVf8i>3MgLPd~GK??Np$IYuZ)IYMhf;2B+ou0&I}#KPt=_`; zw8+hJ<2KCO;kVX!t$CicWa^t16Cn~*f2gN+H1(A%oD%AZcR8n?66%R>NG$q8J@GL~ z=rLAr>0f>P2cEcrRzf}TaZS-amO?%8F*%*KvTF0~wAv6fy(9Pz1WT{og?T;LRer&z zfz#{3ceqjz`~2SHSdaX}>)F-{jn_pHR=NQ3)&n>627j+Z(1>=$Pl}6wJy2Gm`}MSKbhS+aVwL;V zHr2&GH28Q&;~OG5h>sqvwn>s9n6mrS_eBFIeB%tko-ynS1SC&rZ=YwHqgb;Kus;vY zP*0q=Yw^Tgs}$;qdxtCz4p|NMVeaC@=F>Q_d26N5T`CBOp5Edji4394zM>4`|9$k%hMe_dl)iR^|gn$n51Yr>tuLJX<*U^{p> z#e0ma^@h_CHr5ox8c(~>Lt;rMJn<9itsRss5P4H*kqwFuL@vf+oF>s1X)Cj&YKIUf z{Yrh7MbjsUOhp_rOEe`Fq`k;Q%|;&*S*)veF!6K@eXJ|S$Hea6^JXui4k7pVIH>P2|)<<^yLCw^x;@jh)IUTfc?t>g^qeR?qmRJjY$KXPU;Wk*71nT#sRI z=qE(4aVm#k?KYhJ43EBNeq|`U=8MdPR`eRNdInZ|E<+Cm25L(-B)TkDU4N2Gm)>%p z#_sEk1L?9VqZ))_r!T`}o^Fo=C-K5)SA&deZa5M^2z-pBHe~U0`)qDPWGtWS&OF!vxyrqE!{l3>^6}f8 zaW=*k`s1@P8*7bk`?Sk)Cde(HcG(V3bE;1}O{Z|8PdiPiQ1fYDk?s!AP??V2yaOitKJrk9 z822Xt!pQVd^^Gfb$wNJjZr>Z9KMH^nW6|sLj}iQ%nx_VEv9ay5bQoO`T!PoIf#74? ztL&nCV$c8?2Mv(Da#jH~ZLsw$nbc_!1AN4FpHxZ@g^25VD@1m8NE8gyAH#mBc=Z5# zv|}RS(f7>XMzp;)>Fn;;D?Rn|ul*%ZkGXtUZu!N_e!qB`(zq_ac$o?Ox&z{`QR;ny zfhkWg@Pa{XFz7<;x89RrpcJa1H>N@{_)C2?Lmbd5Fn_vJ&td(G3>`E{&o|<4_ z+)6Mo_9hsx9YAftxRqdF>`gF$Ktqh+EWv>46+N%(W%lc(l3;)r6AYw`8otYLIX%HZ z4&%fG1FAQ{fG|ZxT=NAI45%!@fa*;!;ATYm1Ow*bZGqZt(eqwqmO$zjFZ~S@#j#hX z1+ZDER>NOZrF zI1J<#x9PJmWq}{NPc)x}$p_OPhPRg){{0u$*#4p~nbl^FtW>8w_S$Bwz4JLq1_^Oo zoIuvJ=oP;4L9W+mmbawDZJvr_C#7=(|7f<*{X^*cgd)V}<1UClU#;T%&QDTi1 z3VFZ(mA=NRzt+kwLZ^inn+Q8eb*-r+@3l4V%TrkQ+ZM<~4R>k~Q=7^1^aq3o#CguBdvqDX6Jwm5LedZMq-S#JN66iFqi9bBnnj zBGpWP%Eoa>U~eVo?9Sr=NwaZGM$Dh>vqbxqF%Go^-KVABqdB?@;@qv+jolg{jw-4M zw(5~~$}CEu?6S$HJ@kemqpk!9?p~;AnBK0{i5oHr5ZrW+sRamLEB6jSsL^d2RUiXn zGv|9w2F5W-#L=Ip&iclTVUUujdHI@a{3}EjdlEUK3#3NmuyjdgjxEn+If}RJI~|bA?SC5{Fa?~-g$Ro&L;Bq`lJ9PreYkcO5+W~eN`{o^*pt*GrBAR@%w!Q6iFCV#NX1){A=M??Qm2Zx z)Rt(gHx-cWfRzm8{(OmKsNbIt41QM0P;UIwO|!l2j5mE$nW=42s?&51?34^O{r|pG zGSqGP!qJK*s<|QbvRhPU-hSN%F@DUwx1V{)Btx>-a)P6sOjPp}Z-bgU$&`r-dd*|j zeD?lAI1NBRi((wJEv)S3GB2P5j!xL)@LR<_Wy#R5?eB}2TmkEZMV{PI_UTyGk-6^Z~IVqxm||ccH6IThW!>ebuk8NbcNnp+ycY81Oj& zvHn;E1YH-vu<&Ys|M18D@qYjC{4?9%E{^us%<-^s z+nSHp#b#iJmCzPrq-^jj%r@#Z6InQ8s2PZ?yO;5fP0}!LQVv?^VID`O7zD~$X~pj0 zxO;!NyT>K^>HhKY__(M=|6VQupA4zFGW2rY6)Yx9vOza&!2KDf`2OMj;oI)x@t6C% z&~>%=C4;f(X_*-4)AQjo#{1uy(F^rE+NOA4?#| z`TPvi;r{d2f1Mk6#YJ=V42WFfgOhp`YF%n`pR}6_nxs@TEDA1117y0)B6uIQEP&P2h|QvG4#x zSiq+1;T^jU)2->F`6HhMeKddJ6PxLy`6Hi3`e^>hCq^I5U-+cS(?W0{BV>lcbS2QO zHG1vH@@dAK?H@a~{{tTGcjj6S55UX*VQvn8?3mR|Ly=qm`eOh2Um-kPOTkBSF?_^$`-%y zr%BwcyhAXep3Bq_3f!d*!oR{8l}aVEXm-WT4)rmw;-#P7QB;l+NsN=-wTMR!YdrDe8Hx*l3_}a zYcv;^JiGtw`~lb+fwX%p9iH-rZgn#sqO=8A+avv<3p+PS0t2ONVcFQcY>a;@SHRPT7)f(~z&88a(OeI{9^RWX!E8_{VEu1>A$Qk?x^g9erWpBlOTOLuZ%|0sYKREL z>`dEQ9gTe%6)1qY3FTwDOKx5QfJEPQ>HFc^-QR)!QiKKVnV<~>Sb^vP`c+~CIA_%8 z9)w1fVz+kadk!7Gap)9|O5S(q@aWK~oR&N;Vi%Mr+R%DfO_*8LuIn&P@Y1besJ}9H z@dqENANG^^bKr)(UkhAC?U0p0Thc2)6}Ln_gqBA5a{whg+uqHM9hSyvm9C24VU^{9 zgHk-Lc%@)+Jn@Wrj%QI%b;<$NDBNg5*9kN_vW`)|G6FqjM^s^bH_s^ErodT~8U401 z8kYDJh_x*Pi)T7}M);4P5&q&clEUvFP=0Y$;RP2*+4y2WG`Puy6G4Vj{sx>9D@=6f zuQHNdZjwN#K%@bZMe+lgoc&PxvP`A1Wk;kTt?;E2OMu*!fo%2-fP=hV;reH;vTy;M zQ<;Fd(?*wmrpA^`06!DKFc+q|?6AWWa{jQxAHJ7j43C=1u+n1`YDM42{5y8kT)5fH z$vxLz{!Ilymb@R`dqJ53%qNE|0b~Uvr3DU`x$a_TZs03c=MyC43kCTE1v%yzgsv(` z0*J5V4Zd*IIAk&;)i{}?Aw{Ew;m`VtYDQt2pUl+Gcx zC?WVjZMS!W|G)&80fB#T*pz~F?_q$Hx`u-C-Ja}%*x>`R&R^Tgu+|4snPcVQ=Hzv; zuyMM94Qj`766tlYcfO2e^HmVOBgT$l9!wOh;-lr`N09BIPY4h+d z7P7rUx!RcnVGxKzljWPN5>yOhiZ!b3kLGAw#3DC>li?CP;_aRImzMW>JZemk@h4YC z=I@|5GV5)Bclh}9_3wwrLs}xpI2cdkM>@2kR}L(>ize{kUsf()!QJlNt@o9A{m1>o zFCcY$5`){HuoI1C! zcZ_1ui$sgQuT=Ha1E$foC8D%_KWcP&bOUg!D4Z;mDwntHH@W{d?!T#G$LjR13JeJ8 zH`SnF8#PM=juMSpeZBuS?Z3^Zb)yCiDC!EXLZUWm7U>ry2epovnfhkt|666PHON&P zprKO@3ba|bK%jazxnUW;nZx{>IhDUzta z2Wo?HRIw1kyolGzQQzT>;UyON5pg+o@_}Ii9#K-#*p9Zqaq8OY(Zz<ndiJtD)D1x_x7_IYNgf2Y@#_KAo{snWOjv2^&zvI?Op-56wuNwapA)jV6A_xz(d18x}S%d{{7rTWeO1);!$&$Bjeh3gxwd zKF;azT&@K?$#EtTcvWbGz$S3L&F)`z%2dD zMD2q24He+Z12ipnF?XTXnv{~-E*L1*q+&>jfS;V!2Ihvd;O5*x`1*{^*##bObKosf zviro0Aw(<74x$iV;Nc8Ws3ZbqQ>6==h%^LAmfT+{*;Nx8?%Yav=E@?rab- zhsaRuE0$uzis;DL_CPWZa3@hi==M$XAwg{(Ta}RB11kdW`UbEwDi+AQCqFhR<;a}Oq{pQT)oOlBVUh9 zp1E{nbL~W5!?WacTfM@#Q)hD&k`koCVxjxp9KwcJe}nyQW2jWmE|i~2c?QvHqJThC zBrNLV2^>WXBU&*s+ntVDj4=Trtb_Tq9&oa{m$!O-WR^u|Egs!`R*Qg)^^4$5=7B>| z3sAW(cWy3O8&g27JXC~xhzBDa>~<}r+=G-E_W%V6bCAG;e?_@~1$S!;*lkfg>;=e_ z%;jB_S7?>)R){GAgl*{n?jUJZ2lo(ad1?!|uiS%ya`MRl3&~!YSWPGo6i)I*6c!pe z8SE%#Jpr%;S9{I|DmA9Z>?^bk{XXi{rZVCj)@X~$7@WVG%EU0zt@8%cfvt3$&=WC* zB`?lAePJ0`8GoCmn?2o6PgVkDJNNzcL~hfQcrb{mvo6t-#Cpn&ASD+GJos0Y3s`Ws zwt!v8>K{cu)$8=Jp1ZKuk?iCeCJ--j{VGaPZNWaOl9K5>k zDw_!bBG2GAKqsfM)*`3(skFe%5Vry;UQ>kQeuNaEXYm%RbkCO{I@nj}xUeaMy~Sb$ zF|4%mb87l$L7psz2k(Q|-)-V#ny%=jsd3`@7@lo2hE0CAou%zxc1E9WL5JwP05T^C z&NHpvORBHDKwIXzs*{D{vZ$C!Gg)?H-Jv8x4be!HL=EA!WgFB>iLS?7^52vY2mQwj zNr(+Vl=WJGy%OS3i%N*QWx&IxsJlI@?WOL(TM2Ges@4x75x$)v*7WMWieb`Zg_=z} ztg28`f3HlF2d!aCqRCMB3KGq3j-xKooC*TX`8;{%+!ANbM4DMPq}t}dhb9M3&+;yD z;}6w;crjqqz?q`N6-IKOJzH>Im+ezNm@lvww2RQyyt=QF_?Hp|7UUUCJ~+sZUr6F+ z09x7Ea0(wBYJCSE40mE{E?T1AR{Jtr8Cy*|vms*>F(3TG>mCJD-?{E%7%#Q%S9N!D z-Lw96ziy=KPu(j^1vLK$yg36k^ z?UP6}Pa=_>L>qD(wkhIkuk9YCR@}guG8&!;0KJ&v#|x2#l>u%_WT+7NMIBrQ}js^nYGsUNn|#pvk>tUPokzRfBhsVwYAXS}{toe+SpqiGMVlrfBg80X<$RW1cByU{b z+Qh{av0kvSXV0Y5GkDCYc$MF?E!!uQk(3JVdHj6Eq zg~tV1K61MLYW}q|Ays_dnK#ysgp@}NrQI2jAWYi%aRo2QbK)H=qNCTll%i#u*`*&I zkLD$bb?PFZauWaaXCDhH4r5Su;mk|QdJxuP;9R-?<7D~ihjV;mYp$_`mVLO0f=b)7 z?Hugh>_6cyajU@3qn$wd5m?spK56`pQsfm>1}?gR|LW*2Nk z@-&B-)y*5{Fk)l>vKGde39M{@A#b(8z39rW!Ga`w(p9kYW}P z{uph!oEYp*W_ExQoVl8Kb(gU+Zf7G0MiuwowF>TOHEh-ZaC3sb%cExQ@QsCHT8Vzn zu1dx1Hn?ZkhR4Ttx9d1c2=E=W8!)1_2)s+HDS1JwDaYzi?xgZ#PHh!c7|}7dqoZF| zB5t?<^XFB~ ziva~f{DkMHwIEjkV_m{n2fWHb5All+Z}`f3DV=yiaYw<10s><2`}LJASg@Uoi;#oJ z0**;6zE0jb&};8_4m5T6iHca5tMkwfLS9k2=E)2yNmrvaC>&g9rdIe*Gb)AnpWuXC zE|{=^oHA5%FGIy&kP*B}6V05SoI{6;HXmjhlx`eIwi531lcd}N)JkLSK|t(mUm#l7RcF9giPAzf1G;OefpPn1*HE%QL~Ok>JF@zk6{2 z8keV^t$;}_o&|h^`3ORQLE3ow12=ypr2fF&d$WLM8_eJQ7qTW?;^SogR%wS1KxbcL zki1#ZGy;4M(I)2szTSj75}?wFW=VP5IILX~!GGossR7n0c|X|qQxXku^3eb}i8N+P z0kV^g1_*K^j#08_vKzIOS--6WI@2=O66lyu*D>dVsWws(&WB2-j*T=F0LEtU zDx{~`tQ)oOYc;cfS>$Pd;FNuTu84@)2iq9;z|k)sf~diN;OG0D+`q@;S^2W$F6M{& z2Q{3Zt-$@P? z()WsBo$TTB&^v$BH;0||j63TX_;Vy)<&lquJ{$Y*82mF)e1n1be+@DJHElFV;&`ky zn1gj?DRgcs49zr>~snO;@xyYSXTe; z*Goca^W`KXhD4B_o;6Xml%D~tBg9zRaw}wT``L~ij}u&EM@r|p6eW8@IF$`iT=HYa zEUY7ZCK=qCb5@>o-ZSZZbJEY;o}07ITGP%>pZ9piSh^J0d269K^Sn0mY@6DhxduQj zIui^mw>v}}qAfK=RPA3PGG;)~pUUZ5r$`aS7-*B;+mIsfcX{p|wz|=~LgtOKXnLX7 z(Y@BB#Lr zW1hb?>~Qg3!e)Q3fTwq~>{>Czq+wjt+D?)SVcWu0Do3d?RqlM3_#Jyk%dQn^+dAD2 zj8FM~U|cme1VD*@ueCy3znM#pyKg;V8gVALy#o0DVu=P(SeNNqzg0K}+k%T1z|oa+ zKXq+NM8*g)XYj{FGdY+@vV#e)@|JWyMj3kN-i#@-!7Tdf`0(N5{oV7WAtV3(bpN!z z*xelVj}M3U79s#4N=|=hU0m%Sj?X)@aqgc!-0%PP@v#5U0s8-a1Q}iJXj<5~9!Zyb zkkOcnqG8mY4_0h`cydRWornbtL1Amc*=$qAB%e>G^l7eZfD&hW5NE;d7@Pn7aR0oJ zbRa54L|2oyn{THLoNf=?8P~B(v#(Qpvw=GUZvT2+miq8arwz~49-fo67{%e4vf()c zZpZNa>j8rnE@tzm=ir%QK_ookRFJ&E%Rw%6(+EoBsMu)-DKb(@D)mZ9gLnzvrest4 z{D@;z(sVI(Qq9Tw?91=`@ z3e;wUU^Ijm6I;3K>{w>XO?=I3MU%s?bxvj&jRQFe*RzP>m;8)k>p@TYl=4ztCze~{ zSU+NM+z)vUP@u+0;9pjOL!UuIhGGI|JSIewbqU91NId`umGHv~-kE`_Gz#hN#s4T#BUmp_D%T;dsG zc{1B>IzV%-pNC8}?fQ(v;?L|cDip(gdOm#K{T2Q(G%*0^YCgi=oElHN_pu}4 zQtjPrHNE@6OshJLxlnE9;tUyIfoWA4b8!aTGniJLaXAg9_5aUYSqIZPpEf*mdw5Q# zoTcHJv*9@d?x{>`l>`8F*?&V_05TOCY^_YGqy2mgrFMg*ExshkH(eEb9O`~~Bov?Q zaU3y?dRjH7I*u3@eKCKQd)0M9{dm|v9Uo{(KV%l8f5q>XMfqm!|8|p1z&(aS(0y$g z&`Ga6z%*es%4|`!TJ)TL^Q;@y$NehcCm1!Q|{}wbbYeI~ch?1QhW(&Pcr}ktnXeTnp1$Qo9PSg{jbj z4lS(ptlh*a4}TMW*%o|G9aCp^6&(9N6k1s0@nA73y`B@3Z#$6imRxLy(=|H|urFXI zID?z0tD(eH)t1}OQEh_ZMTyxojT$Dd0pYw_RVKTQ;$=tQ+Z)#IEF8#q|lUE2wF zA9Ckw(nC|j-&Q*BN|?K>0dW=Xodgn9j=A7u7*O5F%(rV8l}ej;!&$vpuYBC@zkDWu zrJzNuP(LasEOj_*XB72YOxnGA9>j_k)h-!-=t0T6W81@V;R(IjEAfxOz+}&xT-AR2((|W0v3=1Ayv-&snF?FrHkyjt@0yC+^QU6H z=EA8@Zn}85(j1|~L~p)$ZdI)zPPS8brb%@Zn~Le8sMyaGO>lTmnX1j9nU_q)sdL5>nRoxZ zsCRhaC@bJ!wF&?j%)f&6f5QkM6JUv)0 z$9>lpxR^TEMgBgBpm|D(UQ7hNiJRRq+oF0d{t=@3O>_mBjB|Apn~lh8BGPao_(mlw zSSMm0o_Y@DVxD+us+`7`w}@Dr_77LCYM-`TRknzMqKjLkaOz`28^=1=*SS68OC6WU zKh<1Ws9(j}Px{?dJ(Fi^L4~|oXMn}AoT`2Cqd8q~wttS0-L}s*+h9WB>T7B?J%V zA=bk?Sm3`2rr5+gU4(<%zL2Yv!-}zx=}{%t>_L>q3qh*b0uWp}4i1vYbVb=Qo^3nE zGwK-6%8v1@;26&`$M_s(o(MCP*mR2rGeY7F?<3paW7bD! z#vJkci`O683UmSP`AUNj(*ah#)nNy3`OfsRHO$3<*d3SrkX zLm_y}D+L=ufKI17xjNmg>Je;k^@pf>lx@$TRd1#MOA+Md||eEmwpVMqu&=F45j zr|a@{85d=c$YIZ&uu0(OB5)f`F6txtq&6yD?lIsTpapT~F8>_ulB>-cOtKw$lH5=)bzB~bnm$F_P9aQ(h3`JJ6Rcn9TF5eq+7(a%~@~Te4}mGo^Z!EqEE}l(;}7=Pv3}Ett_Oh?Ls}vRd%^;_BY*+v(@%B4Rog2Kh3G zN$K-)1!<{b))@a?zQUA6{u!ny+gOaUGLqT!lMvMTv>7IdhQOKbKy6p)A_UXudNCdEZ>8 zEOS3)0rR9rvv!Hkj+LCPY9g**9ek)?aq3PkOG9&3q6vZ0;Q+1kEnu`*V_ZVWsv=(m z28}%p6i+|WfGING!N}E`nYx;pyPB~9pvH8p$kn&e1}mPUqz!i&7#yiH57*#8lV8ah z>*ZG%YcMR)A~i)tOjwuHasc5qw;J{!0fC)K!Bz$LOLG6f-uB+v80+1VrYJheCjHe} ze_OZnVt;j^zv&uI`9Q|grBPx8887lv$kO>miqf@s+w(Bm>*)xu)16!5q8TqIQ7rk(6m2Qc*4MKq%N0#n_ z*~XFe%i!8stJ4(B_S+)DJR-~rcf^pbTUk5+^K~l*4{Ny2Za_?yr&4xJrQDuMsp9s? zC7rf6mdH@nUUvU3v^QGWJt!Nzj7usnL{xS(<(Q3TJl{xjQ!w=JHjU z9L&k!Wg?JF>fF6QRR8`MNAssZ3RCGUxo$T)tBONh?X23QcdDD-seXFrIy->8hpB9L zBr+$ax;cbyae&8xSkI}95bExU)~8G~ta7m2vkDn_xW23}a@{rW`m}l1oAa)_=UtyN z?=4v>)0_MGqA^ZA!e%zrrOl;rD#;$;b&rgaP21;^o*Kh3^~jdlR2ME6dsGm|!RwSk zEBB}_btFAPNiv%XqGZsUr4vwWXs!q)qlSn%`IMbC^VTuu&KfWs4&o-%~$3vYTjDYij3!;D-6h58TrUrLS;9ov)3rj^15|` z^Pz{h@!=%m#)nOv<ce^Q zI7@nDt=F^54bQ|9WfEzsIwklpv`8f9mGdr88O}4&0M8^9DHaW~$ZG3WLMPyq#B`TtOON-tujRRvw zVy<6-IFY@ydRv^`dT$Gt^Q5=kMkS*6`Vo4IcOWja8+%GcWw+6fY*_u2kqDjwX_hGf z*FD$rq`CH6W%gTT&Ln;UfVR@VqulTA%j2V&`~CaGaH%P%Ow}ix$Y}C*u&--7RfCxr zU?KZ-1z_Ikxx3S;E{PN2PpRGIYopzPg-f}VE>ZN zYAJPe8L8Iv=SUToKxR8P))J6^OtmLb>MJYNeQog9uk#OSw|Pw-kQFwOl`ylcSmk zpLGUM+tQy{^ZPihUN!HG^Ihc)yBgkgK=r^6dTtsXtCn+Pq%cU!780= zGte4TfAE-D*tptxguz1>4_0aPELv!Y5g-x_ry(ICUZh3x@ z#N>(p7S3{upzV^V#WLNw;M*0?a>-dD_V`-y0sedceAxdfu{}|=UyzIRe?k^U^QZ6W zrX+>n8{+Z?pQ^yFolDsjrhqIRWkH4SJjrA_UM=f3a21REv$FA$$#~5L9jPf5uN3P; zmVjAZ%3_DHxVbTA3ZzWPWnLgV6X(q{v1wID&P2%4IomUF&dx;d=`i~Zk&k;FFU`~naI1(#FTN$9msH~&pi_hpt{e*syjRHI5D}Y9*=F)q!gXm zbHh!wX}GEChMV0Q;m8QQY+H-=&B1W$SThdG1|f{z07?Ff~tBi+X*{ zPW@}PZqDsccj&qWq(#BDeQO%#&1snH(@;0m&JCxl(~t^!=Bkvh(^ff>;BPBN=gf|% zrVH)S7;I}o3+-)LV4+cYCU>A#;Vo^!?5v$2-FCy+>4hw|6Ql7>7u%uR$9Cu?S758& zv;%n|qwct?ti^*kU0q!*C9~?dyS#g@c<)?Ug$(0E!wisj`Bjt^mG$0k zy1VmUe|OgMh_3Y3+5w8p)+*f|HAm?J5)J>}G7=;wamEBwv+%8kPnv7*AMUM(T@1OJ z9e7iPK`p~K<@HP?Cc|~jWl4!ZO~l(s$$pIzAl0Q;p=RMt6$Z5oKYd8*>df+x6cm+Z zqzXEzQ-{RbtE*J6LM_ev^eP63w_H~lcgi+&m@Qo*J3)tenU3X#4)bJXENdz@+sasK z5Z}|0ta|?%Bsia@;$mZ;ii@??r@K@pyhcSGiRub|lvG#Fpcx;6>WUiaw^UalqUu<` z+Ee5FZLJh*YDTxUQq-8fW*y%rfn$n;Gk}foTGL9IFK+x)T`L7H1?x$r+FB{|-2?2_ zO0ga#=$6`tx&nNs28lJJ1DvKo0zZPduN@jBsMOXVnG$}Odo)OGuL7q*N_9fi!QcgS zLe#0CS0@B621T6^(=I8(mQDytlypMOOGwPabxBvkn#$jkbtTld;U#q?Oe^qVsOn0< zzrpHC;Hg7b!t{B%66y=_0=g3FG?D2_;)0t5vniV+1asoxd||^(*Hjkfi(5BSU1b3- z94o<`+A0h4-2?1aS+I6gh$6wvbOO{X<2%(0)RW`;2qs5=kGQWr1aqnq%ypPO!JMXR zA4kz87bu5O4BDG4mSV_j)UHxk8z;s)+>WbgbvAKi!fnW=iUC{+38005VSmgU)> z11q1W53(VuDR=Jx9lO&a_@Q{(yU^D9SCC+g9#WEJA?U(h#2C z=DT%l%m6R5P_65M%0_!u{%RN=%w3no_x1x=W$$!o3nD6eE|kQ;hTPZo)MoKTXq~%F zRyS(Iuom|2#Y=7QavOlr%0RMW7gsE^+f};APUO?xP&^~Rq+j3Dcec@a*3o;m-Tl)O zmlpcZS_7~%_W~?rfAIM0nzt&3F+oYY{^!W(@pU3XjepXNyCfCGkfj6+W!y0Mga+#e z`$Bsu4M>OxrFeyT6AYoiDF(Lm*2{rjp?v7onk7N9EZ?kL?S6fkkS;{Z2qkk-MN`cv z1+9Q|4BQ_UfMp-O$7~Hgm!(bV5YxFWTItd~M7N^>kvusUqQU40wo_Q%G5h@-;K1WNx>pX3nX> zXR25;UWOBj`a;u>)E0$L93M)?g4t5y_;Dj~ytHi0s8(t-YOEIJO3{IdNplS< zsB9~aj)^H2A;6$CCMS{;)PkQ*+BD8qPzHxkNT9AnOoP`SNMe=n#kehO0f>yms?{69 zmysR~`?Hn&HJ@xX=aa4GbxKv7+$Z{C{;Y;YrTJ}=eD$uF9@h0~fAa_v&Gs(gx#_=- z4h#E;34pZE^R9(0XY0!UkG*&6jU+b`M&J8a?3?$5Da3mzcei=3UI*J4y4PkBaQ(gGiIzox*~oyEFxQ@9&7JRz(7I0F8ZiFyr*+s_U6t zA5P9$a&5W zTT;*|`bwuf7itA;B;p{ouJm&8Nq(BkQ#P-#9BSgDcoMX7OV8(hD&ZrH(#TN)SJwlp3c(&jBq z-N8j$%+js|TgNZZz~{rqkN?7R)BgJY6Cf9aU0{~bff>cPDcCK;4a=CkVPeL_#hR+7 z#R`>DYfd%czD^waKewr`9PpLhIN*m$t`%mfFf9(n7ROYJe_kB2-$de&LYin(O}u;y zmuseNO=qHnv0i6be|%@s_e@6kq$LBj+k9}t{K#5+rC+U((a2?ysk})z`i}CiU{&?{ z1R3j0cPEzaT64hJ1~D@WyQNvs1$J~6cE`-ZZu>0Ex*EH*u+XbtjEHa4J%3MPb!{}q`M8sbiuz%hzK24+!6y$e`Qq~1jX z>~z8W)m&b{@x*sA-^~dszt1K$B7JvMVTk56BVA_DR4X#miaJf%7fM85&-(XA*!&>^AWDmlx*;f^Ss(p28(TpYS{d#{YB1;CESw!X3upDSV9kT(UFy?MPyaGTHe}bcux3@%9rRv# z-|b;0yKANUT`v36!_6-leOeuWJD`OOfGbRq{dVdmIWLS378U$TdJQIFq+d2OK>9Q_ z7Z!Q%Z$2D8e|&oL1TQaZk=Cq2T5~MY(f}?lKLmsL0}Sv^N2*!95BXMMm6ZDb3HUWy-5je-|o44R>H_%rt_=I|N6r| zolm-M3E~7F_G#*^gMc)490WWlnG1q_w^DWqneE5hyMNxi-+#P)eA<(Xoj?KXm6}ka zra~CG@@59Ko%IhlhuN&UqP2}??7Ee$Kz=;3^`!~UA#Yp5f32sie8X9P^h&D#8bexW zIJ<}nWVh8U&8NF#p=_N-Hmz6boQ8m)<(HzM7ai16%h{L&oBCuJVL#vf-D(r#J!1u9 z!(`ZHw9hrlA+7ZBdp@hFRuN!E!2p0F^#ZE8(uL3;#w-KUtWq8v_8^Bk+o*kl6f>%bkP=19(r{jIG;irE@yKEbZ8gJ?BWT$n3 z-0A|k)de!D%5(K4-#o2<^1WYqJgvY1(}nOtFxBm(PcpuR$4gSrntg?MZpRSMK3Q37 zE$`isEJO|BhIvBpQjZ$M(J$1j%sif{JBxTVd2h7t*;tWrHPgO{7AIOjqC+Oi$Djz& z33drdY^Qq_Djz#)?8joD_}?a1M8n*vBJZB?2$MXZ!9nB^&m*7j;3)du{ByX+^7rW) zh|X!G-Z6fhm}#;dL-aMi((`_{pKFLB9!lxbZA3s_v`~El?)sR3x-MCW&R{o_3EtpR zBRl#<+cRmZ33xD%s75GckJj2QqME*;vp1%wCMZIuGP001uM<==`XmtoJqrvAy&@Xs zP8C^8HSBQD6y4-9Gca`_GqFsD4NE!Jlro^4IaUJ}aHM0eVAk%2+6K~aU2XK}PiHj2 z(wRWw)m}Wo^m3q2-bn;S=mlW#GK#dysC!oOD__r7I z7E$D7DAPpnZm(kd-wwcR7=A=I|^I&+_ox zuIqD#A0ad}4Aq3tK~gLqgLFO&_$PA=l9IZ>+2i#X zpQBm%7}O?oIBkX_OHN@_Bt*AN?wOW{JWlTV=Boo<+6afWA z$gFC(5dpQKMTh}SsUrl6|K+(N8s<(Fd65&5?3YeNt#u8|orti&Ohql99flJb3QsTj z!8AL`FC_GZI&>LmqRPrECzt$yn2qEYB6gt;#k#WVT7UB7+|vku@2d*M_3YK|l)$2i zdAJBw+G!pxbVr4Vm!J@2DF~igf7XWoEJr#eO9o!y zSaL|W3w0<}>n>*kg1-Pu78YDIa|?Cov}(pVUrO*Uyj?P@>6*fI3NnKrgg7tt_xs>q3%Etkv8*2E3Q zOr=R?%dNhaXYvW0b|rC1R#Mohg*v3mUckUfY_L0Qudo`i7#7M#7~a8OHyg~s?~5z_ zCVvq-iJn852LAA0sR7AJv=orM(C>Nho}2d#+9{Lw4K}PSm#H-_yzw+W@S?kB7v~v` zss5}Q=sWmxR)+9fH2`m_ktRf^LE#ukUweK*&8?Y<3jgli7PZFIHf(CyYLfx%-6m~@ zZSZtTjF%rmropTM#>UQAYe3dtkoYyCT_5~U0Sovo_IeATtI1k_emeZ~W>5BvH;2dj zhbQ=4#Ff)5@#bLEh8%}Jp%?$gUa;-mNcW>K zvD};30;O=jSR4i|IEMyd&}4*-b`v(bHPc=wTxg=tBV4l=if|qwyp1QmcBuU2hssYp z)OUxUZh&b$9du}`4|bVP_N+fawU`Sa=~`(7GiB&4G)a6DXIA2wxMb%!YQ}OiG3%0Z zckySyj-m85zBZY-LQXfK62gsSK3TU_+ z56K-z^^bImq-iqp39d_Ak2eoi>v*(}f%C|)9s?rsFqq4rkCX3SAUyYieS2hou3^PK zJrZ|^Ht38kF!j18y({V4_x8q~vuD=H`>3ul+wzy&ryus(dDdaUPv@R2JK2C27$@1p z1aW@WgXz3ZRB^i>O$3m6D;NU@o29YL0itWLywXsfc8k44zcyO%>sZa$DgC@mj6rYg zYy?r5#B4{*c*#=SPdj8IIg?8Q=o*hEcC)&&nmo7pLA;wt5SB7+Z+6+Ccn~j!ha(+A zNX+gT+SI!{p>}Z%$e5obqEm(lD=Wbz>yp`dSKNVFsHNd_Ooi zkc*5s(x!bu!=+HFq>YU}T50iQJ0J3T-Uj&C;1jzbYaQ#NmL5LakmzQnolQ0UI36I? zFoQpBy}jPzyD2argdUq(qH(;tg&$n52Fxi#aN`G&9mEzdZ3Lh9(>~wiF79`QOe_q5 zgkD(#FBwP@z_}ojabyQX*QTx?=?zBx%y@=r&u(b5d}t@$1#4L`%Da_kdVj(zA+ z5&%^ZnR7)n%$+WR0}1ZgXgKMfM)&IblIi`}MmBNqvP&2981g2`Hrk*P<`&+}y#$Ni zyhUkI%enG(!D488Bl=PMz1ieLdDl_%LHfl8Xh);E`Ei&fN$sMrTB)>6=_bvdAKykkSiso!%u84-YJD6zb@J|pO%rFLpvtc$l8>yk+ zSfqZDqW;MDL>D_=JgYh=Z9a8MA8LS!@{XVytH&qd$AphT3-%F}0Tv8o8C>G3*a45KM>Nh(LLx(-)>V0t`6bJoCEW|UxmqI&n(G`pCd0(3HA%JD7 zSeZE+)etb7h-%22D5{|;=&v2VxOT7)mSvpjBusSD?GJ5nY0TSs3XT*p9mp{6sU;=J zJUVb|)i{(I*LjZ)MxPF3c_s2*+TG;Gq>%j>1JP0^KR4l1?gQUDb|~!bQs^UC)QdWjqfNMuH!rQ7}1eLckC}r zTu8tD^%*{;V8j51UI9rVCRpWLAmXu427%udKy&VcZ}Gtozi(+QVaHTc?bOF--4&YN zLNGmdfJQcuxf2&;x-tAE7GjeSj1*!vm}YWnI+*N!i>Z>Hnr&6>)@^49CNElhjS zDErm&r0W&|q7d3k_;Z)g@Ecc5&x1RAc;jEnOEfjh-`T6rF1DwybT~jqk;lM}ayYPA zB6OEOv$@-xu+*7a?qRMUu73c|_IUF#2m_^|_^itsZJxW>k@Oim@z=Qri>{ffR2W!f zRTC`lR5;oqTB0WIDM}=|PsWoO{VS}-K!T^sxsKMZ-D+t=FBkt4z3>uR3U|j|eD&rp z7^3sWJ0w>O`|#t&ih&gucEPSIlLaajhj|B}eH1MJpzA@3uy(`4GPN zYfLQ$gVW)f7Y;chA>`uQ=$K;)26W7=0P1KbIeRKwp_MQPa#EfN4NtD~awUi5(D!E% zKlY+puEMIzSY)MY%s@5YU>6X~#5JFft2GRlSl1G+s~tgR3{a;Gr;p{nrq=u7BH@d; zA7PA8T~xQmb#(WDDTgj{tC%v+GiBZ!izSxE5_7olPov%!t203@$|9C@(Y%{NrK5(6 zFK0YItd>WQYQbeAS=$^nC|bC;+Z9$J&$X<{UTp1Y)P^VWE)rq;Z{3;bHcK zGsQ}*zay+a|hITH@ znkF?6SNaS}UrjW9$EXNyY&`4c!E9U;ahn^F1c%{DwRkn@bM(+ogP4m9Efx{lrg;$4 zfQImxiQ`Naw@vnH!Stioq)nqcbq=1&vVmzgcG!_go7=<5ogCcNxm_RIp%Fgy*vr1b zCW)qO>XZR{=i6|1)`Yut%duoW2u2$ETwRPC_N z7{as8MmTQ0qbSkZup!dgu)$ZmQ8UI>L*HNlVF!1T_NVpt=enX&;!=cI)vU_i>EC%C zft~B-n;R&5iIGmN_TXq!E$MtAc&t-z^^awqlV4;(`c>xi1tptj?%O=uOmQ^$yW_xr zLstHvR4-fTay?>c*v>V;GtwQ@_BhXhYknBYs-Ei?{gH`q8T zsHZk^M4;ZOV5#p4aZmXYe|~tdib+n)qC~TSMAS{crn1ESKFi+kGw*(1tT1<_iVI(R z=~+{fJd7qp6z>AHJH16mg&2uPHEuzL3UnW$LN;!|ei%CMi@naC`|N82q`n%~`t{TX zCF}+z>;@&s1|`}BlLgi9gf^EAkv7*94E8sED!#kkJkjyp&g+ryTu0GSWINDip6Rr& zOy>klr>mL@s6j=t{G7ne_%qP)~QPPj$=$1n4FF5ly4g((uT-f``@>oHa$YF@Cmc;|jtb*uOpD zTczjq4>#BUoa@ZrfsX^siA~~X)bdG_Vs})^yHQRgn!|{5G;*yC)H!lTKBvevk9GpJ z${EXD=n6_R=rn~&H#kfro|p~$9q z9wS{4sta^JFz61QkWu4)^d`ia{9kNcnQA8(&-f4Q;b zpwQnlj~XQyWX`E-;IYF39!rw`kzJM7B-r7c5dzegpYR#!jl7qLVxdti0LA3S1Ab$l zM1bP&e8L#LpQ6=}TKFT)h*m)ol-mgr_FWh@E|}j*`<{>fpzzi-x1PpYegK@$_$O$t z;4;~_um;XNj@(@H+iMiQ-X<7kWA`Zn0G{q{{;~gZc)I@K_WcaT+=Rh@r&bU~hF4@F zSgNfEY-@%0wPb}Gl+-s?BrkY7n@`Vu?)Z^|);?+JL3e6v@A%ZYK6DtCs%wHlcTI69 zL-nB5g=aflJC+EQzf9U#L5>qKNsyzmeNOF#`aV#$6QOCTIj%&zbz+f@FhXuC(Swo3 zWF4=$H-hM^in2P=>qoT~(FJ10wCKHQGSS9_*GcKkMKu6we%7G$R`@X z3*&dWPpqep@JBw;6^-1$eHzKrM0a`eG?5OF4GsXo5Wn*&ws6?EuJgsv^90LV;WH!RT;v@*kT8{a&EHP$|1Bzu<%*#@7kbkAW52VGgJ z8*Nuk3HXgMQ-BAw)KIUKrGl2V!mPumC|pIm7WvSYGW&J4mUr4zQqbR&rdgZ$}(1~nG9Gpp23uTYu@g; zdB9f&7kgo!l=c>L&hM3R+Wp7(dv%}E(u=L-=zsPS=PbTGhN>U-eW+j_X44PTNr(Jv z-=t%7CLN6vE!Eq(0)GB*`|$X*#}nl^JKr#wg3luO(wgmi@a0@VTN+>A-@R82Fm4s! zXH|wKDeTzioW+nb*~WtZx!Y&b5ALkPK?X$G#yo6KK{IWZtjlxtV!LwI6YRew4z*C; zZK&KJ(Zn7&Q&A4i9Hn|>>vw6V%IbE#@@TD3=wUYgSEOi-BkT;!;RC!GR(-i%AC3Sa z`wDkk)%Ng<&n@?kKkc2xC~`i#Y$LAZLwc~H#U95;74P%o%1(eh7{@@WCGtJzi5N;p zb;iYBGSRkY_>~_2z39;sP8TQj?;r24{|Pe3 z>E?CAfG=Mc(d#05T|~z%qVwPQB1(kOcwI!NSVZSvYZ2Mc^N|_bzj;9Ueha`&15oK> zd<_DEihW73Av|-B{wY0Jbt*7H6y&RBrlJaYU8ThYSu>%s zs(xyRcolT3*31@`HI%5li%=npxZ~|QXl0s2XeU`S1DTz~n#ohj(rBX!ZIM!VOG5Oz zMS?BwsPc42>3l8DR<2|0lT{3(kNM&07VVnPXn)R1{V9M?uciW0XTGumujxT|%Y**q z=I-h9;p4}D?d{mnzkYvrzdt-adI+c}JR_*KzkY} zg=sZahxKi*!0{_xywXM7+1B{9JilmxRDJ{NVt+qLR*~0R$vbp zzea75y&|w*->%lV8Kb|o)og?AY^}gV{n$4f6_95$qzy{8oi`{vmd{p$e>|!`*IVx( z9AY+iU{db68=Hs9=NoZ}Dr)PCEIMP zm+zpbMMnf4t4p~ox*~8khB$>+7~}F3_wxwH#mOAzOY?-GdKiILb-i$La;CfPo3?YY zJ|lt}Y5=BiZ{jkf%nEpGI9eaUh??TAy3ozt4I7~)}x+WyEs-0{9m!@-}k}$*VTu-&Pv^^d?V_s*XjC}v{&DZR`ZoCz9q8wW|W%s zWbymfX&$B96WerqVam{Tx;^pYD$8cuu%evDtA^Fos4Rcm$}JT)fGW3G6J~$<9VxeT zI0c0i^nRa1E%5ESt)8o33>hU>FHNY1Id#TxNmK_Il)%#*zzYoUpgY-29gQ1d!shvL z1;#n9fENZr#T6J;TmdMNJGio@SE1f)IEsz-e@< z#1Vtos1zbN-o`}vgOS#1%!cktMF~7J;0HMkE_lR%!6OD5JYooQ01YPCU^Dd&!Gp>I zQs0fxhO)I`3IglbBO?mn58M+U4tM{!3AX3sAS1u~{L{zV>%$WQet+|<96O>0>Y^HS zGrOGCIFkCB_nS0-G(>@~{A7o{bw{s{1x`U1-S)>*svXB|TE{W%v){x%`%D*ioP=q# zs3;3%%VYV{I<~Q1#Wq%H*qlXbN3VxJ-2ze{CP78^NnFsiILXVn0%m>qE{K;irIXuU zWUiwvsD2tUViJDJ)t<%)^UoF`W08v>P{~TE)6*>9K4mnOCAfhQd_089qXtww6_lj% zRfol2cQ_l4#lO*!o5A2vYf$~QwcM{{@tY=#m(p^-AX%JH%e|f~G77B~!#zKaEE4MA(kOg&a2Tz$QXTA9 zt8LDzgV{zcclEG_O`{r)8Prgt;!dgvs!U(&vxhm;S6^wiArV<<2&=+71i22H@E!iX zn&bGY)X*+uZ)OY~TB{BuWAz{}iGFVC2VXx2FLY`f4E);?HMGt>Fi1aqu&`;TJF4i` z;e&+=A1t!kvr%AhW%%bx_am>oADGqgFBG#Wx}iJpr*fYFo?PF0)amz~i5}dUl-sgi z$KUfSm9qQHg7+>%RK{+VpL>p^ACT$PX*_n_)VZ4;czLCM*LI`h7>M6>qig64bow5l z9j4JFO_EdhvkvBM({(iRlD?qfy=_*iM=vKsz2)%0C&pc*86B8Te)7`zQr!0;9`Z7>}foeh3o zP(@QKUxS}GH|{1?1*9iesX9b`J`2j&c)!YV>}~M& zz#{`g#AoBiueeFH!Q8`4WE&}jq)CC&#?J?H_^5vy%wh1|WWC3x)~v$*!tLQxd-#)m zY}7^!ZyrDY{Sh{uo4e~9c-eR*t}yRIP+$^Q@c+Y~CWhaEQQP7!Dkm13vpf8B{}c8V z{+XI$V?@@_g~N}CGWBI*X2?1XlUK_!pNp_N;YG~EbN4Vdd?4Nfx$98{Uf?xP`a6De zJ{yxDDEN5u>C*vDh(Bqki~Xkq3Kh3^E>fY(k7rQDJXA4?Di)!NMISAy*u)j8;9r#_ z(W_;XBvMqd6sj1ECWEV>B%kC4taeDd8LX;rbN9Mb_aw@=Ro!c+aryGiT#K>hXP-qb z-OyoX5B_uJ9!`CXI|MsQEoyre^)gZP+)9F2;&A&Oy(N8TNORu$5Jnt>!~JRrH*l!b zXURCP!a(vsRZI2Msq(|Mx`I}BvFcc=k9W6E`xgIeuKm^TD3DrTjJh_T1ZEGYE*J8w zPnQm|g+RGNwh-)&PIw$o$(|iP=&N?Ty1%t~5!$7QS@g=jBR%tSkHZ&ZJh4Z&DUy5K z`(hIy*b^_~!I{iv`DIOZ+g087esXJ1FlQbomQ^!3>LM-+yC_Hg@&*nfXJ+7B&coxv z8@Tty23o{0ne$_-XMsX%XGCyDpt0Z+29?w!awa3ifV8$e?+lge+CwtKI~%>9yt7U1 zRfgcXo`tcL@O_BVz29ewc#s8uhaT#6GbBWAhTw~x2MnJ_X2|<;u;C>|V;|>0fMZCd zqM=Rv$w${14fp2m{U0#0V7lNLz#CzxL&Z>i%a)*A*`6mTY%N~ySGbN99a70`lh=q|Gsc3<{VIOj@*F$v3|lvOQf=~c5HvTnwQd#)&*AMQnQ zNib93Uf|GW#hM_Cg4Zny?yU+oqmElJYF69qLTM?*%H%=`iV*sh>4hQ_3q|@1C4`Cp z9Wo^}#GNjor@glokYeM7BIktyW!^cRq^?SplB)2;`T60k_lh2LyxQc<v9#|e0cNu4kiv3-`_vp zz)|;BpWrf8u#bml7cN#UvmGU$C@)kgb^sLsp-7sKqnpQd@76AS+I9JOMG+!{SjR-@_~>Qf*Yo z_^B=zkWdV%y&ef0Nn#ZeD%1^GB&75jTzz^MdQ`P=z9%tu+QD8^c`)z;kWzCs2|fh3 zMDWJH2jV?1T@$I#rj-v_mX_$|dC(`xRG-dQU{%TzGeL-RaGt)=z>@?eWr?B!I5{$s zvP4IdYy<(49c31HiGTv&YNW@rN-0a+A=M@dUh4f0advgMMryd%WN`0xuYEH~JXWXo zwlDaRWaO1Xrz966{E-~yDor@Nxup9&ylDLW9^b%F2D;(vQi%;8KcqH%^?uEUuK}qI zUp1zi%&ZO^g~_nqdWHj1Sjz#)B^i0EMlP=AOui=EP(uB^tdCbr#YXK*<@j}(f3pFz z>Q&HDaK8`N%+JC3A!BD%Z=2{40)g;;V$pD79AKz?9)C^cyk%)zDNPgud zusMYJY*frHFV9TY3ULYf2qsEmy@AsABk9XE4^{LA)rpk63n_x)oV?5?<@NRVY$im` zDGBjy-khk+wNR+~ez1rE!2V?b{W7c6RWg|_n=g9M$w&1410`VI&J}D%VJH$2u+rE! zn@IRqNWj(jMC||O?v{h3OX6F}7~!0Rj(J0RlOSY^@+fW~x60rRfdjvK$T(3KG7i<- zEVVA+twHpezB^e`D>bL|S{56FC5l9_#8{0QjLrU-N8wYf2J62wIH4C)0ZdF=G-gU@ zh&x?ECs}iPuXozPTK{u+=7(o-c$SCfmg3hdRK~6kPhHJYh|qKzyM=mIrOQX6 z%bZHc!fB^2_}mL!d`iI3=VReo*(`t?@PUeHn{PDo^Ptm=QWF5L%rs4tCBMY{&i53i zz>8oM?V4W%rOI7BioJ8nuDkd=VVTmi&OhVsf7k||ELQ+`lys|ssIu0gXAIR0*(}geeChuKAQNzttaDI_+Z$mi6={5Le2EXj$XM6}dEm*qKp%f-3kv7K# z@O1?*-n_dti){FV=RpU(a2Uy%sY4+*-2ZWIZ_^jVuaMsKk&y0b%8{92M{_0f(XOD? z)>C}<*Qoo;43TJv^Ft&W;Kd=fOGB(>+_J>E6GLQ&w@_&ao2O8*`HVmvHQ$!_blkiW zz|OG?EenwKx2Kz*09V8{6AJMZMxhT1qm$^oPPd}A({f#>{XYEn&EfI>ZvVe`FlkR; z09uuY&rU*M5GioMR|uFM`NBlFSG*UyPY zM<`PCxm&POqlGK;^c)2HbYEbw9)55IcVVDAuPcSC@VF~_ad&2ME0;)s--d+V*VCAR zXvF3YR$M4I4@)xJupqNRiT3b6pMUyz!=a{rm@zpNWa&Jm4O#pL%K&3S4$Q9`?Q`LH z7WTP!=<${t&sY$W^W(`!;7pB2`4tTe9`x)DMj{;0y(o%~3D6hzKqw*e11bpGg#i_$ z?QlS55Jom0czkRam!@o7oHEwr=ZrO*CJiI+*3a75V+~>2h5}J13Ia%}6WRF*I)Owp z_91PsCL>h7Nu4cNvv5#-r`%?_D+LFLWsHWnb)2cCMmr zSS!AIb7pJ$i#MTOg4NETHyiJi*YxrMgt4T!s7@gI4m^3dVMNnV0M3&Vqydg@+}EfL z$TUF|3Z*8J^1j!EK1>fGet69Rje6Y2@a>U%uxIW84!tSSidE|hSV>usqdBM*NIv)` zQjnGO2Qgg+(9{sa7Lv!DtNXiugcdG{gPiIi#(~%%U_z}%r&IIaMOYBEi#o=FXksjg zrNbT*Aqk~UdrX99LU(RMLgsC_?J?2C`yRdyS9I!_%!mdi-CWRCmUI&P2-XfxrA%fH zlM`7-ytTSWeYEo&g%L*bT!|n6Mxf2D-F)A?i#5TE`dC@5kd?Jd&Z8;W!k>S%V{Jmk zg|BOrBCMbl!P%BVDSu@bt=Vb?2`gzxN+UIMFU_e19{yZlD{4VisZUrzf1<{$XfW<#|kF>I0~ba#x~ z_jl?!WQ;>K6$~4x09OLTw$)84K3tsV7s60Q6hl2x49mBY)kHCDBnorC@+Lp*vFea8 zmJSL2u*WpR9IF`SSZ0`G;kt;8RmZilbX*HYl2D7_>+n`BH4@&G#5FY%bt}Y)Ze(7o z_&P**x)HI^h+BbU6K*5CNuJF7ZDefBHZnHB$=bWH;7w*zM@oKz&t1M|Mvk^M+rRp8 zIsD4W8_t?$S^jQDH><9!n>Li8IZMmXy5hO2)L}()CEXaY3?42@8!>0gk?F8ha)G4C zm$Ss_#y19F)%Wjg%bA)pQM%vdRVol(RDt*-=FwUTN6a%uYVnBq2F;Zjv0m6bvWE#a zVa{s}VtC%TVyQFk@|W|PV=d>!V=ZSq7(?x)H7{8AE{&nA9^fJ+_lKt$E{bwL3`{Nf zAXJd5SYonfm0Keqt|DUP*ak*wt;%8|fu*M1DIXL-qs z(qby2!?b#cw>d}sf(-(13r@1O1JF(U8-reyj4$?M((Hh@^;UhQ+s1v^m)tde;p(5a z6}Y!UkIWa_tieaA#lmfTgzRu}cBNfuKPs*#!@yi#^Iaj518v^$LTU6n@Nl7_4-x%# z735>V4Hn#R;qebP#tfw7=4Rj)T-_2(g!kCnTK*O@5fDkdP-TPjS(82!=}IKN_mu4> z+*!y(y3#cujxU;pf)&e*t%!{f`yyw3G**?{?6j`xH21 z(Pn}w&U@=coXhwC3vz&6HfLI<{L6xV&wcVn+#IgDmQONTg(me}L4SNpto1o=t zZamh=@z%pC*|H+PF)~QvW3`SVZ<1CsdPBxm-N;eh80pI3b?MBdyi z9su+N$ZZ^B?N*|XO9q~zsg>VF-WsjYN2QMvO{5MC^iiUzRR@ZuRvk#XVKhz*Y*P%qQiC zFl(Oht?@FjY9)A}IS(Qd%bVGK3HLAd=bz(sC728VF5O*;YL_}u@~I1%6O_ikPTyKZ zTdn>zduGN`zThQok^>eBNum^w&l7?|fnUUWUKIF6HvCvY;1{J>b6zi?D2G20bfsjr z?FOHe{ROX{(4rL_!Lipjkv#zA<#8cuXT{HgJ1TShy&BC;-i1XMYM=ZJziX~+%7RehDi=q-WM{{}g zrnepd8Ni0c5L8}r7ZgkWf>@+445_q{FX{Lk8aVuQ77ynWndB7 zA&8-L%MR`PABpL<3Y72pP8^;?Zwehu-#_tXHKor>0q31U?_`0}oQiOLuryjXipHN+ zxeEG;s$7Luxr#-VD?MdVm8-BSSK(j1)ka41lzl_BqOIDcH=|}8f~&QmJ_<{X+NYpq z)R|SW1EHF6$tReo8CU3kvTDY`8l(&|t!DIHnyG#@V_5bwdQ#LWqaHY^W(@ndq_W{- z?FpZcwdTgOk4DY7WPAQ{8d=p1qGpUjF;P|QQq%R8F{){+541dC6h_U+Bi+Cn9j*my z&C5n!P%|=A@}|{{>XX{%o6czw4R~Q~RN=u_Gx{V(6~x=rj7@OHW=jT}s1>bMGuD_P z%xcDFL{;*vW{mWRMGxeH9N31=yB=v~Z zGgdUQ&7G*SsUu1Xy;3fSBt9a2LRK?dYjOoc+oPgP=f< zxU6rJ1$|r5cr~j>tk$>Tkn|BzaD24tH>(d8TJf`Zq1i6fos1RX1SXDLt5#R&5!=Q1Gfq*O z(j&g0q7*g3T3I>}J)$UdrtWGe=uF9YG14Pi-(S%Vu^zFjo48OL)K#hEx{^w+pe?IX zH5HwZQF&X`mhq}4lD-~Z6Iy9JM*7ei_bsY5&1%a!d$G}t8EsiwtD4i6rJR#f+S8=A zEUiAwY0K&^-;K7c#%rgn7%Xecx>#Kn#b8mTzVly1LfB9zr-p!HICb~tNoN+Z6a|hn zvznc2EF>Bo7xp&SXfZBZrqLJInxc!?+|0|7n{K8H%`Sh1S<|NOzwWGEvvh=}7ac1u z!XPq{2sO7wb-f2Tic2JnE;odq4L)MGW)_41`NF zbiJemR9IE%=mFOCQed3LV9!bi5fD{D1VlNA0IqSrtre2&5V?nnbU*>mJyh7>i|~+& z%Ou7$cT2=&5_#3EzsIK6XmuD8QFLa=&}iR>6xzoWnimolD6~&dXmo+Pv_`9yQzBv&d4*QfeA z$x`2BM-jbaHkDYTy;V&0U3!hCnOJg-)*a8&!hOW!LgD_$!>tx+B0iU9zNLu;U_}W! zQqV1iiWN(-V&`=ro7EOI&?UuiX_sUiK?UhhRz*;e#Rw{gTcz5Hqq@p!i+x$V?a2+& zkmP9fuVeq`B(cb1lo>@O6g_z=iLq5rB@vNO>|`=6G_}{IvRSPKJUpvu^?Q`$RWgb_ zlctgK85n5<8w_cL)r#S==y;GBqb3n(SCa@l{5g)q_?2e@$?Dgf3tSIhV>WP{iTNmq zCb%(6mf}#+%4EeDPq4f%)rgrMyzT_EonROGYZUxRvgP1UP|d<=(wZol4o779PehKX zkVN>pCNhm=MHRr0K}$(DY#9X;O18vH;sR#K`^L6K+~j}FeG!F}udy@YI1^jr(mHEG z2`Ie-md=_DP)hTlB_$T_ zElD~_$0Mthr^C5jj94bC%_-!1a|+ZT1_Y4yW|O>%0HS#2K57!AofZY6xk{5;SrlMh zFtTKPpP1LDM^@Be!TQjo-QlAp?aq?6P9uYhC?rb099m4W*1~Bsq@9ki?~!(L{$kSJ zepHMpd&wM8Ry!QZ^$v%J=a8^Pdis;GS)1g+A0MM?Et!Fm;cieMc5~8JvB=p(HD}AGfT`ka(4$+O6Z|$-#&DmImq>mK z3Fv)RMtm1<>%olSnoMQ$T%TzqAe zM5(a+7BeM_1?PD}^s5c7HFwRAw#MyM7E)hF)4Q1Zx<2>ydRuHQN9m=txQ#DaRFjSz zvyCU2OZANBO|TbC!Q^s^?CKoZvXmq{*Na8gLV^JoXfK^BDoJ~7!p_AXadm88x!#N$ zM?4FWuZ;bxFm`){dZqoZK>MtakmKJ?h({$Ls`&DGvHsoU_<6+5Hz3N}&deEkB#)8> zzNiF`9ncxEq|QaE9ts(;=#Eh0xAo*87s;WRE5Jv&CM8t~e%zK0EBc2pxH%;6XN@EoP55{2U z$C$yj2rM&m$Y!7XyF51rRWWm8sVaK@U_rgi9i^`KVY%+73X__pGepL*k zm^nQV{T5|iUM=hL^>#Cojd%fG5dCL(3UhE7J{UR6V7rmju4p`Bzv7%p768-+oE^H71vFP`eC0}3ME$ka20>OhpCa6Z8o8c@@0lnBPDYfb#ijsEQ_|;qI71rS!-V_St;8e zl@{V1NC_R;n#H`PAk-8$%wlTOQnNW3V{TSqt?kyy6UrpJ?XjXkU~A=+w!g?2HRS{i zas*4}V2_NNiaFSGMorG8Hzi1{3GH~yuB+BGblWZsi!xkE7E_qtB#I#w6v?tA zkCmG(rm}=)6| z9nc~}m3_4g(r>z6G96z^L?Ve-=TbjbN8zrpR;daOEX%=xy*+bSwDPU?OO@;WQawwp zSLA;M zrnPW&y(F#auDFcfvMM09EC$3@JDxv+YD0iwwIP5RL3Z!c{ya$!^Js%Ddzizpw9pXy zn~Wtjos|@o^7b;>lZ`^=#tvlY)aKa zFjFG@MFA#*Y?Kp7bDf{bs+bLehOA8nGwo^_M=?1>CV@EA%I22N2Nfk7K^;26xD8}` zsBbhEbTvB%LClNdK0@(>i!!Jlbfu8DDDH}0t~RemCzU5o=X(bu(0Up(5Y0&e4hrXq z@WFY>D4@EiBZVlfK}V925{Cs#H7Jo!vQ*r0vP7JZW)h5b8dR3a!FC#|=A(aB2f6qA zQX8OJ&*EUb4~ORBJoHT)m&C?#VJC+Y`6!T82|J_VjoDQcp?a7GKb!lQaJ}}&vmp0F zi6K9p+JNz1pIF}2IWZueq;weJ!Azgoga=F{KgG#Q*;1r=ERtUitl6|4SUz-oJSaU7 zoAq>T;s~@X&f94wt{_CPoY%3|n6M_gUS!3<3I#EOv7)vy)f6kKK5&l1N~)Q%h7r*S z)ifUA;o>}hR=g$6pi$*$38JXtt5BF^MSnR8 z99iU^by%f7>4vTpBELjHdoO)1>N&$1NnV;Ua*U$+Tz^zE}E(uv*Z3 znXr(3FEl(pG0d@y}eh?p)4_&VY(WDn`SIwup z5}yY6L2ouBUtwKtsi#ICE!(`xsMO?Q;uVVUaNXv0Mj9t-X|<(nE37M=V>X*15Cp&$sceSklS;2R2l~XfCRw5l z!3hsEn_);|yjo9}$!5r#HUPME5zU+0`y|e4E|hFGL*8`o*PCpHz5vBp(pQDEtSFZk zWO;RVLnzANj|W|;i?pAVX*sL4OW|y_T?$sp3if$9lh@~2H24U`Th2FJ0dl@5i-pq= zuG-32fohEf)x*9Nt_GvNm=(%wI#b3kbQ3I;H+gl+MhlZ!m@Fyra$ZM#aYt&CI3_RT z_>z|c6cPEzxI}l5dVu&y2cpJ@L;Z}}EzKGsc8E>Nip}gpq zSh$trW!HmbQ>EJoHNin8Y^LaHU@+L40H*Lzx|QQyjYlX?8?UGCsCdc-$zNJs?Lm!q z>uuS1$4hr|ysPo$4!3u|93E~DcTa!dFh{%jDhf{RpC6(42Q!Qh z{&4nppFi!P=HuZ^kEpu*mL?`RV$?SPrOyvHKYzZ3;<~PW<%S9eM-jb@UT}QF&Fi=D zFYZq}RMvaofz_Phr*o=U>OE!KLf5a=Ts&$pho}3!x~G++KaU$hV*h-Qia~b17<-cb z!j_}BXosmB9&R4*KmKxq%=+^1R`Kk=-#iu3XHA#t{V4&_Oiu}uJ*nH9DUqF;l0q~S*a2{_xWb1kGp0=0 zH`BZS0J{1Q==jakjUlNw?^5gbg*k=C7I>Nqur#-DRL+KmAQ%;`7l)6JH{N&#oIa!D z*NbM=z@YkuTDrNNs=lK?6?QQT9vPErCBR58;@4cgYV?OIR7hNUqNGw${L!;I>Bno2 zZWEsk%6=y}lWmAII6Q5{8NnC|?nht@s~>?etWGe75@8Bs94`}NjKS+9TX=l)TV)IA zxiNDEOup{M(IV4t#maHC%eylf2ZE>L=vnj<#{uV*@U?mI-3DTSF6M2uqW+wvIvKvi zwF8|DU#l0mll5#OJ64b4$6IuWpt~EKiuC3t+qq;n!hYZNR|*GLlUkDSGNCh5MD$RShZa0wP%s?q8Sda` zrnu~Z3g_auC*#W&XwbcE^-BRH=w1R~`z%KK2!G^LOCRBnd}8zw{@f=%c#lf$(Gbaj zKEfZV*w9D#bDvm8AK`EQWO>8m?WdnU-hTL(B| z>_30g{~+~#y!rI$ppG+psp^d7I-d^Dah?9wFk}=@58r#2;)C}~-9zh35jK!JdVKW- zjT+_=(K8w>4KmcTxt@25gHflxke9%l37Fm7sQ#i$nb+98H(Rz63ub*q*X+zKEin2q zgB3QHF5o4Nm=H58gPK#}=CsK1v4cit;&8iXy?$=%PjwUT|j z*XSASPt3=>e&kew0p5nioU+nRQqO00f{=vAbiF+|h9~^%M^j z4o>{a)b&p}OV{&oJM~6#551!&=YBvM@ za4^x})N{Lat8E7-6t<(;yB$kv$8h^>_4e6HdK0mqFBPzgE+DYb8$vIcn?fLOhw>+N zdG+M3u=WR1Qf&^n9vZAfSH4gU`uushUA-r^z9fJvalahmmsGb~YDOMJoSG?vva#ss zgaa)@=(6tZeYOlrB#s0cDuc)|5O0VG(l%CDV_4AR59!@cG+|UWJYSRxBOhCTVrET2 zjPVVL4VzbWH#5XPRx`w~yK0>8ezP|eLQq|#knR(QUy1t)p{|>RklQrLSbak+-P}%9 z-_f6q`q>5gKOqC%yI?GS&DE<$f4G_iUe4RW zvUk6Eq*-0$!_E88*Ej$5|GxRl;q%=iT6|C9XVmVFil1Fg`u4jWr`9Q`TU74C@5F&r znchq-oIg~xb|RPKt=8{m701p5cY?jaT+7R0QWwVGxfi~PER?-kH13hAI{-^M?W{zt zw(KtFS%V*dqW3qzHt+v&dp$|1_0bZRm#bx7av&i4vZ8rishN0vokrCW!$kDg15s;B z`UrpIQ$ru&k0`D?`lx;`b%YaLI%o6|{)pbYr;qSQJ_-7$el9i2xT`*pr-@)dlBWr$ z#nJb~0wSqsl3&O>r1Q^?(O`&voq@gvwtgsaTsF>D`;Yw}RjC2=#TDY=OHb zuB;@v$3m8-3|YKBp{{`LC*w8uMi6~f%YU4N>mA;B!EeH{P^U_!Na+3uuaowrmQ{76JD8q=TmDzH#VR&qQ~vB?~tvGD>4uhS3nE-=8e7_V=LXo1IN7zdEOk@gt6ABd-8)K_w97%YCK4K{|A|6h0HMMIvrUYvLibtr;jL>5Yd7@s-H`(39_y!yMcB6&9IkMl7{69 zKmBlcyxBhMEX7LlDf{5U4LmzQ5lLbj1H?Pl=p9IJ!P9NcqEU6vt2;ie~j;i*B%&)6yv zBP)q(41b3kA4plown_L`?vv4UQ;ATOW7LF6;<^*bb*DtU37x!%#Z#Xa?U310fl&AY zq23?`^FZmBd?dvC81No=9#K<1evBbz5h8f*r@DDuEOe!6YdF`P7 z{r>*r9%^c({>}Txr^C~Ye*t(ne0X!v7Xb6?!!P*q8anz2FZU0JyMNs1cT_Hen)PJH^;#LrzlPV4EB-Ty=ermMU$mQ4@)Kqf-^z$+(&9+|*dYbaay{}33HZ#+@U zHnH#Nu0St%d5&zoc~*h7&$m(-pvZIBpR7Lt$8Q)mNQvAkdXP|li0bVu&IX0GfZhlU zvgRc2Mws{LqDO@E#_I1$k1*z%-y_zd`Xy3Kqm!fWm^Fx^-xhv0M;$kQnQ5($TI<)h zroBB|4FBN^@FnV_7%?n{`=~VN_$F($p~A9wKU)o{_2O9O03Rs=n-@3r<~}lOA!^BMx{XZnNBMEmB7n;ypzW3%+ZxEk+t5U|R*29t|-P z5#5tGw_U=(MWn0tJsU9;6glvzt}lcg-htS|33_0gclOqle-(=0KRZKSe zb8Icc0BqpKar5wW3tOXV4fyaRLPu<6**%`m zLZ=5$w`t3ubwKd>jD9|wgg1L(lb0W6E~#nh)90r@01ofoK;uE-HhKMW5tS5ES6Nb` zOqMSB{ra;s3Y9ZAhy8c|{^t7j@fPG*6BOb@L1NYYSrSNQNUH=7Q_K2OJ?$lNeL|b% z%4Tf^<9(EfxZzuzVd;GIRR^3?aNNi6cmlG4j##RW5^mp8-)vx)3v%LNcye)bh2_LN)sqrBzjwcMSu7+erA(60 z2mGLwq^cBbU@X5Wx}E6LEil4|sq-wFI$GopQ-2v(=;QX_BwD=*kJXznYnBH=wo}_b z)>1qIV7jGzAC|A+DK$^SM)!a9p z$Wy(hcUBy-*CL1Of1>^)zWAtQP8Q(hF`YS3;Xdp`NmWGak*<98u~0tgp#Hm!(y{xU z34HrI8T*kN`fk%ng5vo1iur;pF(cx2a=y~!*j-#tj8QmS6ui#dH#~C+*J{!Zt6N@) z=2s$lC6a~4&PzmczDy*?pSX`9lJg{yoM(yT{Io<8T_mp^^Z8Lkl2*cg8=@2SE^oHj zYb~7u56{X&UEL?6Z!MO(*PriQDQMei3eQy1%+<=Aw?zArRIsA6@!@$mJdcNG))ckD zN)^Y%8hvoOQ3WPyHx<~Wu682w3kzr5H+(Uer%`yA^lttE0wn|Hdkb_H5li#DQhCba z1Y&gP_hMrG#D)p4>6)Vc6doR`m)Y6Lx0Z@58RqLc4v-}C!Zl9}m?s9z zb(rehfO%rTTo2f_c%N&3kLjbmS()vf=7K8dxvcNHq+Hoa$9+2KMe0xSV0wnOv+9KcMYJSHxd@tXy0u?r`dn=Z& z!%_ge#mPy8I|EgRhzobGk5cq1GBCB zw}kGcce7}l*m4$el}~Z?dcT7frt@+VIN3vv?J=#jA+!f}?9)S$TQNt8JY`-qxvn4T^aDId_k0 z+v@ZQGm zDscyY@AD3aO>hM}pEFCt4e_|2&!%Pwo)6BE2I`s9-dmxvvW!;g_SKiq%W ze>&X#Yd_Xh#5mvUhc~8&H@ZRiQjquMaIYfEfoP<|!D2F2D!tC6?^J*PH9tMx93HNJ zfbQ7o=F$Rqqm7ATe`G9_TyzFN^4q0@W+agy0<-_oM&J8xrl{L634Hyzt5tBkc#FJA z&++L5LAAy2vP24MzFKAVc~1?NY3(KiGzY6 z!*uZ5B2j+4z5D0Qd-&(^$x^0I2kexDz+RdXjv$3aT44EEWbvHUPTHwv%|>?zB%5gC z9)eZW_(H&L;YWrP+*BbUwlO}Y>2q+PwjFalTnOiyuQ-RbRqYkZ=|i&_`g@GTnbZoZ z0#*U_UWJD}6|M2@w8occjpu2N+wie#_C8MKg*H@JnmDujmhAm;TvtDoXzNFK$Edca zJlAhTtXM*<$Rk$kqWY38dyH5?5!-hmVtXAJxNi%X>^l=%zNZ20Z8R6kkE{Fz6MYOU z3s=^@UcUvHntzSdNkPwa&fb@Nj_rL#mA$Xf+T8afdTz|9h(p7h4J@+) zFfhs_53H+7`J_66FvUw%-vD!<(-cBX` z1Uh}srJ9;}G7GY=)D^jr+>4-}^tj*7$NiQZ_uKSwKYNIejj}x}?%ucJ9uijELrQ5- zYnv?!w%M^6cUowQi?$#pY|}*)%(iEH?abF!*-)3kx7LLENTCi60voROi8VB^uj_yA zpY9V$8EOux(Eg(Qx(?h4FcN2x{gv>#cF<3Uho_T``4!<_gLlx8{a^4ucQ?;o*r6?b zBR4qp-TP}{O`W`Z84XW#DYdNucW1Sl&|ZoB*C6tr9&Ud5hKc+{-OH*mUzgeIGJ9QS zFTBjY>CG1HEMD2bD;qe94SZb*{-h@`SP#Fu>3cm9{Qh{<>!NuTeO^x(ugmsz*}g8@ z*AvStTX|(GGn8MGL99>A{i`yF^ey1|ugD-?3_&OAUYXsQNsC4^M^#D(_{F< zSH0vsKLL9SKh^Am|h`iy)s9yY|TJjbh%bTnK(apg*4zO(4DCrMY^-^ zt3z1MfX-*so3UivllG%F?i)oh8lA<^3lK;#itQ**XFK)WJBX`|r)=fWdTM$8*>8CM zbufhSjT^w4>6Oksy|&`a6Bj#0EL9Z`wYIAAlzfbIXFHY4)7k&Z?e@Qtu4DER7%H0= z%e;B9v^Ku8>&;Md_sZ~*{jheMA@<2bWcWSEytfu6ItU!J_5)8ABA!$OcfgtFN#%Wk zKV$Sf&W}TBwgb~*Z&-dDdWn!U?4e|KJ^BM_t>gmLX2FH;+s>KLZ(kk!IKhR#gy3Ss zSac=J>QuFFL2&6RV#e@X^oqdjmIoUgzz#OJPDBC@7D{e#ok(wRomjcSA)xblip-dE z8(haQw2Uf+G=|#;;QsGo zT(9HnO8%j7jo?kYmL;n^J2bk2>5B_G)XG8UwIArV55If8=}#?pIq;y=#pS!FEBt(} zYNd1Yv~2@_4E{KjfxkAd289Bcxvs^8>u0Jp{EzMvpCrjY4!@T|S3%8FL~{Z#(DGUp ziD^9uT{XY-Lsyw5=g+{!ztcwFvCR{LH4VH=@kH z?|2!b10IJHgo&RNY`75Nqrp@xOADI3+i0Y(7s{Myj z#ECe7=lXN(2S44F0s=2l-$cTZy4H-|@%A+CUZqKa^lK2J7!rFwJ&5+@$e z|H2M1J$=az=s^`zV|w!!b;t*Hq_=`a9Ms(@z1hf=EbFM`OnL|l``;p8b^K~eUzIKu z`@>CdFxFEtvZSmQquuVcZ;kr46i6u<9sQKKT%}6nY9h6qHkYfqvtOL!y%%!J-?>m- zMXyXPde2Ui&{(G==35dPdsY2}#)-J(UdQdT&C2XkjshGfiu5mtJ#cu-k^a0h=_&Ok zZ|9F|KZoz{Nale~leHQvEAerC_<~J$cnCZCsd<|*jbDQw6*)^$6 zyvnJ}CKW-?xs6S`w+eYw9GR)1;*m*`p(4(nI#UV9^cEB66BlbTl_cRsnM$Y#NiurW zONmVSH&^&uV<7bel-$sya78DE#g`zUfDNKA`Se3h^3G=h=nmUbl;hRZ=Y=&eHYKE0Dzo7Q3D>=urqbtkv|uY!(Wi`Y+rjzV-&y`P-soM_=~M9e9)iKrh! zo2eu9iAv2BXcRTrjVeXh7pirN!q+KAeL=m`8=@qUo0TM&b$d&J1eK(4Y86Bfh&dSsqh|AC^D-U~Zll-?I7EEN&~e>`I&$_jb-N{1b8I zo$7qSWG?J(?tUf(GROPn4St4uc~qy0*_%t?QrVmLxg6iW?r;)ms`m@Y%zvXJtPP=CFB{@Iu=9`{d-2gE>cKizhuPnIzul!L(Z%i=fF4tSv0&(-?u(}$2NcJt-Y|f zrZ=On%%Uq;RB?^q@e?|%-XGSZe`Q~Py|yl28N+XzG5mU@a$X{pqQ$!{@>NMCw0Wm* zlcaKfVp2IjnpDn@BbA~X$v*8VQ)ldBJY~4ZxJi{qhKjYI>Y8S)jzTQ?0-a)rtlK=q zpz4MpvTn&4$TuwI-pCI>RvRHFjKwgT;g2iL+um+Aqx*4vO*7OVk7yRBXk)vW6iVIY zcdKx89@E9TE<4K5)(MNs%XNatc2o+!8I^)7R04#xs1)`7c3D&kez9;ri7g(b_!YH2 zREDM(C-vAn$d?{)^-asKHsC`pyxzhl{KxBDrrumdXKY)~@2iTg1Uwbf%2T%!#`4hz zv*@-ZWzv^teE{Y zY)XnbLJxkW=_xfKOm~<{kD=B+O9X5kCI2LP{%`A|x&rl3tS&s&^bIyOijt#lT z4Q9|y0>K(qWGcQpVGFytg|~?j`V-`^*g4!VsMzyzwW_{=h@DvGd(? zMwSTYrn%G#0BE+eyjTH$rUfQWrzJHPqj5Dt@Z)dF4*&&4W*lB~s2Ls#$M2~)S$oPPS7mnNd z-B@xIjgL-@2!`bPMMn$z66S^9sqY$wDYF;cBF@|Cp|OA~se-|4J~yd8eE&9>dFUZ- zxmz}I9Bu73j)>UQLV?GMX10m)$E;@}Mo#pa8+@A&QK0%tB&@Bq^9E*s%zgOdMq@h# z=6b6)a{>iG!^1Is@f1}ndlGg7CVSp0m|8Y=H95IleSEP0{7wJ!;h>^(S@$pBjp1*! zXq6wUS3_GF>(umU+KyhW>s(r)_i4!Hf6Flz?_)O#>gFJ zhK0ICcXWu*)ch}c^2T9`Ig zZK0daSWI_Zm^b>D zoKFe*cjtzMKih)ao{3|t^i6H38T^|H>Cy_-1i-OQ>I8)yPoc2m4uwMkJ?2>1H3o(0 zG6Wp;y*zglO`oAy?R~Q1CZ-GRJQ}Apf<|v1kRQy`(QY`9cOEZkEBY^VrSBsmX-7O^ z;rdZssep8;W_~bXIs=a)1F~5U$gC)7P-cF%Gd?lg0i*6#>C7EFRm{)KVQP!HHt~#Y zquPFyYdLqthPZD73HL+D>Yl=vDBXSuUn2M0sOZ}w9)H*%9Dksq@dy1v2iEQhp+BKS zA0V;o-M(p7!(cgq{yD~rLvMmm6~6j=rT;rr0Q(nU*wXq1&#H`uZmaaw; zv*mRw;zeeo-S#?QZW<*GtBZ3ngi@idXv@C*p`H- zr->!5+K%q&WdvQ|8xg%$FG%p_p;Ixwht7{XK1dsPyl-9P@1esG;e))wfX)NE!mqkI zgU68+WLU5t@qmEgok#fV)vI2G7dO@V)^F8H?vv~~2dr0t$$N37!$@D@S6#iC+HN2P z8!XrjrqynMKh&0cLN)~tYD+_ow1$cn{wc@KQrOdl_Hzad15;o3>b$Da+T2!qyUj)CK#z13*kp@O<6QPt^ z$r1!qRx6118ojl{AZHLXqo6v$Mdb}&8|pDOyzpREB9da>#>qo?wGae%DUL*9 zCWM%0f;BOsg}F{wiSnVQ;+yE^Ea=3L)}3u;w=tr<6~ z(YzGNCmPU6(kgD5S>5`}C|(E;SfK~vp*|x<>`{sro(L*lhul!{Qn}n#C|;tmXB96R z?A|1X`fp`mV*mN;KefQsym|MO`u^vKhcAcYw{ZUqRj*o82bE;EzrcV_u@bf%g{;5g zY_~RxDQSYEZc3zee3gITNAZXbmx70~_{c)!d7Cj&eCmKD;gY%=)AdBg%I~h`m1mdf!%e71~cQ`+60solOawd38M&AWY|aT>NbLhRFyoq_wo=tIX&Z<`YY zvw2GP1MNWFgzU%2G@ZaoRMrkWV9+Yj3ZS+W=RfM=5-W zMu~?#0Y;O>omh!GQO2FvguCyf9!I#_0=NQqSIBj5-cM5=LvkgCWEn#nT-Z_=k`acs z0It9gh(J$=2OuyIc60(V^-#TRiO8!qfZ3-)Z2_}U{Fi-840_*NqwHj+=fB;5y3toU z368Qmd??p>%6`WCq2yPUT6*8C8N9k&c_wbJ%pFFrO`(IWbxmu*m}gX<85ie*+al`& zw?#I%ChbLH(g%?R_G7xBx$X<^0Ef`47Tek2a);12IV{3BOAd?qC3j3u7nl2zEBW9Y zcYSp0sf#CIXD47AiZ-}2Vsmx?*Y}@(g0+O}NW=5L`!7Rx$2HO=0LX^6S*o2t(T9CD zj9gV;Vv64&pzVSgz)oGy3WEi=F&?^&abaOt-)_%~jB774%_iTYk4p&9xsi3T5(}CG zkdbi6H@H^uAg3PwCRPf$2!@N|E|({n72-4woe8jYNAdIo3qQh#p~``M+4 zVYi(aPGB^h7uwT}N3#I&ksSsg#|T~aIA2F6G$qMm0CFcOaN0UIa;G?-n38x_Ey zHOKVW|FxL|7_`=E#rf@=nK%WDT7BVr-{vP}`X(o33Ilxb8Fz``1T22d4K9S8eOM0qalxL9Kg5CnD=mZVPGGd_^bB5K2T`qIHDAtaXs36e{DhQ0x>k#%vpZ zUEr>DQq0498RqR55ZP zf|Lv+NVSb?)xc<3nGLio5Ww0@1SuKH6)lfn^SMd&A&wx`ZjT@(S45C%H${+=r3g}O zLzZF`LMnxw=ruP8Hy^ewgiRr&q#r^`j!_@(x2rRx?*O_=f#HU8Z)1xbq2!TaOskcB z@xn&U;f-2ZR;9EuP^GjktcC{AE$pjpm(iW*xFf-)X~U5OJ7e3eKRzRv6X*tXkJjr3 zS{dy`sln~O-r#l{2dCx`@za;#szoz4C4Nl?LCub4hNX9s7h{9EsP=O(T7KNiOIKgcRIM z0=LP4{e;Pt?*9=N1B@z5HZe@x`M-+c!uY^B(2^xb;$G7x$=juo5V(sYfwF~>;L?5z z{{;pxk3_PIFOyL2wxXMa{Quc|w;efhTv7DhU*Wd}c(4vacM0fTK*49~lmTM~IBV_P zZE zzJu@=wT;jSPxRhC%)%~NW*<@wFm(({yJzwg_yht3-FF&(#mkMm-$7V1e8ua!``UB%ui?GuI&2xECE3H^8BtkH)oYw^W~C9!(Q0Wp+N}! zIX^A=*3JcII8t;^sBeBdIy&1ck=urnq{O|C%dSc`oYb-Th3Wd_!bDEBWRu@|OZ32C z{oEO#f-}W7M&ax(jk3n#jENGsp3CR`{`~nA ztk~CRPMVUAK7(F!B1nNF?N98%!}i5e`)`K16R_U2)Q0u$a+fc`QXA$?xWkp+YqGCT zw9kV5_Q`%upM!`yC_q*YfzpK`;AIza-)yPxwdkWu=!3qE#UN%GfWO68Cj&CGG5tD4# zp^(cHPipWb*eB%U0CqVI``pq`Vb{yBTMFRtUAtM~o}9T&ox=yKP%P4}oTgp5fp+Br z?Q-b>_GHBMkjKfTsgR3PA*ZK8uAYiP_L-AhC#*~s97rqTB-e>6lLZG&%99#5v!+c> z7QBD)`pK_sZL>i3X}4dW)M9eN6BJ4lfZ2afpK*c|i6&dAg~?WW?fA23EuR*zBBg)!>2o1~s&=Obez`HxUZq}_+DV)tt$7(KUkhTYo(k~<4R znu8maKfqO>_(7pGYrp*$V6YfHDHZ{3)(Sdij(v>)J*vn0)OFC>*yTS_moO5;7Dj^X zTP4?2L$x$(L{!Z&PQ@JKRCq&mxcvq>qM)Tz9rrCkLkNJ8lNHm6vj5I81d_28tA%8v zV{^;Jm}t3>Y(TKddLh|biY3{+&>bDuk&Mpr1(NAiLmj2#@u89>wTh6ndKDq_iq*(a zEqfqjpk5{Xfvi_g7xdF13_Xt^B;7T}m;@PEnu0}Q@a}Swz`l0>AY^U>8HIhGRS=q% z7~>U$j&3C3fUKUAk(6B!n)0HkrdM>bR;ka(9LFFuz5Xm<8OHQhdnhUKGY~xR%{uGQ zbjkY{sZK!xJ#}J*um$4`7Ma$N$eiMtm%n}Z0P8w$5};;OrM?afQ^O}&@K!WTmm*8(HMB6NCGe8#diIjYI2O-JR2 z!7@J#mJRh1!WU-oQ@c` zv}(>`lRj4KCu>Ijk)u0_m4A9?kO>J(E@scSJ&a1JK@U(wmMAGt_Op09B=)1y4Sc*G zJMmHu(51+#PDXd}pc6l#Qu+y%u=lXGvana zqDfPBaB1_?XNu`L6861ds>UZac> zJ*|zlRIJ!wv(qD1IDDKg?olCKj~alIE|dNyDQB>a3^ivmFfgPYwq}3U+Wpzka)#}U z+aONeVvK<{t2SSEZXQ=$RB_E}71yj**q!<~SaGH&B%4ot3apz}z zaDbMrK03^{$|pF~_Ee3x$7=kqGmHfn7R}NnGq$kkxJ@G-G_@3Ks2jfngtmZCcZ6jI zsvXTHw6T<)O{?7*GSr=DHaewrV4xVCQnEOuG>eV@l#J+V_;`#>4f|VUQ#7+Tia@vc z)gK3D{^$d~+`G4OfK9SAQEgkYZA;D?!6{i|2%==#5H!L}=<*T!hBNlf3xyI1AIyC< zIcmDb(nsmErEhf9OPr9dKVY9bVV@s$h88GF2kRxVgi*Ry#-MDojNxIi7BNf7$=Npc z&sI~w^lAM}|F{kac5J;=@XP((%raoB2x4%{(>y`2MS@_f34-k*2yX*^F*oov>I3CV z>O(wmKF&S)D(=abxhK;zw(T%w_1ut_bh~6oBNh{UJa(nma7arsogI?3Vbh`O!Dj?l zj9Fj@9f@fRY~NA8ESVl`Fk;#g8*MPH_XK=Nl=8?JOU1M?wuMOW>Dm+0cUZeqjz=4q zK0aF0{lvUQ-CIlwmI~lhOdJAsmF>06f@5WmRN)0X_;NqLZ3hOF85)(Yk7udcY6XDNfkvd4bq47i1!Xp1qT?PF zLnbP{ksiLxGSMl!N5F?P9YV3BE6g#@fpuhEmrL~ETr25-S?VP|-MUQD)@PDhjJ+yp zyq@)p&)I}Mm}9k`DE_yL#ccncre3r`n=b~Ats_n{_?S(!^dY3Z{u_c7_)%;H3n~Me z3`t;Hb=-G1W|O6>?KpI^9S7^^DfEO4IYH0agS_@fV|5*zM3(P*drz!RQU1uP& z>nW+7z&1s8>tOTiuC>m<7iXI=S-OT;wx3wrURr)=EI%x1N`ow0D}b@HEHRm!BEJ0ullXh%-B$V9s;m70ENv(pv(a9w`sAN zku|CzBb!u1MwSlK8Cgv~WEcI+%FT?dQSsTp#bTN1&U z(bZgo?&2C=avqqi*>aG}`Y4yVFqa;*Gf9CvbATf@Z!@;!$II47yR7p%nt;m%fKY{B zeOLzdW^m?i&t+qgIIHKAt(wm<;96+fC=sgXRdUAH_*yeQ?QGozgho@v7pID^4@}xV zRe(YbA2VZ3XMBw(J>%1^^b;dra;Rr~tw$tV=Z`c#a%)j%VsNIBav8DKqRrMhCyheW z8Sn6Wx-P_ON)Y=f!CBRzYiCu5FLPFPCRP!~xRGy$FvKEZh}DEK?G!bM2%G5Ezc~}o zUYT5VLgEq>gl$e#>T)4W=P_y10mv{(LDI~8nu4^?uEni+7{ZEiE{5(02}e!R%&9#p z0h1(r)isSTEYZtBuG79YM)BDa0WUwd!ItpcGjd6Wq1M45CYzrIJLxcZC6Y>gH%XNs zy+cS`s8-22IV$NY_&Hu_Lk^4(slG;9G$SpVL5pUl z#h%Q=Q6&HcWkOV@-L7fOtZGb8H3sX7O|*co-Z);ul0L^DJ0VuGDeSZyh_xKZd2DrL z5mK$Y1SZ|s<=U_nCTGG{A}&0Xc!#~NHTbc)P}Hv1Hnq#3;{iSXbQS}8v{{jUNS+Kq zUcK?ll^g#Eq6YB(e3k=veS(_!$pGHfhf8eT;nEbmv3R6btLAEzYCcX*$yCJ?Z}lM-0{~_j0RejRhVp`Tf1NA#c+mc{`$g=F;uNfn6>fug?ebjlvz+ILJ0V5>qamb6`ylV-+Vu@n%+p*s&s}4S?yW+F`V$$VSr4kg1eEGd?9` z*|n~Z0PMIrnewMw<5NPG-RVZVoKB|E`;?>=r3+e|?`|Z%@NO0?VNPA&zAh8=xRSZy3fyUKE5DZ z6$&*TOgcH}u|U#z(5oHd=st(IF2H~+`AN~KQ^OHZ4)v1?<4dPPCs(gWy5CO<;}j#f z=#ukI7)iPW*M2`K>W-KwW-=yz$D?iHUrMZIOUXd9rK|nk=sLf*X+J62=9Y#p3!zJF zjh|E)9=ggYgf6Cv!dP^m zqpKb0=neU}nWV{vru$d*7I^&a0z3s@6s8QtG6n-|4@9+Js=F>UV`AF^YLV6hL|`w@_Vz(NErUT z1i?jQoJ_~vq7zRTLmol4d}2=(d6Ncz&jcl_rPLT_8pW#*Pwb&X7r&>5QOkoYbyFwy zP}#2;m5ra+)7AO==(_xUt4{3cVhVn`+S`V%^0rxZVo#@&^bJnz``pCL-XDveg2UTq z`Ao{;@k`C{4&dXjE;|h(BiAS$231Rr>VEF>z?6+&`|`l?YtlBaF>-(XNoAKz zD!cBaBAdl7;nn#AUWs|kbJ{ltjV!Xw^oEXp*SjTqz~kLpcl+(< zr%(Tc@&6C@h+y2_?M=MqXrFSFZ2Ag{m5 zwDIq6+EO9^`fHkv@Yu~$hCKApi>CM9G#zea$Ii`uk?HjMB@}u2@pJy`3yZJ*y5XxV zQh;=3jXFQ;{=(zLV7h4~z4<>p`)cBJ(BI$Z4TFf`pIXqsU+SD0}f4@Dn2l=%xPu0ac- zoWid{Y-84%>-Fm zojF>a)p_zq^k;QNx+XTkfGxbatb3qsRLkGh|E>p6$eHHCdLc01csQ4Ke>6f|d+(o7 zpN4lIKkm@0N84HT>dhZ*dJ(Lrk7%Iy*Kc(jMfN8e{t;#xY-)#v=FOiS`K|~&{qR(O zw6ov})>Vg#+w^?9>8a}S>EqM$dp9*7pFe!+C+0SF-}Tgu4FB8my5+?_M{h533$1;e zZ%5`fK)+g7Z*D8>_q)Qr8kOA5P|4jQmE3((D!Ch@lDlatxjUFj?k=X1yUVDgt9-^Y zem{?4fgd_|hCV;UOg9}VxHfiL5Jqed8#?W+4{xqNzFiiH5nINN@nNLE;`n;%Amfi| z8=dT4)L+Vf_J)yNwqRU}fmg?6R^_NA|NW=-%g@8?uv?nmSJR>C->{N?%iq2GKgeIt zNC12TqqkE7Nz`Z+Fjn;Wx<-=Y&W;zJD%H@}y6yKjH4$^&9KC zt^2=&HcmUwM6siBSO5$>Z{S-vVVji@qd_f;i0l3hd{rXh3ZjE?a*~&&%Bm&N(@L!wl+_>Lq`~*C& zp8h?GywV0l`WCys^hnQVGhXs90B_t`NuNq$b9#Wf1q|}()6>7}9u%8w!sceTNp@D? z;p}s{i=bbe;dAl)+xzOHed9%In-cz?`A1+H??B6o-?Z7@{UFZC?o3>KXy5LC#sR0q z`OE~*>i5-uoJlrO@Kt`MHigN$A-?`}7v%I$iq2>CPqPp`V@uEZvlStx@2ha{pHXN% z)0u=%$wYKN#%~E20OP}Q`PjaEWiP6D)h5+HW4^ew>pm{pm7%Q7HGQVMrQv`RVu27_2HS|<^Rf4_ z{HT1_!O&FLLElz~4r0M~aG5saz?o&1ow}&7wiasxB{54%p9Qo9hZ@(4<>FICg2r5F zg*9BCq|FrHl}T7dhUHzgAU4=N4l1=73#?Iy3M?J88gS9{>eZS1A%oTE*-ZC)at(f& zzqqDbIEQebuCx@FInT{C5sgn&mgb)xF7FZAdN{Z@Re|Mgq_zO19#B?=O;K;oVQ-kw3%{QIw; zP~7%^{`>itI(6vm8oKlIseG3s_5b$#9yTB*JN8Qh99fK=In7I~`0Q#t_Z^=zTlLdh z=>C^qa**3y#YB^K|5Y-gviTYZy6JJKXuCvVY_MqwDEEzZhD(?D)n zzib^-8iP7nzbhF*vUN8t{M%$l5MPRna@)CPg&?OQ9Uys!U}D%zpEm`E;b zS=+wG*U2h$6IWZujOYqzdz`H`yty50pZy(s>vy-`K5kw_Y<3ZC9l0HfUE_j=?*^70 zc)i}#V;d1<0t9Gls=~nLBPbeuY);cLqYpsUT77`y2}I9IhOk4*oZLwBXKrOjolpvv^Nr-GFLIuVPAvZ12b%vkSOSIpI$R*2X zgE+Kd`Lxuxn$`Un_ckdbu~`|3Iy%}aBTe_$HMf!A963+YTwr2LC@QdgxsC@WHX(;5 zHY^$#(9$;XUola_wfN{txQXL!1zZebVCNFu{iAIe-OYP1+d-*N0Cep_(ZDDtM5}ot zSWndj8yg#CpS@~7)4@8~W2u8xEP$^QE7)2Vuz~rkGd8U5c|zi1!?%yYnb7OzO*{MU zez*xqJgR@9*$Hz{MqQpbqnLK^ZVUFs95=!i$48I1Wd?mslM)wm#M*X%=cpWWSxees zgPb@wZ-Vs$zmxTYPoM|Pn1_F$3Gx=IH?S!2_q~12O}JR$w>L>c-?}f&&HY<^_ty3E z7T>z+&;zGIL2e6DgbV?o@X73>?5!P;tHv~ZWM7SGEW>QpwS;}0cq$KLJE#|?oDmw} zQIV*PyPlba1zr1(*!e^W*A&7ot*@8g*#|}3z&OrSFfe}K6EIAtD@0?QGjCc&3JxU+Yx1rA$AdjZI`9%EZ|W_ybbkjeuW7`!^vXhp|5*5`fDh{-r2=P< zGC%2*!H3vK~<%$Ms>G2TJEew9U7vKz{qRLaz$Dpkmj#{!sRnyQm_R ze}hxmE#6Nr{?>b0g=u*&_n#}X_85DUzxfY%Ysuo-_z?i6r{jH-cqqJPKU#4(er`ib z{c-ciK@#EJK@u4`Txf3*r|$e=yhzYkdrqC49wpfp@tBBsptAV%sQ2CqE|0fc9Cqan zs)z}mhBDRb4B# z$-sd?x#zv?X6L#)PVDyocq#W=|D#=l&{7uYr~OO+4OKz(bbWg~v;C4BDh4G;-Y5qFi9}TNI8H@_$MaO= zi>D4UyBJ@B!>depKQntg(8G3D*YYUZALD_Y?v3(rv(x(h+on2rTEkPDh^s+iaLV%3 z7CH;Dj?OL3liX0Zm`A_3T() z7NdA8FGDkE%*)1TXz+NRhJ5j3cv+0YD@=AI5bfY(VtaaMkDv=US#tNvMvO+B44UfT zISb?X7>)ELC)3F+WLQvBl9V-dKL&E09QWFjG?dX~?{zA9E11R>7HkNh969D)#5xXc z?%*>yCY9Ug)dChQr{p)WIEbV zCvZpzBM}JwtN}HpI(6AW2ev5hk|*v6R-X`h)f{e+2xfS4RU zp5ex}TU-2~9i52|zf8wFI@_Pv(Ls1Tfc;l<&GwJp(_TCL=VrIlR!H`ho^WS=WP8x&e`Zb&Uwho zxajtAE+_VJXb9liwU5JaHtgekdmyO=EZoOANfmsWK#v&MxsUT{OWwXsmXiRg>+IuE z7nkkhoQ>_{{j32s4fb(QJg*Ni6ysS^8zh|G%(*X&IcU#%@cJ-w8^B<@!!ifi-ec(7 zZ*$@0akRL-;gM12eRokFgKRJJvd9Q>DrElAuG9wEcD`*piyb%Igk?#x05W)JAG}5U zz42(Yr%m0FG&~8;-KkQ6-vr(YXiMM7_(C#nkLH1=ls}*I_tp8A=YMxc^gm1-1BWPD zd!n2&Iu>)fHGYzdhtlDW7@u3wEr(TeoPJY7k<$QOlyvvEz0V=R1-Q#Lz}>m^t5`m9 zcZQneoPRBlZ6y(yT?cXHbTY1-j>MJw8%!Vm^SVCAN`|VN~bg_+n0G0 zq~cmt1sQOF7#dW55w)eFw#MJMAZY*V2{X62F`tRdf62eZ05cayla z*-Q@Qb?F#(@jJxn2qlq@l*Va^^u%=7j9h6-$k&~dqb9{UTlAx7gVG1Q@l0jp@f2Tq zPgVR=M@+?cxi^)>9!4 z!<-0oe6)p!0gcY3A#^_=z54-8IgfOnvV#*^p;CVtJ$y_%i0zB*XC4k|Tf7(8zCI4! z4SF{lMD=#(Bpo?QWVb4gl`-lkm?qhFyd+A?7VXSAdgS465D?V3cME97M*GJSB-fci*ItjaiPQqg8_#3Ll zEY&PF$$4J0kdxS+(vIZ)xH`MMTB!0ilHrNve?}F`P9drpX$#|;}1?pzld=BQK9+KkF|%Z@rzeN^mtO# z>1u6u6RCq7LD-JZY5tRSHTsF{*ZusWxRBj(gyE7ldM@@;nq_na{<~D7qjgS1W6p8F z=qbo}9Tz#BPAwUYOjMT{)D~Flf3POu(1KR6CgaSa|3P?SES67>;u>5A?yPhvJjh#IAVJTm$_eYS5en@dVdm* zi)Mo>lxP-Qp+vX4x4D-8+WJV>pQc2^O0r#tBS3-KPte( z`m$^8r8;PfLSAwZjmZ(K_+A>5YiJBBthmZ5oPy3a({HT@;_K3FZ5Rc;r`gcz4BJSGtHlNuGQ!Q8d&m}MqvuH;q650p=)IY_cpu^iDvh`!4#R! zCD?xReGF$Z{AaW5+Kr?nZ~kal`i4OKFOX~gK$O=H=NLEKKPKgMSbBY(1$uWFn(h)b z&8(y=%s7dMa+wC7428^0&8Ca-R?|Yb?WRsS#}He)ldjp`FYo8gs_}evG2-hC{_gu9 z{9z=ty`fX<#?P(b8uOslt+Wzrc7HKELPD6x(ny+ z419e4@Ts4e+thv6Q)kg_XD#2}_cl!5sN_Z^OWobgP|4jQm0WzK`bAW7H%29Q(^PVI zFqPb0OeJ@hQAvLQ)d`(*qv&SZwXsw39g&$gblOYJ!3qiQ96xY;`y}ZR8GQTrKnlNG z9^W-$1L!6?vXeQPn&8sd0LqfsfU5*UY&y~%ncX9UA=Drk;+0J@J)en`ku(!2OA`XI zC?U|?-KdYY@aQ$DEJ_K)`jkLSreTsyjr-QKH0=(f!^gCPILe8=#bAIq+2C8xwtGN3 z;12bz@9*gaRBulb7N>6G`@OIuq~qis;Q}2EF7d6${AT;TVEj!%sc(Hhr%75gw`7KN zICxC`Vt8yX_1;H^JACW0yD;?^>0!8FR`>hX54+y$C>fE#@r2d0J3DpWx1PD{SIJ?% z_30FhO!~!SJqhP<#0h>jsb~q3Gc=8gU#?L$z1b*CU zoA@uCDB)Us%=>FU`GiC8wLHCH*?UiKPB(aZ+iI0>^gtdLslG$BL~qC_tMP~G{jf>tFra} zs&)!ee^q9V#3juR!X>&>4NRCjaXC2s|2}*zSnM^3$@{*x>!J-S_@Rg3B5c3;K8ACY zI~?mr5_t{&F|hOvfw2B@e;mr|hjWzo;vbRnIxHRMuNtB0?l3gnC20B@{;K^@Ogxl} z;;Yi3m_Mq&D*H+({~rBS*-`$g7dM2QqT{nE58CV>st@p26(Kz0GI+!> z{;KS9cY$4q9hs6H?gIL2xI^rksF5k&F+TCl+#xpIp>7pJay54d@-^HcHf19nncXAZ zAw)dj*RRL#6xk_=r1zU_IAQqumzi8-0g12TxZq?ZYRKI)V~D?J<`8O(I)KJkp5fuG zH$aM5{&HGOu1T?^2rb_ywU9Og&j5ZF(4<-*4`BpO~os}CA@OENq;)aHUo+`VY?swEv3Du3u$A}M=sXTdFxvR z)bWqeyEkl+pfN1%Q-0tTAX#_ih<`SDM;MkC?X4yqD(%y*f<3=``tb3SbuNWf-R8Ce zVIq7Uo^IXsI19hq{4eX6{;Mc28K%_13rRw8@SF%U!5uu4-TP}th>CJPBT1bDC3mSh zdZ!IBJGhF4dG9qAVYWLZc77Hg>+<=1Wl_jz?(?jnM^W@*6>gc?j@t;KOl?Le)7~v_ zh)`&4W%XA!(e~`sse&a}r`k)?0}^@VFDzeq6`>HLR}l&s`W*^|i@HrAj58qy8GKoq zIh79|(+)cOVqXSdw%}zr;+H1k1+sjdo*3Muy2(3EhzTfKPUTYRM*fgu&mmrnMx3?% zd0^R5cU|EW^$;C=*;Ueb)~(Q$ZYJ>+>~2L3DR=Og`nBR;?92JfwhN+dcNa|S1?hcR zoNk!450BA;;;CGJ^9@XpzxC#DVr{jc)(c+HLsI0&om}Q;6*ZMW3G-54Ba2+QRweIt zqQ74cmd%3G-yOY@qafHNxJkNQMwC0cisTqcH_I{7XR{@d9OEVv+gsm2o33$9k{k$JT;syQLcfJG+`c1fA}_AY_7EPC!X5Np|Vw4I3`avk~#4YB!w3*0av4 z46V6FRY=oDP9LRWS*sG_5t5-vK|ENpa3eU-PUzk28T2kDA9}c6(vJ08D$hoLPy4ag z3`s^80^6`e64^#F7B@7Z`d~?(#JmmCr?*Xp*T9B)B=nz%9S3msG_YC#vC#1)^#z)L+Vf_NShE1^E=6 zSDE|B#I{3c4cgtJv|2P>ptWMRyVX`VN4?&PjU703<1tvSxt8^pSxF9L|HIn=_p*PJ zZ0zpqz$%CZ-7XLrpJ5UDJ=y;zT|`nCa75GN0oxuHj}~V7VBQti_P&)A(=NDc#ywti zc(Y}vrIathCh%n^xjIOWAQU?rEi@Y_1n0(jfD-i3`XPV1e6NT=ImTKPH3=|o8{Od$ ztk($~2qU2YmjhvqRiurGye9PwSK>vh2Yn2YFs7U67W|>3dhz;5JOScYAnKTt+PK^G z9wPzu9pEw&L(!5SItm@kz{XHJKg1(6XA8h2yFYzZay=1QX5parp6pByYNe;IUG0C% z@f-{E>@ic(2p*PgHyvZHL;K8XDc{Q!;R)I@%epl4RUpXh0yj0)1!B>UyK!&|9TryC zeQfJm4;#WaVe)Rcn{5O-jB7*gcmY8TM|Jr`KklAr55eo!FTw)w`RUU?VLAOH|4@Cj zNy$R5=$-6g?GE6FvWVbmzPFM^?6CS;$o`V}i>zIS>&@FE2$-^NyM{Zne5)S4$U8zh zOk>=r!2t|cAgMzj8!;e{o>=(ffj`;d!P*2EhaMj6l@?YU9!Sz39>_iCdTNLDB0kmJ zewgPjS3Jwn!#ug-Ft2N%zl?X_|9I|f>wo(mPMkZZ$@KcUq0{7b{5e*qe)0Ys$0R)) z_2-bOKSv-F95qK<<)Ch^F4|U(pcEwsz6ocg$BzKjo;;h-nmc&xFM-7_CPEP15unbx zBS0laj{pH|1P9vj=1oo4SvNHuF>Y$scIJNa?w~9*ZIXd$6B>iUv0+oMyf(s0Uz%+< zYsMXL+Xy~9z`&vTdi#bx$Pqp2bdz;M)5DA#AqSVqtA=Kqj2e2*Ik8hqG`-BE0lZ|j9u5OI!l2>U*B(#@){K@D?zClSy4#dtt8TVr zAose+kfG@&JH{*x4Muc`6=T=zy6&%I!U#CQ1`CF!id2IIwG z?31<&X!g_H0hWpjManB$DlUaA5p%x>R5_*6DJ7}hY1Wj|dDlMn&Q2^2|3KrUFgc#DC>P3D@GIE8*xyv=tEDa-ga4K1HYOM#OAU7mb#=z_b7l z!aIz)yrp7@2Qnzr{&;j1Vnq1I$ur+}H_VYn@n1ew#I^Zoi_9&E4=Yo1Cbe*P4KoR+ zuTL#>h;}}imXmkbr|Czn~t_vUw9vXaNUMHDi=f9IuqV59?zruz4?@lw5h z<7L^z#tSdjZM@WsZM-Z?$_zGMmd$RwBbNtYGyM)o_1MOn6bbf2sz*0os)rjd77e!5 zv`ze1O_XpgKDrW)Ze&{lNlOhjUMgEoL{+%)LQywEWU%ov66}9ej&8h3nP4}ha&+UR za=7tQ8SkoTqxi3wD&pFFv_-D9@zTj{#%;XRnV6}V+IXo5H(n^WxbZqVI%?x}t!>|U zsh-$)srZT;FXf}?ov#w0{x$wLp7!YLWgj|t_s6_A8@GO}a-DrY$o3<%)kZOZr{DHZ z>#bR~-Vb4i`!i5YZTrxyrH@rM9YpLZla7UaIp>jUaU$yx0EStQ;LjB7!ssp)5)`|~ z;_&RmrR<)=?;u5z5Hd)S#3k*1(Uagl@b?e3fL@$lzl82y{`%qh*Zd#(r`k$kfoTgZ zTaHldHU=*_{_D;;-S0s3=;RVPCZ(wHk^@;q&5A00jAxqqBwHnj<*&-!hNAx(^hwtB zIT$sNK23)+Yk zu<#9hVhuITgxMYk5FI(G{Se+XhX98^F%?{zR)Wk}j?fP*OC`7Uccg_DoAt+c2U=`W zGwe|o8=QY*UFBBJzcW&V`&6h2XZ^gJh$5mlt)AtSX)&ry(?qK$$*WdzE`R&*!3h$m zYx#$maj(Tt3%vXLq1ArQ#k=S7XV8M823GlTuFVx09e2fP_R`;;yv;)z;7)`^+>0rB*a|;gIOJzwKr{SAD%tLU- zq3Dj@_9h{O3EptkG2bId_h@vWlAWy2w=|syV`EbRL}laynPe>YC69^6R%JW*tVcrj<( zm!ZZ$JE@3^G5DaG1JH>HZ5}T%?Vn_m({c56G?DM%?D$AcWRr+AV~LpMCLKk7#|Isk zl1OmOK;>#8Ip&xFJKRYibH@x+@{3Odpba$f!=G8iceZ~h7})+PV}b3TG9K9eDX4_* zvV_+di1K)196_PXk`(-;NMMv|{}b&o@Kf$1IBacuE#Lc=O~?Yese&C-xMd=+cfm@d zcwp}yMpA;sn13fi5WfFs6XWIV#~Wo4ey`NCO+ledCIWqpul%L zlvGr27yr6eYBg=77DF4gnle$F{TLiF{)(|Kgl7@-Hm^!e49|=3HxtIoI4M=*v|{%wlK{-!{K!cYkteM|%r?)=zS5 zuZ`ZIX}&$(9SEIiN{#kD56Tv7g_I3#g_N(E?8m@wB_5*mFs8OVIyez^T_rE5ciHhT zc3H^i(ls5Cg^bF5eWdoMbbt;;gBR2}fVD4n8Hy;|V<@8Wl?s&khgVdTdPq-XE|w@U zwNM@!Y3PR7HLUqV(B*C;4RkuGDmg}mOJdSUGoeR6VgBTKJ-REh>2!C-LNj}=xU?nH z-COd0!$-U&PYE`3a!aPkmOMUB-X7tN4WNi`THI-14!<`D0{q zI%;8UTpmX(EOxbp^;N7k>&Jbd)n-4=X00}V4kHRNt8M(p7*VjpD;QCTVHX=wpba#l zz@K$S6et)NQHZ;W68?k&9sKsEwx9;Epenh4^ZFC^iBx4vjp`9b!AHZ#oQM`DnvF{L zR+oSR`u;8c`xdDVdc%J#Oi&Yqw7z#O?gN7liJU!&{}Yx+KvTG^&8=WoyN>x<_{9y31!He#&`v2;QFCb?_!x0~o}XQSvLW7z!f=U-~KBYc{C zjfb40Z*eMM_YxzU^PaJe6B`*28yh^f4{*N~ZkHCbV+l5D5pof2LM{^ADvkT53b{xS zPQd|8vB{ zGCVByJq-fhNgPd)w)x8Ct{pAmT71mC@f7~VYZ@1X5BMeBxZ4@Y{3DFt~$ z-={>}LKHuH)lxvvqocF{zxY5Tg&xyFkFHS9)&A3-S7>`&VOuE2#!A_6u$19wDVrE> zf3DS!m$Lizz(o7=l8OG|3mH9;_G83jR8M3pLQLrTdoKNAh-f$Um0s>IONJ@ek5h&N z?L^1(FHcbB!->8L#K{xA4^Jac?9H$OyC0cOLWa|c8u1Tlcz-{gVW#hPIzbh-LS1kI zYtM@VN)O!Uqdr%lFleMiZG9v-+4t54D9;vna||Fp#?QCxe(^{s3X@bg3iDYc|6eb8 zS)Pk0{B-_`djJUf-_hggk#z)>q0N(N{`d2^@u3DF@ z`3eI#0NCq-i0HixMof=<9qK*}xK)^Ym!RwL57xh}%azRBqba|T#U4AtxPS5b`$zjl ziHUbk$Td-J5subB5JlhBA3ugEskf{;#L_`B#=n+jj0ETuj%^AJXwz1SejZokDL;WE z@vKi&o!oii%ohD@3q1SeY|9D_o7#7uRl1@602|K*JK@!Kq%ynihV)Zw5Ut<;tFxND zSh%A6lF{riuUZ^`ZxFrteb4&b-NpMi_EFw)C}sfaRuSq|&7EfZb8`Q|!GM<81k1j` zxDm#2z4$70^|u=dho~pN1M>J?!1(4X64ul203Y8!h~t?8ufqwf^XE0h8|Y!Lz;!j4 zP_^1Cb6wAPg1&2@_}#?JW5vurBNg3!cT{xuJEx+#E0PjC?`M?<>_NZBv7cIxgYRqT zu#m21giTMRA|vdP7T2#ZdEX`7o@Oqqy_O}{;Ix?wXU*I%-6XixY`a_jvbOq<*#EzN ztHT$rE)@UpRDZO9x)$mxEERfhuIu~J`7)lHwu`QbwIlCZcyn3zp+{W`#oV=VktbdN z%y%%H(4HQ&`v)9pPqXgDn?KX|FJv8EQ`@*ki0D5v`e!&}hm6|{eajj8`267$%*G=4 zVIotk{37q3*xB>#vccY|o zH%%&c2b0R(#iVj~8L9lxh4l1^&Nu8T+qL|5H4Y2}Te|Hn1feVQ`{%CUkwe_75%(iZ z!=pA2(A?iGjt`H;eoEr!b{+@;z?*BfNW$Z}lL_Fs8z5jCFo8Ycf|D+fryi^_`}?u& zkxLLx_hXzol+zUF^Z=w&Gl)1@LH8$}|D~L|H(;vPtCK!p6FBM3cD%=v4x*U1&q5cd zLrx|ns!N-)k$c4Xk|Y**)4(b1A(Js_5r6x&Bkh+9WViruI2)Y|5_nUM`%ov1YF z-rPRC)V7GtoCx1~_SJ(FId-q?4*|=0a@cPcy(&H|oio-|1$G}IyN591%Z#{Tpbxz0tsx!;0J|QG` ze|@-#jzXi|x534}dJwA&HH}RdM_r0aI;dm143%B1BwqAVIS<|{y&(3{zIRos?h07a zUxE-M0p-K0BuZ(?+v@ht0v9R{e}>iC%X2>uudp$Ltd|y;_&M!*iJvn+-W@3-&CcAJ zW;S(Zobl2O5?BN7Z1{&fBE%Y{i$9pW!N|NBz}7myflpjeDxV5;M?aBOg7Us z{ueqxe42az^ZVz|?`KNb42{_|O6`pF*Q`9dr_cRM%m~@tv$9aC^-RQQfEH&T9Yp?* zhwtON=g)Dr1B^8AF^DC#j-~kLP4LD_``wTH$Mmwk`P=HxM9tmxr<2w!TL&P+Q1#U# z(LMW(5?xc3_>HVlirV~}R7UXsSA034Dzi4QvYRTrmP@ zSes!m#=)5ztm~4RxVtygOX?iFTX`0)@SqvKJOT>|88GLaeZNk#zvxvEv?uUU62@48 zSl7_Rnm+YRZ)Yox8*>#iT(_9`412~2Hr)hw+_~{7vlpR}>m$)eIDY?V6HUkrp?1LQ z;f;sFtZ5?E8wosQeqm;_+X5DxL9Aoa7JcvQFQ3kW&GBKb{OT7XWkl}#fD1suNDy=@ zR>-zD_fw6mT6{bZ`Jg%bxX%wDwkI98Eew{{TFO8e`p%cmR@dBI;77Fskb&6P;^)Vm zBa5OXH(cpvYg%o$PwNHP8Hp<11Wp*TIAUJf1YiKxgtcmSbL4U=c-%(?kB$m{O!7vo z>n$}at)$fUB{eOuV z6Tw@Xj}E9v$fkaZ z*qo5PE*sBwA)8(*h(_0an(to_Wmgg=>4@+|gOxj&-Bfs@7i{dH-R|7jY39t>S+cRi zgG)Ddn%xg~6V|f7b~ouS>!$t!o{{^u`^&n!ySD8O*Vazs%#G8Rbhm}v-Pb9fBr!Ah zvH63gNYZR&!fg^>x1E^!#_n7u<2Np^vDpPT^sceiF`aHaEVy$NvFQ-T-NevH z{iczwMq^!#MlyeRBgpi|+TKG>FdVod*0Gqev=v9s~S?LI?0paRd!7#qsfA^Ly)srci|KybUO)rLMGqF7X_6ZIGnfKR!RmJWkkZ)Y0OvT>e83HexX%`aXklmFs?(l9v4pG zz63gOr$u&_kDeoS4@Lg$)J*a^lrSgEQKywijturo2Z#P5;-!(1FbQ7A$6LodeBF~( z`|`0Dk?MZ~WWVL_-u)k(+H*^6=$D;;j3lfP{}%u1`=QY>FPyJMqb;?N!>Q%<>RGy* zo9w$8LYY;g?Bbtoc#<}jF#oyrVVYaPei9Z$!b_#`D~RLc@;IF=vO*-Bu1sQ)=n_mM zA|Z`M!r8fkipzJ+bKizl-`zYehvuD<(v#6ETt-SU`E$^C`xjb*_g@u43d zrK?wS-_-bZWD6rYQDX2)LF29zG_fl;G52rXlUZme5w5y`4-2XbTb;dq4I^TUY!&Y( zwAUNHUB_TgMD{YFJkzueX@iwwOb|S80GvWkeI1$5# z#TgE5__%$t%W$>Bi|&=fMo4SYH?_p;zse#pUu}_4`4;~{DsSz17NCfKpQJhIwLf{-oupl8Qk;UjktMD&dvS3b*>^%0HygMi$w`>L zJc07Uq~#er^W~wpApAopERP)rv5N5Er0A#?h(U&`-M>zP`NK+u8Prk`J4YZW=ehS?b8ket~HFc?e#&h&_?|MZAWR3VPCdx)ctn5-`4&~)LVNo zBhf(#FT17IsVPAgiZ*=!RNPGW%NaigZnr2a66bc?MxxnPl8bE!LPL6MVBc)iiNBq1 ztP?)ygbg}j&VCq8$n^<=MZMWu4nqnj89nj0_~-4k#DLdt|A>D;<{2=ok<$0mZK2Tg zBm8^PJ?AkhIE+-py9F$c5j4<_=@SP0-g>D7PqyOrq}RT=l;T6bjRHd8lLeKi zt(3iW-PtnO2ay4v)L4dKuTJ2Ck8Li1G?OW$85ZNNK@J}pG{|j(bOcgDTS)N&&n&<( zu{g#jwmU~}&_@=aAhRgQxQ8_3Kt%VSPwv8KBTgnDDHKuQ_hg{YNvrUev2mz|oOHkI z85CRa_eT2BK-@jl8i{+EmUX*Mp>9ISn(rXwzW*L6ngexCgVLU7em=9{NG96ZUZ2F| z%I=PQ@>k^^w&raJzKzEgl=SqWJxuZywu5&Fd=Y^5=HaKaXiXhUjkftWo9H|^xki|D zW{$aNwK!PK`9=}ewrtaLB3!}sjO{(puTL`npWi?oqNmSoW{&nsI2TkfQ6gx{y0p2> zq=e+%ji$PP7>+Nw)l}r|m4IX}o{cDfjUZ@(-oJXB!Qx0=(cszhM3IDS)RoBwfe*YR zDP7lP;)|aYoWFBB6{EbD{+26~>9i3c_O0_Cl%rP?4&WHMK$^;sVp?J?vy@(_Z2bU( z1P@rdcUb=+%13K&o16^>?E*3_UB9pYakdN+FE{I&NXq>M2A_0N(x)=Bmk|sz{UZ!+ z?t|O0DGMaS;1nsi%{eI&$d+`-`TTUn&wSItUCn8muiT;0Xo*K}$L-J5Y1US-Cl`YQ zZQAA^=*skL5fp>5DJJO@d-Z^2(G+)TMSG>F!6NSK)I$1T`}Yo`UQl;H_M!~+!?HJa zc1MP^(*>A#9i$+hTm*E-LM78Hq`g(#T?)SP)^N6B>zj0ko(5&)#%g9(PNmz9n2x8? z1XG!;R;CtKYtM|QAhz-A)9kHVJ%{kruC*-;(5U?*#Sj%mhoZ`w%CFKTOnW%+!!8Lo+>lWMYgfCq)8g$p&$K?YbOr zWh@%-+_X*nmrs;%Ek3#uKiVjUmc??uZWragW|SrgYxlb-zNT$l6GkvhvRIB04m4)5 zjHN7=VO-T9oUA1jFC>Lx8($~4O*4Yv^2Q_NeHO_3uVZ(ilQ_xVd_j!Qkn!3b@xV{~ zm#3C!0G`6EPD5|2?tmQXC2r}qDSZ4Ey5xxw1D?cY3S#7(6~n&v(mD>1WpZ+WOw3J> zt$NS^8JY@kfQ*}DfbeAd07G|p#@+{_yQkpAMv;Lfv-m4lLghN zEt3t7lrWW-NmEt6!e@5_W`1IzsfIT0-yhvWYX&9` z)0sF-V!)8S%|SU6$7qS5sWx=1-C1R%45qg~K}oM1wXtS{2rwVM=4`=j!Bh*Dll!+C z)q+)`1^;MM^nv1eb^&Fm3Arbsyf+yt%htyncM@#qlVrQw7B$?)^+m?6zxg<3Y;R=? zas20`bz&I*Nm{9=6Q@{^de4SU&c@#JDE2;$n>;<9_$F&uOyk)-GQ! z>&3Iy(buMS0$|F7FfMLzAHL=@1I%S4?$Z_68FUrQhI9pF;9NdN3y-^L;k8en=lw@| zpSsW1SvCkEzkD*+as@ZY5wQOL^JnyuzH~Ys_f5xR?xQtAMT1Nz8p#ej2%D((cucl? z7F6BBjpr~j!Hs`(Iv3*!V`gb`pXJ_tct443^!7SN+uZsF`gC;o!)<%5&8_MTf2zll zPDkXo`jGvxB?vJZQn$jn}z$dtc$lI&VNojC4nW~=7V#_^|O(b)>?)(p@|3)!To zgb8V04`eIM3_UMgfg+#>0nMAmNSoC-4rey-487Ux`7@=HLBqXQ5DmkVX=Va_jKVm) zf*tFCP;4`-G|TR+8cQ>7|26GT)M{xulvnr&E1}O5Ni}H^^Aaeh=M+u*dVDA>+wQxN z42AVS?NGEB3`Gk!6qcn%0eG@~DA*8Py7XiPa|gfx$J#8X?TI77q1xTr-B9gV&lVE%!+SdmAFbz6ls@bvM@{YbgOci`rb_nF znIw#&j$(*W(`&!?p0$1hI{S1>WZB1lz!qm>|E(kKj(EfK+=1a;{zJJvZ}XYo#S;6) z!9#vWT@nBCqfay5&4kr`N&G0Jzs2pm^_AOP$&7`z=)h@V0w(8`uwy2n$-}3Tuvnn# z188;xadz$&VruMs^5CR(`#tvKATlmGtM;?sz*Q{8!E&Aeb_%%?H0-{Wi#(x?^&8TtbI&;k1hj zr+lE>LtBGbtyis|!8R<#%?zW&9>;ro+}+#IFlT*17EE(A47;Vg%jG?j9{82DHTl#{ zw4GW;(wXai4CbJ6q9IPTaBot6Ze~k1V7Z2c7$@LrdaHA@OXMvBS^0Jil8 zHwu))#~m70FV3*FAtLbQ3QVZ@b|rYSBg2h@VND1nm10<&*-L~5j}HQ-eX=8iibdkI znB_69xkGvQ1D_yd%^u2A8@PwHxqy#{pToF76!6-! z6HEr`FhB88T;8>Q0#G1-s!seq3G?qSV~kvt-q)Y;V$4}l_=gEcsJ8A_KlnggM?*I> zm^LxzoHEwLug@P7J8NfSS>s`yK+_(l<49@x5V`_>@4tDk`&F)Ut@_)w9JzmWk-pCL zKJdSa-n1&Kj_+eStMtTMhpqo-bP}uvp6d1c>OWv78ZBm(tW}<<-`Hb(S^-VxKu^s< z?~>v4&!G!mQX~wzQ==|;N#H@(bU49Dn?7;ZXo)^^lWx9UM05zBI<& z5zG}}$AZz>E=W*j@HOns#`_8FWBG)}v={b~v^%)3Ch*pXAhytM{KReiJ<yn_YwsIaUUk_5Dpb0i^tYx=?5Lt1bthOxeHO`7jpOAP z#6BW+Y`z*Zm?tC%Gezl#xTC(*sf|!MaB72RBTj9kcS^QJqBcUOwxFPEAJZ4Bi4v|U zgk6QlK!YM~U_j{sO|Ssxm>Pw-La`$uVcsYHWP<5t%-!q>Z|`g+m@|cPA^hW^o>+-5 zpjMEf0wto@(aS1dld*8tYt~;ui;_kB7DjQJ@E^0yo|H{V(X|dT!=QmX%+cR1YTD+k zxbHdzE;%(p_#y}7 zWQ|s)tXais%Bot_b<;@TV6v9{C3~O`r9kdY0jEL6feaC ze<39)^E}H;)?^JU%Sz@FU5u$HDkxmPR1flnQbs}xWmXhT&T_*+r_rWR87G42jJ`Av z`bAk)s^Xm0O7SWqO(j9lXPnl=NC1MqB;*0b&`J`m8$t{KUKIiwshWxupeayZaPpF{ z2SNdS$*2-p#tbmCoSKr8tj=p%@Uq|l0u&SvghN496T-5lEDKW^B}%~yNlTrxI_HJp z@+DCZL_)zbBa{^-j6>&A7r^kLSK6qOaZwcoe@V;((H3`9<$x}em3gC7E(~iVe24W4 zjK1KqdP&Ix$QFunZ8FV8Aps3F$qSeWRaTA8K;2;t4u;YftSR%1XC)z|rktCm$q27$ zDYVE`-LRLMK4@rAJW&2XnT0?o4%1ncbwM&&WLlH5rdchxb`8Ab{DHFvP9HdV;MoH+ z4@^HW^}yr<6Az3(F!sRc10xSCd!Xil>IbSGsEoTQn@ZQL)KW2NsH&-&0a1uV%@lU$aP*Su!6WHpdQZ6VNC zLx3)G4Fpy-7@<~{L@1(xrm`H6plQ|E?#(qJP)wLg)go`Qf(faztmZriu0$J_)4D(i zBzutXFL{vJm7%FcC6%cqt)=8eSyJG58km=EG6Qs3S!l$A<9R`sp32W1|V#znsw0s?GJ0{<3`Ah2Hm$B{a(%e*W_QBxW(`r{FRdyUGf zTys;xuBK#@S4C40V@zG=O_?tG;~_8#XuARNLg)&Z4Tu^B_F!p>2KGWg&D^3t9vayE zn^IL}QPR9tO-?~9fpynZoB?~R%kf2jg?Y&vp+GR2uL%gf=#?(8AG8%3%kwL2B=%AN(jKYd26C4~ z2}+}2#09HC%hN!f6-bOAbHL7D(i&s{Udt>)2}&y{2(t#Oh=70~P#~doow1UEa471c z5QMzcAPMRhASQwQB#5bV3X4or5X4}wZ5mArTGjHUArB_Q6+t9Ql!TX5XaF5VJgEc) zHmD_@KD;#S!Jsf$7L5Q2jFg22kxi1CLHR-vN~DA@#F~c!YP7Jij zHOK%8BtnqC3@uBb0U{eBVIDJ(a5Eeg(ULTUhF!WeyrNtJPEB5r+UUFj0U3&djGIZv zWC0)$DNL#As;Y^urC@+x+JHN(3R*adUY zAO!9@fOPmk9g5#kLgh4KWl0gbHTnYdLWRt?cLV^mg zZWThHuK)q?J=$mv!Vk$w$(RJqgfY<98W6)|!yE*RTo(#c<3eg0k~JU@lrp0-hb6=d zMyX&(Fcu1NeMlJUQF+O8Rpkbt05u7=s-|i{jVu6HdmsTeOn?u=o=t4e8wr$45R7rv zgH*<0o8V;*Y?i>*(ZD|H0g_(_JvFd^3Uu3|(6B!#4s0W5RbCnp9u#n+z0h2Qq7t^L zyudX}O5Fg1YzV9%py13X*3X&xdT5fmR(YAh7EvLOl?2!ysC-Qh+m+@`;~?Vl>q1p> zrOR4N0WwEn7_ht&wlOVH-l(-UmqK;XBo=wi%Ph}8AsLg^NR?3)3|au8Hu7v!8}l)*#`5M4l) z6Aj3&Rn9zs{F?z-=1PF%tXN&k3gi?Jm_cK%r7;<)h$#F5QD2|0$g*KZfgZ&x2@;`Y z!KAF4tjbVarkxb?O`wAXQ4kPrOqLa}Z`E}}3k~v>W=-DY+{+f~8$u}Z40ILP-%*1B zX%u!cQ`8k>qy|Aq5Cc;5`diWQ7!IS^b8az`a{Dx_AWDbb9OE5Gf7hDroN2Ni|< zcF<;0HU-H+R{_|#ge|xdpjLr!U8<6RlJB5}wgmIg(j%a~Xo~@D667g{>Jk;Ov7nx( zKok~+f$~T^nF{`00j+96YpM$(h&Ehgc;LZkkxLFTGpMW{Xs9SM2Q=5;4(NcH0v8~< z!ZQsmvL+`v2c?rq1#6Cja_b3NLSg9%T7E-YK1G#lqfGq5N;SSJv4X{MZZ0uvIOa%Dz(%_PGnV(vXZJIS!K@+NbUe--v_W7 zG$pQKfl+3d28LjYN($JrnG{u_r~{UNKL8h5S!DtQiYm_wTA}ezfeuQ!LaQzs6R~UM zjftWboaIDkurC_X5Df_;bPrfeEeBQt7E{KNnh2LA#?eFJQ! zP1JU=#n!g9we4=rt!>*+-K}lgw(-=qZEkJ5{ri63m;A}(%FLWQnPf8e$>hvA*QE_9 zUo;B~0$B(OtNEG?qm*2jCtp@ZW+kB`p%IW8E8OBv$9#+x&eOmQx{B+plnO(SKC&k@ zD<PaxD2{d<3Wl$c zOA6yGGV2K%8VZK2Ktuu~^5Y$wU!Gq0If!pgoj^=u42BZ@*q61(*KI2?6BM|YPG4UB zn}^|m6Xn>?fbAG`ssBlUc@ozaYqnNHAvJEpI3Fwy@&cGfA7xKU+C4wpix6j|DI5li z&2Eg99k`et@Ix7mh^cjUcKZgpsC*W&5X_+)0|KIJP^Rj1t`@KB;GP_UDZqaN?i`ta zhIP1s2ao-Y4*|0c^stiV{$`Icq={CN*j$H3UnPxHZDz8xr+WsCQ9}Rydi0YBYX$&m ziC;QJUi#X4We$mwj^Z1R)0vGY4q=e$pZW71L^z~c5Lle69kBNSB_>Ocb3X=x5FFAd z3)!ZwQ!B%yd7zQ)xp0i@VS9`%gec}Znx1C}nyG|Nbj6zV+YWWoQg;b~kBIJ*YZlzl z9DdG7#a}x$Km-bj1N*p9?7H5#IV)yciklmKhLeh&R5XEuAe#)aQ&z~<_7Sg%8^i4(yv_M4Xj{dsx{#Et zF=ayEG~&4OOI`Q(bYB5tI?GJ50f(|2gW(DeRw+pQGC)P8$@F-~`jiBGkJkLKCBiL% z?KXJUqAm#II3!iN+;OzAOoFbWgZ{MG7$DU6OYYq~L>AD0+#!*GiA^P~naqXEmfJwg z_G$_%nn){az%<4jY15kLgq;<&P_B^sVewousw`Yl&q^`P#a*GA?Fr^#OQ|E9CkC5m z?Dq*KJF842G$s`%29}569_I;D#L;N`n+EzHn}y|KPxAn!1vDkAqJ!!kUh|ixTVp-0 zWlKh^MUncTltNe~G5cJ=JTD6*YaYz!Q5r~Rp6j*)`DlGTHS76XyyZ$)YgyO?oIbTt z$E_iH{$cRmCMAW)-JGC;{LUFZ zWqtXA=pvHB!tf)iai#U+vV(dhArr4hX~k*1$ShxAw+tP(c@! zg{ELOsHbFF;2tk3XO04HgvYn8GPhvA*_uX8E_ zm*HvAc#AfL*F_bU5p$BgQ;dr@l)_ba2%1PlTbRTFPJXioJ4rc=InMb`$Wd#WX$VJE zN~qu{U?GWQ`a|>^G4c+b*l<@{g^y5Yv*F;_Vwv8dL>e+G_)$rusj_eQJM<7ho%e=f zN2WSBeD8o+PmNIa2rJam5YW=C8jZ?PV>yaMV=6U^7*rko8M8LL5|Ob-#3iH2?$|c& zplPYxINz{m*>W@@f8tciO6MPmYXgNH%hTp0Ua=k}^iHK<@d{;6Y`F$`lkY=unLUe{ zZNrn!6hX1qXvCWF92Q&}L=sS_#7brWg6|aol?pDiVS4SEDWr3Z!k7r_4;t5oWTG=) zJjz;TSzPMCQukkO5L|>twSc#|X4c!rGbQNM@ zzYoyuU=-O^ika{4h9hwS^o5Nquvms}tu-JKFn8nN80h+1pv~x0yt<+wE2{s*K)ZQh zN~zT+fRwl@i?XsHJzxo=Xlx3;sS{N;;OeZtqRwA4zM?$@;O9*6D@zi@zBbMfK!s7l zL@75D=v^*kF<;1WN>lYCoVx^MRm+3tA82NfjAkJHkc`&X*x$umxDW4TW#Xs)Rx?F3 zMoJ6pc)>b;a>2u?WE{!E_U6d!1kXFJE(L|Sh2 zJKc_{O6|?yPhW%KcgXZ_P@et~RY;S4h5T(_4K##v8a{H*+La|!30NZGjr{)Zm)j&t z?9X0SHwkte{?nmGTe4nyVMhq2Fy{|MYvQMnx2aL9MLYM4bl^0ME;|hC+Qh&<@(lzx%K5|@y1driFk6R z9Mz9z6dbAUWljhqqcCZb#Kv({hRW5JX^WKymPC)j%eO;2wrH+YgKWX!Qa9S6;d4Xw zNu!z4dFkbq<+K&n{;CK>_8_}rwj7S_GY~b5Zb8Or{mvwtN&cz;(jQw(nx)@o%m527 zco1{|cXU(YGL#hqBmgams?3%##InjU__Os|-d=HlZ1`R_vpsGr>fW~S>5YOTvOG}uJjilfV30$1m7k-L0OGaxfgc`t+bwzoNd=V?IwQ&B0@6e zcAM_Rfh>zAfgt25(@<}f_QWA`Nm}9xF|9>w0U*mvEJaRM0gdiXhpQ_U#Ic1!!bcU3 zOSL6&GgfGhRi>gd8jq9p(?6~?=|`hVczXHXC5pj(yxuxU2h=>OR(;ng518J0x{feO?mqAKQNR{iz)mAq77K!rrigD5gPGIx`B zS{&aNMp+H;E)A+vu~9MmxZYZrMYl_6n{A0(v3Na;{wd?h8v+{AQf97MW~c{l23#2z z*`{ml_-%%E9LyYT zi9ys5_Fdfb?yI(~9JlRp+iW8>d2RY8DyHe|j65LLI+)6Rs*$5-8Oe8`KYOn^Wrm}E z*pa!}b1!Ks3ZJIO24lDjhckma%rNTKYWuNr{_*GFx)uu`b`Xxkrh|<~2PmCnen&Y3 z!0yJ;87vmdiT8$(?Tp<-nQ1k2R3Hz-mP{04*U$hOqm|S$y*T|1Cd?fUgScE$2;n0po8c6X86Yc$d_x5a-6531Xbjq2JRkt)Wb9bEJhYpz68k0OMHL)(F6gUvMHx zx+wgQ_!bd`E6U{(QL$ELv)&2pnnXN$uKwEQy`x zFgm}d0%!L9&I>{ILLp*Hv8g{xY$j)Vq^UA!#VY)?3ld*w7izvLm`s+@{Zg?v zdPC$w>f2P^+nf^SvCP&vp>v|g9A;Ypl%MelN*LJp^Mx{ zy(21d3oFDqcIv)FY*THX#)?i4D!p8cdc%=d9(kSw?i?Jh3i=mT!1a*6&M+D?x+ccT z%cn;{(*7=jZMO@e76}wWLky=jqglaz)4`Z>`ntuteL<4&7V*_Gp3Za;?>e%Z5o>>k z^R}_h7)syAYcLH|`*&%b3T@eVVcZWcYbPSvd{xyPlOZcBfi1U#T-TYm!FXiL1UIYg z^q4M6F$@J*x6A0d^?4k-OUJxnV!o&MH2Qna*>8t@`}FKjAlcQTbL^1sARGf8ClSqX z&#Cb8t-1OhzHi^bFgyAS4Mjk*McJ7lHMen_@tXfaNb?!H;1F zuIO zsguEDAOQqLqQh*^X192Z7JbL{XvTaV`Bb(cegY#`a$%k$~$=$os!)}M@ z9l!XHg=Vr;uU^SKhM-F{O{HU*Jci&dtTn^qusp7z=a5ka{z=SzLd(dEJf1^V@#AQX zX@((4I8(+ULAXt(p`VcsduDkAMf4mA$GmYPk=lV31!;=dBsRQ!C4%XC_h4)~NJBxx z5abJqn28_%Z!@K@hR# z_jP>5?ZN|`mRYiV1O;*lXAqB{esKG_->iCxZSc88RUu>rzYJl2ZS5U7_9cVA^#8u3 z8POoXwt05Itwb3yDvT~@{^oVu(vA@qs3lxMJcoJ|_sg=T)~efl%e?HjLCje?ZANdq z^3f~*oRG-DKGCCjWZmEq`J`+C-bRCSOt1}efvfN5drXg6U{R9 zBYl?rtpH`F>~_pW?2?aZT%XLFkJuM0WBQXSI7T{Pjr}^h*`f}*%X`mb4hIOAF#)rW zjbyZKMY~x4GJ&@Oeq6J7ara7d_y+UW#K@;?P+h=5@9pxKpanU^BmS+l6RwJuR$C`x zHSx#zB`nlrz#;CHijfj;3WFjZ=2>WJLSOu(*(|kAm(ZQS0)oKLS)qq-5Bwohia@|_ zoYGed)k3>`9^q=i*21BCP|;~UmFsiuwNEl>BVm%$6`9eClu@~rOpE8V_G-Hy8*nUi zALY8U6gCJ;dbL^Qd;?)}et~t_c=HaLZ#E+^LST$o54D=}`%$W3$+}sJ_=H#a=pTWg z#4zW-igo5J{T=<+p=>~HsSCE+N;tR&HsJoJ4vlX=Vv8AfDS`5KD{pWo@3|5fe zlk*rpw%Lt)yVW$1{(8s5-rH5XccZA8>C95Y*lDDvo_&@qwR##9{Tc_nn8C2Lr}9wx8trxo^UIo&>F(|1J@XDHHR6UXem6W=H6uaxljmx z#svD%T9fvi;6I{OjrZp`vP!VC$gO7Bp`6~Sa*9uSswzpZ7=@=?G}82BT34gDC-ljC zt?Cx1kREtTkBVZ5E!ioF|I*ByK7284!N-o?bg_sQHq~|h*Wt?LSr`O7k)s>ekZ3mo zoX)vl%{-JrOEI`5Gz?-6sCEA1WgGh|H`P+D&}=lpx?~aXy5$6%SUrnnXY^RMnc4?3 zWd41H{$Tw}i}gV&Omw1D*hf8SsGkIMdy!^aAw44<4euIoP9>p7&eJtt;)golz&009 z*|-8;ZN)wI7A7eSG8q;{H_1ECOP!Mj1G!odt2it?y$-sa#a5wkP4=HFe&dc8n~8?I z5oYwk^#X|3WOtBQT71JkX9CIyWFGQ4@>q6%f=C6c-+${R!P2n1;^pfk_vxWVocIH<_>xH` z+j62r!*k5N@UMOu#Az(bO+pm3q5fUEjml8+I_m8jM_J4Uq41@pQJrWi=GV}*4#$0S zhmju7=h3=<48w#cnUC}6aJacHerq1RQrV1*gpF!rs>a@Sz&4@ZTM@hRz7!8oCsJerND zEhP8~EUdvaC{b6aE$q-|?*^2gxVUe#Ejz9%jb^f#FISetQ#JD8pAO>dX$k=>UT#RX zLcJyJ!)!nzb{!#DwOE0ehu)fA=Yew6P|ASXmk*n45Cd^w^Jd^gsT}0C@amE(0XkWW z!wZesr&gDfm>kn17C<$XjYRfn_9>mSlxpfDMZ}YQ4L8*oMN!Pkb3%o8%9o$}+ywWr zaB|AWZ-6`q;Hloy!uylgTe0?VCHmj~>z2q$>rZz2K6l=45Y%O56s34DtRLv2HFZB6BX^`{0er#gMd30KFlA2}Z zcD$y)e?ckWKz0gTKOidVQZGPFR4H?hg7lN!=>|I?ka!YoGs0tRGbHo8L5G5C^vvA^ zzt|z`+VfWL68KqvKWQnxD_7V-imLwCyxx4tGPq=;@%RmF{dVElP~DwpP_`|JG@ibUZZM z$GmjzB)i)cEQ5>#TKagaMnHCj5$tri>);U+@qN`J_;va}aFa~{b#c>0aCLUWKNS)6 zPdLD}+v+X{I!rJJ5wceqR{a&;sAX5Js2*|Ve2d-AsM`}ID}Fw)`DzbSO3k^g`I zLSPeC@DlZjR;Hmu82AQ3+vs1H<*MsZWY7U~CF!MkN=q&YDhDCs+!9rD;8(IpB`$d9 zMG+adpF)qsH`x1^@CPviUqSQ$P zl%r>2c>{Je0x3ORU-|f~B|9}j>C1-}w-OdA;3a+6+c1~RkIP(NM1{03I~(&CvbFS& zbw2+Kf?k)H_ahy8_EhL36V7m8%!v0MHEMj|s{q z#V}t6|2h@QWgIr9(qfP^3s9i}*c);+IEuKh4HM}h^(0T?hj`+F%gM8F8{oh3pD;|&z-mIW7|D*ZCu?{L|Yi``b+lM2zZzl4_k_We%H+ptcHd9*~v}gsGhT zX;0{wh4Ntck3FefYP=ooC>S?VR}S2H9$8H!Y~F#D7d1NNPd&QX+1tANwoQ-ML>tem z#WD8uI71aHEO&2&aymFvOl2$Q$=1@5u`fM2GLcqPyP9vX8(8ajdN@Gp}VQ|U&l%QaXsJM9kn;+ z84vgpt2P!*@O%v%mPLS=dLh%lE-c1it*Bj9*bXcv<**u7L!Zsq9KW?H zCJ)a->fA&SaT0zelr(w%)QgmwInJ^nNw#2%DA?InBpXRfFT!7(WIjd79EaVgh{s zVjhu}JACrI%|)s)`fYBen&xnLRRdgrmFBTx0jwyLQIM9QrL#yye`Gw6c)3O7G$?Qv z&5eHA31lvC(U<$!v@*gROkafUF~GZ-f4CQ9!26DxSR0M4H#Y?;l_>$9dQ$Z^q}!t5 z(C^;NLmzKjB0?c4kIEAnJ+xyTrvm?7jpw~<1w7T^Q)m*RONOjp&MZ77ouFB6W52WI zcwzH?VhoteU$@QvL44tJLfQ?~zfjcl(^2d9+iSN*VsSHB*iJ7rA&G? zij%YJ*xp(xbsO+BiQ-GdU}unk?PK3D+Pp=FF9;S=t{*Ns_8PtqE*r-)wF(sIg_$$M zE$1vr1TS6#^F011Foz=$g2Yp9f6ED!qb?4*?eCZD@FT4te$jLqd*0Dn9I`lf0F}RH;_Lxgg63?R8R=+<*^_tA#bNCdXm_eBS!pr04DBzb$4nYZT zCN8KNvL#yYYOhg~mWEh+*u=Ebd49FQ;li}&V7_tZ?*9X!u;NOV{{nqw7@iAY%i$Y> zU|jWmGqY<5hO<~scA50s0SL+Iy;gbu)ZwGI)%c-hrKtvjRaK5E-SV-y*`>*Nk!H4je_twzh6``god}1?(HO2!=q)E6ukD+ys9yiAhJgg~Mb==+lvjN48f6WKkK-@MK ze!P~>-At<$(8?9DEUfnkF#fpj6X^JGZ98h8NVRB~gH_LA<26reTBFX&Pgr}F>uW?S zo@IddDcwKmMVt$0!J;``DXSEE^wcN71s6>W09={(G!w4!mXvPu-Db@-I8J{kE6UJV?qAUsW%9ALR? zyl;4X(w>;9DPPJZh~+;Z~VVFvT0IxkJ0(33VioP zzU}3^jg*?Rm$2-dR_;kHwn{A6Df~-``X1~GO!ER3`pZruAe+oFu~y5I@(#1~Y5+86 zgdOdj9NNAV_6HE~-YT1kwMmg_RG9BQ6RT`9#E7@aeVg{lDz3qbSmMq(*>6E0cW3YM z!B!)5httI&hiPmfcNQtz52%{<(#0&p}3vvy-!0e}$B z&Z63@%Lx0|uuetN2C>VpT8Iw-y$sb8H48Le_Z&Fn;5lJZ<#!d(z@$mD2_)A@U?b@@ z#3?hO2vbXoNcXezO8R46I?_lYv#cEu(s_wtm#QKCOD>P#^No5IgS zHE;w`U#D^f=;W{7M8%2HMKUMLsOI?Q)cAL{_ zJIH?IPn53*Iw0I`OsA#zvaK_kk(<-%iIxEOI}55jF05@sGeIruOqg0*fMQC6pZgAcTjs^MN!M)V0K>1u>Qerr7lNjP1`B648yzRhNo-lC z2syDUy37x!o|$@3t`;2z@tg{&Q?`ut`nqN9H7FK1((`Dd4)+ILK&iNk6$J+9OYF*Bjc@_E-w#)@IwII}D z-D@FoO=;r+L+3=$=&ri#c=$i}D`bmlqKY_75=U*DAEEAg`^=0V+Y9x1*42RDF`z!? zTPb)ZGh4Vz&lQLCn@P+gmF_M&d?HDS()S{cw>_?UWBr65t~V{ zAwU5TBJncgo4ua?EAFv&a)T~srMh@ckW{ngg;fnBq=lWd&O0uVUr(k{r zzT*uKMBT?0(4}3Vy;V@=9#eeCm!AG)Zuvdns*tZ?BE$cj|0P1O#3-G(SWQVPK3_? zmt_a2nX28y=Ab=Xl#mhPN(FyLskbA~WLrVEsFB#gYCH4oZD^xSYmEeU&PCv`dYl~i zqal*Jqf%cnIHzvC6-Ilzx4#Z^RiU245v$4To4RXC7vW4`e3 z<*|m7^mMwX$I`|^!(nwcTgyWwu*PgMiqGouT*Jxg+vK^lvC(jN`E7ct1a_NE!t+~Q zUTZi-Ov5ZkUHmb*N#lu}ZH^Z0xWF>`xo%z*an#S?*uY8H@TJ;t#I4Y;A|ZXmd1@XjF*lR3`d0UG)zax3JetAYD@IOZK9zOGpJhYM+P$h94dP>Y*yA+>U9#>}0BTFe z;kFKR9ZWprwDS}FOYiDe4TN_Nl1|blKmhXMIo9Lc_WEyNwH;2)u(bqN138>0C-bZ> z5pHBK*&CKJu@rnTl%n$y^Gla6 z;!q8orEP4S(>?R0FbL__*tM-FVVBNQrIVzwvc85 zdOk>Nt;*t_4h(~`$0N^JQEbPB@SDz1!Q3H20%9gWtFeK8HCtt}y92(EGO12YZLf67 zW76PVUD9tigJOKA0&TB=MmDP(?XXh~WMf~1c3YM7M+lCG`QPrq*c4cIAXIP+6nOge z2xZJEL0pOE_`_)YqH8FWfQ_p*u@*RR52Ri)R@UDd#W;Z|!&&|1x-xPjwCF7}p|RIi zOKl5b<7TvzPMS*3-?*J<9pL-&uLs(_#)hK_9+C}H_yA$B5QWMFf4WCIoWK%+?azWa zLy=}GS8y@^va!h;>l>{_@#f#m(nAvF5mDpV3Z&dK&=ZybWmwy>SByMvx-HJNS_)D^ zS2&!dF9}yf*^pue(t}V}95*36?by^FHnrDAiIT?6=GhOhLTyYaAU#4MzR;DtJUVVV zNB-gh-`wujo+rE(z2f8YX1~J2l#0&o=@}NKmH)ScrKMN4Zd{ABU6=HxI(~=`M(5w_ ze5w!P=5W1w*%8IOvQ^T6#h_x~w(D_2n3YyG`eTXetGwv0g#*X*bx zf5;}V?Z{^^{t!sFyd_-S3DvnEg<6tEH2K4VLV~5YiB;h&ZclH6C8o#TmL&tokUcE{ z68J`01<-6el?`{fcPoH8ce%U{Se%g_|G-5G8mPLAZm8J4=gjXoIo;w)3wH_cFjr}2 zTt#0Cy?b~M|+9Y206np($|Otp2KE1M9>8`M&qFL}S) zA3PyneGHC!WEk1e6f}3@_B1k;SZB@`!@V9A?Thz5sWB?9>_I>&sn7)0vOn@Y={CEe ze+5`gYkg3I^0Rgbz*Aqw{XQcok86|FPG_rk?NGi``MlqI2pHHT7NVJp+pJp8hWw`z ze5bv%Q5zw!iDCZWAsNv5R({k!v&po;gAl(s;bElFir(YY-UoE{W^?xtILbx%t$`QkjX&kt&^-!8D?LfFZ0!`>?{WR#!e33$_Han*1;7l%f0 za23akFG%Z+G`hlK8D3!?U6RMR7$e-p4h-1bH29^VUqMPsPd;*Dg*J;JKx$lM_j2Ra zFU-IrK(>V+7F}sY>t{_GV^c~LXKP5++L!uew6wS5X8&HbUuT^fCp)4oC#MXeW45Y^ z)&%#t#PoRx@e~r;PD@1+mu3K+UL3vi1p8V=_UZB-LbHKRY5GksD1_}8xLII`&ExN<*8YtA zQYYd|08yuq-x;yWdhIiT{ExUctA6+SHT%#*-{eY zfxA|A)xoOf|G-pdOQxsYa-O49)j^`>I8{?Hrs7N3M5&hP0v*d~z-mYztt(v?uYnq9 zwg?JA(edwfo)+X)j*0tP7xg!lrBZ-!vm(^>Z)99Q+|)C}(qvrtoOJXyCumqidQ4KD@d4}is z!!~5tfzAdQmr)VVQydc6ic3q0pP3D)I# z$N&8N;qzP2J8G=mY0JVnrm}f0y_^#!3fBj!4}3Q#z&;!s>6TdsMn>K;YTFq{8Sm}8 z4wg#p-SzqHLr$K$v0h!!%PJPSYWe_vDNy4;wVSb~aWF~Ol%JIV=W8LIKaVSL@knkf*&jAAS>2umo>;FB^K8d>IRnub; zpoh4f@k9iJJhk2 zoM?BLe?TNNxes`FrzB6b>^vm5?BU)ax_#_+3q`y0PV9RNb7OdCIn&+-7w(%JIeMoo z(WNr19)oRrT*$7&Nu`pm9L4v12SkCZ$){eX{D`PI+}DK90toM&u=-iRXgJTyogMj( zofQz|@eP9XK{Bue=!xI^sp>nZ7-rX9IlWr94!(H>VKEYgjV9g$Q@BPlnAd93gGMf% z)^7KmKHg^H{?Q4ZqrU|9wu$G0&*1^1)97#l9)z7STTf-KfvNbx7toM-mFCuEK`GI_ zo;J%oRq#I0o_KvAq@DU?XNyIbmw2Y&$iEu9K(1P8-+Rv;7-=GTPLqb|aN5QQ*gKt*%a zhPF<#Hir5}FOIF8r5y1c1ki{W9TQLhn2eH`UEqn9H3cA06|$~3A`lh@J{sIQq)sSa zHfhWQ!$_sHZD3Vs)~zxA%IWY+$o7FB?)zH!hJu&FCZ3uwoe6Gwy0mD7{O#yl4VfCw zLp7Y?bD+r!ZuU-wUW-^C6L9Vb5)c%D52@&|aKJCc zP*s!vm=>=0&0G_rr9M~rFV6)x95~knju~Y|7hK@o*0v0_HSFgqn`HymsM4vcGS*nf z!O&?GC%T-a`duh*zX;c9ox~rcL(~uyuRUW| zejE3=TUez!q1;qst69zv>T{%x0_S4^*_}>u`DeDL{JpBR7?|{ge{~a*@Uss}& z*obii3+{UiH?TvE?}bfx4{|5b!%4rQ?Uq>XX~cHyy<`Jy>F=4%@rx6l%sae#^HGt7 zcNgsev0WN15n)|4Y_Nlgb z>RtinZ|J$^`lXFUf>mu&*hC=r9wmzVHbN~vd7#!?c7%?Ag%M(z3y`%a~>>^uHLC~Fv!)u|nR<%|1->=Iq{jx+z z3z^`^99KzI(iiP(N1HT7Qq5gxbJ;Zc>L-)l>J8}#Ky-&9Y$H%dtn|TH>a?k*=Uj@_ z?NDRL@4(Trk>gPJ;Z<=8y^d_> zWPoC*frvyoAhDt%LBb1Lhxt>cyV_pUOK@f#Uw~yt$`|d##;RIvoELSIYLi6Rdpu8V zgxy2CO$qi_i=V?nI{`$wwQ7+BBhtSfRHXEz$vcMe4D#l50carsh{HnvXbhYTbTrzW z&)G2D)Qufu&`g)l{*stBhGE+nie-eRB&Rdna!sJ+aRsGhj#s#%100)9m+Fg)akeHF z?t<=uZXpDKi`+q;_CuPFND=#?VwrXM>th7c*~!BC*(i5zsp4X7e^W}VmkHIRd^*pr<-cGb3QC0*4s95os#bFV4e71;8A=JN2A5H zDWFAQU@8n-sm$Pm6w*LFlnwv*bh;;A?v~(6Nr6IP8%nT|>sg?Fp>13m0_T zPG-_?25o?Mn?y6iWnA~24K7&8pcb3#FR*~FlUiR=oA+`?Cko!3I#4A=dV7d38JF~# zaKQ(?`YjkmOy!}`vP+3>c0$)8Tha>~5t-quHWAfHcyTG&4yq2}ookA28-7#Cb_-@S z8;*DSQg%Zx-t&f5Tif%<+}ac+7*yPE$tPor3mIt!`cUdNOg%LVxeSR4u%TB1{tS|) zV}ik0&=MN9^4OPfKT@pcF~=*LV6=@HaFdqk2Lx9DbpI$S>hd2PD5Zzi!#h(wl920A z_{7Cm$LM$*meeQtSV?+)#N9&JY0i<~MkFV)xFr5LN8z=Sd|9FIeNdbD^Y4nD?P{Ub+6V|gP_GzinZ15 z6$lbso?-?J3ukZ)d(G1PFFAYcZDF41bT3*PE}hyr<z60BYdvsY5@e%@Xt zSh5KfFKRXUImNL1@aotrcMzg4TXu;#AO)eg|MCc#v167)b=Q^nv+U+r*kMKWHeqAr zSti{qx#@keiZx0`qI-C>Q>w?Xj79l{xNGh)oi3HrK|9_c9%9Y5VVMN&W+LibF!p+y zxP^TE_s4=zo)Te`b7^zkz{;^c*#Z>j_L#_g)8Efhw;Jl`r0KsjqFpEIq^o$iBcydX zZDKxKNBil>+=^Q*iR96et;oNJ&m)3FSI%hT>^WPmOrN8(pQ?T}iyCM$*J`T5#n&4c zG?MbStreR=dES2~mENu1%6d*jRamWRI^qvg%1pjJn(^K6@KGHF9;c(ehUObiZ5vE& zdl%4RcM&|HblbEBugrb0@>A_poXNSDBU^^;4si8{-pPoB{z7x1 zLplLm-kGB2hKy_e3Bt7M(?Fe~srW?y^B!%p*zC!Hkx=9`SLm*lDSDuD#Bk{xK=(8dAl9u(+0ohN|nRNYISf zUB6$Ii)DCFN-s^$W~mKWnizgzY{m_ zhb*xEGp26r>!%X_Zgo*Y6<6P{rutV)UZl>*quvX~3nq&(urn4YYmGK(m5Ou@?I`Ps)@(2NbE@C1*;l;HZ->cT9QaMuG>wg0 z{j@F@_YfncvR$jBKW~k;c~fA4J!ieyY2MS6e?9J4g+!s%C@WgU5M!<^*gd?z@{Jz1 zcgRu;B?tVuc+~m@258vQ3v^+bd|F#(>OL6OyKJh!%N2|dBQIN>AApG|dr0bE9aq!H zJ1Gz|`knK0f}3L)YXI?LtN^2oIGDPxUOsoCWwbAymEF*nal_z-aIbCG={8t+tg|il zTDeC^{G*&Lh9ko~4b@(=*mc=N|fsw}i+2$)ZpJed#+1 zIfH}!21R%AYfjhU19W!-vQ^;>2Ltra7jIbv#vJfepnOL_ts4Ct-FXpyZrHXnuaa#{pX1FT|23hV1}~N$N+Qd_fvhqSHQwFINu^e! z4sEju@s;r8GVf&O{-FH(!Kaz&P2ItLYK|kSnmuCI8GpO2XuAWq5Bc5|mb+j#?!`HW zV#BMVJ*>Ga-5tNGc3b8s|~(iq?MM zZF8@Qy<^zIxf=UIUi}{rt-qAjki@4)3NOr7jKBFNM1*Tgkj9Xm#dd_z3K|CeHpJDJ zdd=6!UHif6JY#jS=ZQ%O&jM$h!cC{SwOx&CZNcpN)O3s2-znCu%ZdfA`brB#)GNHv zp6ZvE(`;&WPou0DqWTC=bW_`>pkUMb%l&(o6KA+p(A@f zcPks&VwXh)1{{tqK_av$F~4rdsk6BEg1ceT(pe?~9e0CezIe<7H-f*D{rP`sv>#@z zNBJ;RS9%PEO|*WrSvD)#FUMv5o@OEyxds2`saTM!N&y_H1j>5W20V%saMs3vG{c_z zq$zAes^xiwA;bbDf=lwCGRc)DY=Du>q$Nx+@9+PT=#AmFuf#{U?WW1fQR_43y`cuK z_x~l)Kg}ej4+d>Dw)Hfiei62vZWbln#|pJReNb^?^0Rj`AayThyLi??%$HA)C&4OI zsplBomHen7BELe0`%}6!z))FhTH2`nt-gAb5H)h7<$bLCe=#%^d9Q!k)*VU7PcxS5 zvQ|yoZynw3B$wc)K@SYlQ$KXh{g0292V_LBVmRe4P3vQQbpiu#+W7olRnIxW3HjdwIZI_H9M*KQHmu}W2J*oCI>J{z#z zx&Hpj^u)S+?;|4N9^4{uzG%`xObmk~U0%1BVv}$q1~i)m{<8dz?BN+f(466J zShjPHv)^KCs_o?olag0a_yzT+EwQ&;OszuVn*^w(4z@Me3{*qHZKUD|Of0-R#KV9Z z-qO$^sgaN~jjV|>Cp_^4{AC@gYX!M9rvHmY3o%kL_INsEk(~(B@8Xq%<6NGA4&6(f zzP|{=rlb70Ud5&H#Q0(*Ky!(Jn1eH2n47pb8hrn2#qIidqY5UBjO7t*RyxIcb#@)o z8joADJJU!z-cDyh(YfZMJG{H*Bdg6N{Tpk2v;Q*a{{uuTaHVc@mvgC8Y<5p1&-42L zXZG|R-y9mwzcoA%Sg>l5u}Bue2%PFRt^*O0b!=J)_OHy_H|y=My8vt_II5)% ze1CW|NoY5piC=??0d?&7jKMUIJb%m6nsFYRJx;UV4uZVJg$jt~h@>8pSzYqFBkOy4 zmv&w4X~+OO?~-E5qhKMPd`EBv=mc#y`jYYa2l| zQ4&Ts$;?;7;YRzT>(X_j8ZHQO6a0#+5?V!NgS#Pl_-uFYjUGz`-Ob!C08i|m71=$a zeOsfkKogyDN{cULQ*{NP;nmp%HtHxL?$Y#6-*u_S3>YBSMc@F&=4kt|m+q>6sI~_*#ZTc-zsheyvtE*?1Bbc$ zDtVTQlkIBbj4Bb~{w+-+cvFsa6nB}r2KTq|5raY=&s9xr6lz5gJOPhj#7 zzpiTXH#e}RQjNIiFAyjhi!hgQ|;4e^73SRrbor&N{S(?<|j}QH3&mh@+ z+3REEf4%mSz1CHZnd7Z%rFrrV>kZ|!_q@!=aN=8wozwrcXb11P|59j_h5sOFQVoV^ zEe;x(nb6~!nAg^l!CE00Y4-LMaK1X)>`L_U{~Jb!5t8-fX|Nw^B)cv4SA8o7-+Z#v zQO!ILco%she(xSV6V0ym2sUQN3a@D5494zYFx8gFkKwOHdpE=ke_^5fT01Ue0#i?Yp6BT&x5dyZNeYhj$F` z`jEoGmzOKUFFzIF*&%Tc7OEfxcHB;QSMjSOP;kd1;Wnq|}=HyzdHNN}g+5+VIlL5Q>ZIcVcSy~DIoyh!H9pPdrMfJ3 zL-K+QH*Ab9{zoG-$THy@V^(-%TwN{}nh`CajNM{MQNHa~=Bn`U(@J|B%Qop-gXl}h zjjUQT!i&013ttn87C~>o3o)XM z5DOyz&gGY07dH!Jy<#?1vAVZ7aCN+o`^x>5Wjfhn3r4+_gAT zE$=PuhmRIvg5w+zZB+nz2N1^b+pB zsKt=Wef4~PH$miV|9vBfi8pjRN`DtUG1FCll)}IQwnOg^h~)nQUkrl|M2d9VNe;S3 zzmGCSIy(OSm%Jvb{~+Je9meSSfDp(iZ^vbSwfb(#pn!w=q=Xw6$B2lL-8 zEK?Gmv!O{s8bf1ZNBi+S8&Eh570&>UWwZSPtoF84D`vkFlO&kM5pYa9mzWa_P!h~s zYKZ!?6&|PN_WAxw27jXmm^e_Ua5~uf#|s7Jf9b43rI9fOK>~c$ z=oJw2`FoiH<0w&6`+@O;Gd4#u|ViL zi0PmT6M>!W1bN-|vcHo2--Au(6U$_yYu>Jz9vF64PNSmsSzRV2C-IL8BG(rs#Y-Rn zRQMIIPh7)Y34U(j3#n3!4P5R!@%b97RoBbWh;r&Ss29g|4<(P6(2;uY_~UySKh;6y zFP(MsQ`K!AgO;>mG6e=UPizM*OD9vWZw0rahUrR<|JZKC?pDAnHAXSJz?H?C=MqLEwv{pD7{Az1OyItb}0%esm|v zf!A7_-Zs!(&L<}kz<5(tBYCQ_Nt#r6vtT5sH_Y$-D%g*Kb?V1m_^IbrH0FSqjHfkuMjDwl z@qac(|Nr4*c+Aq*&i`y1h1&XtPQ2v7q)S0q*lCsGDr^C*(>s17@M?Zo1UKCw#^8S~ z>oHu6B+IrRya~2_P$$i(To41>16A}HY9edbq_Jz|;NOkL9|!UCd=cqw7`HB9r%^FX zL+IM!pYpV(ru%=E*RnGQty%SdshJ*jV+SpJ(Ww}5Nqi8wZ)LoVP-R!Fem@vMGV zb*a&(-AH4 zpZ>S!xawkb$EN4(Oiy-4ISB!JYV5Kr+cQTlU2rbwEkt-NTBEWcpv!VvoU`7O*V=wh z%ShKeme|)+&EOv?r7drg*|!2`A&^$DCb(gmvVr95Hr}B@3Mu0A+OjCk)SpQ#X{T{^ z?dQ+6tR=lvZ|$R*2Ki;d6dzEb)|b(%x_x3e>J)FRs+I4qpsMivlGBmLI&zz?ebM9073Pu} z^pe`p32P>b4Lk7Xx#@Dz)j{EscG*qwP@%{6d9=e-{htY!zm~Y)5=Hx`yTtvH6Woe( z2BNsHnOgCF!yRBHO$ZAH1(#|%R#Va5=439cW+ zKS6^0DtfXVR(KU1;kX)xsSh4(@R0Vbvy@+rNS~MRiDj_yNOt}Wzw0{TE-|MV0FumN zQ0emik+etRrN;jfDp!SqhT_OtUs*J!#yOK=c`#wiwv}1P7JlH$4CQ#_(;Y!_`T=$~ z&>Ay`UC1KYaquBCU5H#FBXMp+)^tz-tk)q(P%3VA95KT-r=mYbFJ_ZAjUOfkh~S1c z%3=PK#LT3sF>tLYyEbc>E^}Ag0O-6RbySE3j=;6K3dh#{^*TKiT9!NDDvk~>(l#xB z;A|@!O2Z)ZvuaCWVfHe*>9qu6^D}$x?Cj33&LFh`or!$o0n79jN}1!!Qg9Th9M}3S zS~HLX#&fxSE5P28pGGE{I)bXyHci-c{c1I8Wzt2+e;nZ}zqDsMei{r%g0vqNpencu z->G5i>#MBdcELt3!q|wdnOws&KT&tajfH*7=)2iw(uSnLTi&T?z+0F3oXoG+KR7*Z z&+P5zxOGev%5=1fIzU?Ij}{J2!Z;6An>2`A)nEpDTr%#_dH<>Isg^5aUi!<~OR?Yp z>)XhtlLB=z+UE4Q31?2uMNTdWHTv6EP}NN(k3qSggL<`jf~;MJpAUvsmNw;+M6oi* zdP`+(NP>?X5)r$qNm!MoGKv|Gd`PjhU4H0Bu;|t%U%}U~^qMDWP zEjIgXPoJKB+2!>9eCz`_bUbIWG)BWjfuYyjENKma-C*}}A!;a3$OtVM2jQAGiM!x5 zD}Lp0km)%sw&*K7|DLHMaM+NBm8%}jXF;Ga*{AH@AQLO!?UgH+shW`sL`|d3)lJ#V zvUQ}diqRL~NSxYOxG-%8ydLZA%^$m-v!xmPL+^JrB^RZFe$B5}TuJD?5A+$l`Qg3& zX*4e?r_9pRNIEbDG?zXx@}xxwzB0X4asyNtdQ^ekg_MQhVa?S|V`q&N_4+`YnsSyw zd?r^c8uQ?6wXjt~4QDDGd z+$nQatCr$2j_-}dvlDg$i_vpcND)C$;BXY39HLSS6^PqtEc#Q)qaC1_Xcvb%}&C>N~N zHc4}QZd3}U>HM%TB0NGcQ`wU|i`!4l1}-aeiOc=d^L1;Vc^Nr?n@t}joasVU*mg|= z255d95NGj)BaT7?bV`TH-L;36_*C`5z;|w8^QydhjUai7d)Hdd$d=h6>mzrW?e#sp zuIBDWccvEY$a-^;wfa0eZHLVejz$K|uWI$8iE#daHuy&g&FW{lwY%z4A+{k7`LYH5 zj>+bZ>ly6FT(-zdHdX+FaYt6;njlS7{!Kk`6_6(T8C2j*rp@A#2V%ydtptYiWdSSG zWqGzF$cWShlcLYyUu!*E*fpKzp6$j}pE6JJv*O9f7bg*NnM82n)4;spzFLp}_l&YB zOiDAFFXKztc+|_ZCsx94wg(a@mOk7D={W!Q9+2BT5SQjbSLy{DKSyXsMO3BN5~(=_yzs(PoB-K3CjPgJI2R)9s5+% z^rYr7-t3%l^yhZN^K-%+>UtH{q*OALTzOsH)*M~K;P*WX zJ6Xmlj%jYw)Fs-i&RdqhbIIsHjx&Ep7DY3V9T7SZ{x7@XxzzQLxOn@8xIq7?MSlXZ z_COk+gUy)4HRWBzPnV3*2-bwfT!l!Nv(yxD8s+0vK zZ`X$DzYAP`-tT@rJxkXY3#b1r+F=YAaGAbVT%Jq?{k7qPFMNw=E-Xz^?|e|ZrUg}c zxe71L=qps%m&p||bvbTyg&S3xuajiWjcmmdHx2BX%crsUFQr?}T(ohbW!i_0wyR#+ z%WB5nG+hrTGnux>oMsLGVqE9-u>qnS)@wW_+##=`Kh-vD0c5J7&O$|q2p5`8aK)#_ zf8JZHrT%DOZ2xq?_R$`ZYK%R?_jX_FlsslYjewxg-8FcsZzDQw(x<#LRw%ks*1J2? zx0lPV(7EqEkMbG_{`F7IwK_hTP$vIKFAjVwASfPS;wB&@%+j8tg=|b4^@b_&8C4J< zq1+?d3lB~QRVme*2HwR1nW;uL=g{@cA=$*w@krY7GJC^g{|NxkW_o1Ji?bKDwqykN z1J0#3-=}9vU6aXdZH9k*mi-VQ?Hqj5tSjapsZB|2KWv=9u0VM1${O~3XLuT*#++B} zR6S29{pUax>WddMoczq&Fhq|)&_o)2UOZ^6v6Jgt03dlV)58{}>+$a1uyMbvb782M zNwruA^2&d-GmXG^m^x$kTWoVu+bwx`g4_J^oe4PemofMG5MkWtd~(RdFX_s1rkM6W z@yImwN<1M_yskL`Yf2~M+#Auvr9+A zPyU2eNoj!eIc8h_5g!+5MiLe$^5t8X`o`0eU_I1%c1y%1gFeOhUBB^zDUOBOV5!2Y zCElVa#vd&+v#9OygSMz3MmIC;&u??4!)ZEeCYwU}WqhxlmW%W{Wb(9W1(##7?%Xa# z040-d*Wh{9d4Vt%9!H6SW_Odq>;@#f$Wi&I9%id@@H@s=!}}VstfR)6NJD$61xZ1B z@w2`m;B;G6dzq5p`ES6FsLEIvc4;7U`BOn^KLjeuu`XPw+Z4nbz``zl1$wSQy04I< z=rBv3ykTD`k;r?gY}6NX-0IjY@T`$NPUa6#++%ek7TcZvJZwEd+V9VK+|2i&B#P0Q zQQ?Wv$^NU`f2?LecQTxzL@VZB(Dk|QpHj;!=(WVmh2(l~Bss9jUir9QWj)Epg2BHC z5G-@Y^#!!HWfhXBn?0Mp+DB~F;yP*pTHGG)Y~7i$beyo&?P?xIk4ly0U(gKabv!Rj zU-=PHx`I7JiJJTb399qZE;#v-Z2h0w1iA&>f1DE9SmRWAw8AgF8X@6Ck%-mR5)0{( z$g$W_<3Nn+?)%OFD8mv8N`7ZA*xf$la5}`}uRCVFgkwxab+UmbV!&A7dEXv0dChb1 zjoU8|0p1`R3nW{@@PnoJPTWLIx)H1k0eFfanM8RkVq)!_Dz+yTU#J=|bGv;()LKd- zEp+BeIP7I8#4kC}NBFO8uw_JBDans~acpIobwt=%$#s_8#!8GC+$-o7N{}og(gc~u zyIbUK^c*GLbS6xY$-|{(MKW17;#}gR^Yw^D?~MnWOl`zriRbnMN1=(O%>!hA`_s|X@gwyf%vL%KX@V~N5EH$-@d?4?*l0wbY-^UGwGx|` za&1&*-pW_dgzC;!OjlvRBEq;~e}0?oL}^HFDPfhjir{Sjsv^S@Ls+$aJK9okIYc1KTWQ!?|IMy>dH{Yp4uA=MpJ2V3SMq%|# z869hNx9mUa3zspW1c!uWCKL0u0`@rp&sp-IW-yzw#imJtV|bTH6_i4*G%U9KBi;F{ zRarMX3f^Wk0=%NwPw|0(0%N+l-jHA)$j56nz0FM<(J9$2+Yv_?w}GlSTLqc2Ee&%5 z-CE>u#sp(W7668kr(E?#Gi-?jYkR5BcZn97BjUBXt@FH%1s2{fv4M6#W|boAgjUrC zE}e_7!qyXfT-XA-wqc#sj?Ca! zLc~7)KbzpU`B{|N*)y6Aa=g}sDA(cOq~)ghGgGI0qDE~0(=(}q>8hqd;0Z_%%{l31 zGSo^wlG|9wW%pHOHEuM~EwNrDlDkM^)-15?VZg+#J;6f6Mt14(eeKK#idRxS1K#?Zc8m{0+fcag@o zmAS?wPfX-^mySK=e8yKx28`|G$SB2;kk}t@sJLMcoqv>0#mbr%Dk<=-!KRLEFI0f$ z_DxdZ9o8|qwbXtJGeikoTDrlamejRjUx_?Pj{WuzCax!c%Mf~3@IUL8Kug@v3ux&a z#B^+@Q6KSbSh)h*Iud-eIRtb&v6xOH@U3ZuFw&S!I|c{Oe7-Z&F5G#WZ84Ko7Yqif z(e&I4vf>lhfCPe})_`}YqdMcARc0qUY;Mr;DxS*)Cilg5o#xKqwX}*A?$$!$`o=I% zwFt-3sFTfPj|fALg*B2dTWlB3$OeI>I z#B}FfED#bm`5mg-IaQJ7r;DRaHf^Bw(k+|%XRq6flI%dui#_{4gQ+c0#CFBq^wKeS zO@jimR!cv@biTQaOO>F_`rjoAfNlF{!6Y@9cRT_;$g~{ESf}ZM7X~IF&OtP=qQ-Xm z)8?a^bkis3i6pekITcr%ffHmy@VX4ObjVLkL*p1Xk}>#3i|MZ~BbhO2HrLbnzHh^iPnib9F&=9(= za-Q1~?khw--`-Sag);a%iogg_O?`z5OwiZynJ|tJ6IEJ53@le24E{j;H!Jy3M-v9a>i&#m5MYBnDUw7_zVaJX;B`N zCrD8=ewZ72!@XIUz`OfQwV!do3($(AXD{OGfg}c8~wjVRy^=M&p zRcy;jJ2v*PH4rkbb;lshwJLf5k$)2GNBfT85542NH0P(vzD_Kh(+ex`Wi9J4Ia~H; z9I3!rEzq0JE-^d32^{d}dL_XIV?y8eHJQ7)ublO@xeS69laGNqE6nxAa!v!+TSc0t zSc461S3`cn_Ff}w_HSixWZytCtx4C+UV5gy13cuk2*<=RZsK-&TEkwmYuUyQBjVEhxy8irgEwkye z?~F`sa|%i_e4fD6OYg@gkCH(38)o!W#yHP?V-*(1LiDeNC)fsBL*|7uL5{LD) zb@W7IrbCsl6K0>T5hZ1xUBX=oiR!@n8RrIHyo~st(ZgeZ8pJ=HsIeX}<%n8reBg7% z_%S$)iIqdm+XxEyni8E9%|T!~G<+}X4KrX)4PktRxUpJEIn_vDoxL4F9l{+#NrF-> zql$$*jP={WaaK(mNC&qy*>t1MRNoxpd!f-6$*|&82h_lF4JZEcAAV3k; zwV~$b1^F^hw_!Z{sbJ`Z+|uLk*yN60s+N(Q^Te0~rzwE^{e4d#%x*vJVCr@q;!4a* zrv50B&bBw>{$-zXQk1CUn|9qs?#Z6u-#l&8o>TWaLft713uqTFuW-K}or8FRzUydE z0m1TJKBUGx5E~G}rA)yw*PGNc;Vvzgl%cKhB;F@w36W6+zq8l(k6JaSgv1jcVXg>= zMW)t?G(k#^vGQY&k!G+Xt zc^u*5+Mev|N{jyNCEU;;auY^H>?q$F@x#W2NDV^@!@{@`L~vir83gK_yseh44Mmwy2yi=paB-E7A%s1lc-| zA~Y3Iht+EAKLfphZ&NhSglp8UxfJppFzxqhYiba!9zL^wasf9Crg;nu$K5)o1YkAJ z)z$^KK!L_M)9&Y`Gs^?gu$U$-;TSBf$hoor3LtJ?)6c2X7J1?{X0u6?%8-TpU(D>X z@(9DU0o^d9)7NPOyrYaSBH(M-T*e1#Cz0gB35V)3P4;9h!9zpMt8K7PPOmK1uo$zu zDxhq{&fTc$$=$(5$|+UcAAm)!O{uyZB37^G5a~ugm1y}YuaQgP4mC#Lp@8h}HJ1}UKaks?9R_I@)g;d*OD%-nNo1s>^)^ifAJa{`=N(RX8jti{4$-#Lkd#_*t;;05TBI?*CS{xHyC$p0 zJ#XhI26}EUHCi7o8<^9=H{xiF&V)Z(J%jp3+)JPXiBMwnU(pV7q1WnwmCFp*JP^d} z%Ong2^|-)T)l}@`U%%j0Xr;^E>cS`!y5PTl>J83|G(`NvWBWGlYPrxc%Uo%s#baoq z)mNLyWE~Jt)3*CmLm0_A5*WfHisWe4JNAv%Y8p+=4-%5*n+jslj>-)rxOG8Vts$mg z{Yf>+B?*t^g@EK_LTbt7QuC(Gm}on;%4^~aitsj1`1gMEYy&d2Ly9mzm-#LTpEI$& zwAH}U)sX@P2pV7=U8dJ*t)Na}r`@>MZ+#&-A4Y-?EdniRqwH>zgfN)VDxQ-3;End{ zQy^%sX!p|NAn>EJ3+Hd91Ss8Kb?~2Rk*%>sa7ok?gGUEGxfUe&HwZ*1Y}nd+$nQpn zRW3c&$DHdI>dO3$txu?954bFcOS-3> z{=Q<`GWnUcZ>)q@$CLJHan$*=9bEH8{%gGq$)OMl^k=sO$_^-SYa>{yadwr7@Z!BZBRdDjDkS^$C*~yztP&m+qzWnRcSEP;wdV(KHUNvJ!>qo}XO#pTKEw)<3`8(^3 z55ja1&lGHJ=|8*Fe*e~~MjyB|Zpmdg%QvToZf=ypH4FL0gyiK-)FQ8TX+8n7HAg%? z9wKz13tGZbq{O?YHqZK0&r3yXUyJ>l9)B3L%PEosyl2>zwxAyuAj=C-kCd@dt^`>Z zGR#k%@=Y?jtgU4|vK{aA{;37<39}Dl#t)JMm1yl;x<6tY_R#H%f}~bbKR2#a9vOdB zavivkLxFMHZG-CxwK zpsO6qUKQyj!ru^-(Y1OsWf(4#w))S#zhP|tD#qfD1I@V5jKQ5?${D9u|AM-y!|Y$E zxlpQN{W?~AOmX?{f~Q$_70TvM&UZ&(P+N!wljSXUnUC4Y)?93(&+gL55vmB6%j>(3 zZMBr)qbJ{8fAQvb_b<%k#&RXRE2SaH&g7QnN9Za{HMX+Y-L~yFb9wngUnk( z&TOhAM0EPqa&wp27z1=3@j~(56f1>qt)GIl%`xnx?DAE}1wm)%%7#G^L`?;=#OL{Y zv+kv{L^5ianfB5O2`?)z_frXPj!y-L4|Pz=A`qW`<2qJ4XZ6gROIRvn>vAtc0QFP1 z8tQ54nbEHr@A3WQDasH>mgCWrIKUg63hCSm(I{LVKJnxakrcIzV<^n}o(rxP2;Q~3 zNR5)(em*Pcbveo`wKv?B@4mgYK+w>#5nwDSR8&GNXlv#U2?Ho+*DL*9aZ*~~`eH)$ z$!=dOmNCbFV&`Gt_D{?-lHWoLsuCxtXi8Cm^vX#8=TmX!-viW~=$G`QU_Ct5Tm^5y zdgvF?dZ*QRxni&F%D&X%I~jO->OozlPS#8r{X0yIKZ!(RO=dVjx(u>;zR!?dwVko7 z`5bf;LPsLYCp;NZZuE`7pT#1^SLt8FjAUjTuM8HsGj&B+0$ZD*LOlDpr=H{_i-n0l ziT11pZ{>z4n8~r2UYtnK2GPg?k=eWT2f*Ir(CML;))X`u-W zF$L@^Kpq;q42&$rEg&_JaEQ<48@@wL1s~Ofdz+f3iK8H7dH`ULO#6)h2|N&bNy4=L z7y3iCbE~lJtX|ngmp_ak?-ekwV_Ow23!?rqT_#woBPvw@`O8&MKBeUEb*-QMEpxZB>+1O{%chplVoL-1t&f6!H4jdCyoUjxz!Nrn{KYv_ELa~zK$-E)IO z5UF`cN7Ni(+u^Pl+4Hc{!&*qOugGqaXsyH|IW}VIWBp#tXJ`l_6GvuS;`#=2h zu2EdAfuC6k{VAht{q0oO+4An2d(I+%_2PxnHqssti{i4o;@IaOc1$LJADVh@hTwlg&q8wN%Q?FoZ1^2<_R0tkGYM{Lc zPbBdoAPdeDvgCaQZgNo`D{;&zRTsvWA&4L(eI9k9yB7;Di~cQ>qcd}gy%UCo1fVPX#!6@ zj2oi8YT->h8$03R>PIwla<^+ximtGLT*WcT9VV-O$k$qwIE2Iwxq0(`$xl<6NFH~Ld3{~k^U7bq$%11l->>K935R2W)2C$efz ze8GzEZ_J7Q#6wMhe7fQ+jZ-GQip7LODTq$P3oex?zx(Ui(^X3`0#X#&KNds9htR?| zjt4{q{joS_QzH$dyBllZq2!R!ULtPhf$sqyul($#I_ZLljnY@R z7hHjf#;Dd?oo7_3WR9<*v)l)ng&K|tU(IZng86H_olWsN)|n~6NE}0UdfK)ooRX=V zA7Y!aV^ONLw|tV%RAA4AC~I~}*?XEp^1MB|o(7*=%=kRbX}`xps^3uyaW@bz zW6Kw6qwgGX0xSlKrCm#oQwK~hYmd=*?0=K0^d=TB^Ifm{`Y7RU$4+_M@n2^?Y1tcP z(LdypzFM{wIw3w?X|06ycci`@HSCZIT#ueteej&WZe{wTe6RK$^%&z1*R_qR zx0Fi=TJKIF{{A%odtoh*vQiaonFj7W`IozFKQF}`>gqXqS_xYuL(qX1m^sk|Lz03W zAfFILR4LFU*R`w~~(n%}Qcg4RiFtOXX=6)H&(&NB!5eK9 z8dnSm!VLYJJM0by;H?V7q@NX2U>2Aa{n^qn`dj}z>$YE6SHWZZJF-dGzl%bbkD*G5HkbmN)m*jAp?S**;5?o?*CZFONuBl0 zv?WPMCQHdFbfdy8q?~A&)=|-yn9$c!5o}hFxeNIw&M|YzufCQ2yc+YE*0{bMd1{KA zx|l-4?)Eoa%dAXF*`iPoByYDX?R~(SRib--Py3U)R{&wOD2f{Jw1pQ}Fgf zoU#T>yUJ0@Y`YUjFoD;;x|?^#HH6Mkb54 zvs?W-wr&;I4E=*i$Q=;OC$i=_y_T+45Kfi5w|&(E9iNZ7Ykq=oZ|dzLaW{>VEXz7U zn24cO0X&dKIO;X(T8VJHL?`(tjzVcnx83DM@93p$-A{7j?CZtML(Gg2@-pjg11qA1 z6IL0sGk@S8^Typ@ru4F-@@4cr1mUEQ6L)`AhKR8&G)My;^y$3W==~1nQx&&b#0s}b z+TyIggeHx8r^X(TNM^;wf@Fb6qskh7_l)8lzg|3Dxl1&Zp9py*hu6ZJ7wD<^zK2T) z-VpHmb;`#4*wmGFYkKa9*_u+wAecuaB`l#FrTdR z6W3{p=plDbOX=1rGQZVnN4S)!D#C)bDsfQ7SXn)fmVQJ#wUuZuf%>b=DaKY|ZslXt zkQFB15cu`7*gVDjulDdr`;Vgp{zCQ0o#7m5*Tfi6CQ^R}wRZ9Lj=X#cUH6@JYZeFA z0WG{Z48tz^-`4HoZ?XwT+D|TuId-mBVy)}6p>!MwnL@#(evuC;q!bL=r2LV%9h^y` z(cyY?Kb>f(MPFPvlJ4ns z*|k=7PxkDNk{=0o6!R-OG+a7eScdYFjUFq~Vk3;}MJ2CevP^n!XAHIG?DIOCws`up z4ADNc_@a0T*|8gbMuuNq+khV?I&77vPDF$Z3Yba zr^dYn6cm7EfL)a}0ovFb^Qw>brKiIv=9Gl{8Lju2Mf7&|iA$VhYw&qssh&{rDRTAv zKuzrI`%(Fj#_Z-h+7hfaS&%^Zp(){Zh#AQkm}z&C(!=su0%Km-UrK;m^OMr!?CWNo z{0R_I(J>q*_4MXes{6F|F?W$1<_NWUp7j|EZAU*`X54>6HgiD}PLhn``%zCWV6t!~ zSJwMlpq^P&Y9E;3?nRC+&C0tUj_ChK&&iv2{2tf9I*n%y!sm^etvG_5rV6mMP*eEP zk?9q~50hD+&vFYpvu$(KUIFjGK!c)+Ql66$jf1o3l!CK&T`_6z9?>vRM=O({xkV-9 z?QO&PCvA$HcFJX@-aXmm;RQcaqH zKpdkew6(3s$WvI=`zEbtlCUbf-!>zMHv>wK9*J-McW?&3@I1IO9E%s8e$1RE5MuPg zh7qMvSoL5*)ibY-Tm|JO?yT&P71dEqP7YR516bY?P?$BSR~`IX?UT9w_@;^-4rji;`s~A&z*(b5e9CXx5 z?L4Nz@pWDY*Im7at}|^hVB5u)4I<&JZsQA_1Ff^s?!%FYR3|pgM}dQw_gP z9XzgangFgI#{q}PTrRWWaf(mn@az+h0)8eb6Z)nG6^c8gIa0ya;G!{?A(-;LUa1uDs5y`@RTf0%EhD4WBN?wh*Z5Ju%Ae`;lS zVCbXw1NA%^B@;gFQM)IOK?p`asr$$0-x1w=rP4`Yuhy~vvFQ~rSe0VhYxYL6dH`Ka zR1j=Pk8N8IG2vlDNATve-fkhkp8AA=Q%^BfPNynk*{D5B?!@J^^6+YmP?!r&7^I)z zZuPfe5O*#@+!a0R(o4E8sj5BYmk=@#0*c!ID#+j_(Qs{WPK6t%UL3* z$9aE$7q5BCafHGC*icm_kK$TRSZeaHOvL|PfCA{2l?Nhcdk@ zDuTy4eAQFd+hHQXx1wqoR8kG%>f&B~=;Z(H@nww;WaUbg;jbd)4wvcc3&=nz3A|6b zW0sFJQMp)zBv2Pg&~{`jvzkoIHt>4kXuVhGU;TrRt>zM^Rv$Z`Ceiy_m;rsO;1~f# z=|We^EDSu$V(0JgX|nnyRx`LLY@oA0+_GM7TEr31*>DX-F={gJNm`LiLYPdb?6P5K z({dE{*SB^>dJMAln3#$~nkF{@PFGNz!;VgF zaAjS6Go2|5zKK@Qj>5Xuwn65e+9a!q)U$M~@I3pB)ZT$rq^taGj(kbIHLrS%_QXVN<7W8r;K2nCCPh_i{G!AVfV? z)O+>~-0#C~$&8d`i|%|7(|7&MjzY<%Oii0iihY=r>ECXgO&z_qxx6*6>8Q#S`a^l} zPqUpkVfDj*)~8pyETr<8?gaK#_{H(M3^exTFY3$@$bB&eeR_w1B>Skh9FOsRikq&o z3Blf)xD0|)gxYmQDs$8T<+DNRLzCokmNS``(I0e&F)4Stup^Olk_aBDztVpz9PDL! z>PF4ic0;O5_@VY!uU;0TNwR?tYxxbU(6_;qN!{S~mj(##I*AJOK(9Kz7e35bS8#Sc zpRrL-Ktw`+d2XLKDH}KP_RqjZ7gp_()nOoD$WiTRB8OA7E8 z?B*@O=VT}yJWh_Psj8q@+?8DX*=BvP81m<~&UtY4$s1u3Fxk#tDs^g_R@It^S209! zPusSYF+f+hJ+yjla?CYm%T40Ug-7<&$)PYsx&??rfFoBY-MT-7iD`kU9*X(sj`=Dp z;ZKl@i@Uhe<*%%jfGSMQ#P<$V@Hk36&*7X=;Ofbym=m**&|ddVi;x;b;XmQU@E_zI zO8yC2mCPku@h%oo82MV>HY5gWlAo0%p6@^O|6K!?=~@g2!yP)IzV6=+MyzgB2ydt6 z`Xmii z%qR^qOk0e{LGc4F%n5YNuZvo7^;oP3OOQp9rWlx^=x+Y3(m2OioYQCvTegfNvLV-Q z=%YF(Rh*;KDF>XXp65p&Ps)I-mO|#UIJnS_zlQ#;0Em-SvdxvNa+I!Oa2*G)k;BE! zN9!^;FHfp8E0ZH)!*s0idIxTD6>YY;Qd#R}@F~*AI@khc%Ojej=ET~*Lxa3ks~00& z!g|Eo@(MzN;33NK|33hDK!?8v@BfvW>v`ZW>LI*d3cnQo@f0qNs<%F7*}ZeIZYcJv zv~-M4eclzWmk)od8rC_ed7pV&r!ss{QR+kXme8o{L&Nz}^IKLkTH)2Ul!r>CMm_#@ z^F4)h?7bgq=1bRaUe{wTnTuq&h1PuvuT(s*GzPgn`o7(D4T0(jvRBZ4C;DGy=-}P6 zOpaVj(SSpemx*GQKKNx9|C;abLfKwm6DB%!r3k<#ePAh1D0aoW{pqgwldOk)F$=TZo^iN!H7m6e!-FK?> z2}zG&MFVAOy6c1wELv8$p;XEq((|2kdsg~WQuGUTo9;XoX>RRYq!Kx|PpWtN{i&It zI$B?3xgxO$$%;#;YWB7CzSffs&uPSQEFs)WN;@hoF_#Ddww7w)<|-#N)|gdGze zxW6oiN<1P<-zC%B7PC4cWAAr%%3I=zB7I$GYshT`&dH{MNs^-De~uLAHe&<GBZhtD=Kmce`_J?~H9r zJI%%2Jd4!uu3Gc<)#?tAF=XD^_V>s;H4P^_)`6{F`d+&^DtCjKz}e}>J937wWC=kxd z-W0S`w?TcBnb+jK6Ez-u7X^J3dDPV_!9~U#A>qgrYf!O0Ss@>t?(zUn=iCym%{Y?4 z+KFK8MDRW-{C;FoipI-p-5v==Ub*6g!=5={IbkpAwwftegA&fapR;bl=UZS03si!2 zD8V|EU?D_^K9T^H=NQR22QNWQT7yy!tTp>O$DO|}K&<8oR`Ud_d4DU#_!57QLQ^@n ziX5T5Pk~AvHOy}e-qY2aCqg-)d&V)e(H;Ula@5Nj|7eY_;o8HUwS^^0wE6DaD3N-l zH2Dw0tCuDItuS+m{Lpq}OKEomkJ`{>ym+r!roIT%E_3`^XGW@Bx!J<%&XSH3Lq@i( z?O-$@X+3VyFDd?=6k9SuHE!V+-0T{uEHmTCD7Q%U_{&nfX7@Lc&rW%nQOAAmUDDWj zZtrE7HeOjjwSv41^jn)oRi>rsqjeufkzNGy*(+$O?3vo%i1M=1Z>;F(NLiFqD^pYL z%i=9HW!#55JKa2}K@^v%zG``Z0~Mu7Q)e172pg~HmVxG~dGkY_@peNZXxKZ)1p)C% z@c?(OcX`?okDmva#kQy&Y2nZ0P;p*zz7L6kVmo;@S@ z3(oNf`Y~f)9=qB$ZC8LURp*bDmt@!L6BWQF9;I{og!jxRLl>l~4+xpaKf&fr5boZ>j_m z)N(#Sm4J8(h^OVDN(H*pn`TZ*^T=@Y?5zAzpL#Z09{P+g@p>RL1v1l{-Y(UCTeYe0 z$mV;?*w>g6iRdbw=MJcothT$aMdou&)wiHeqE@L=8d+$Uf!eB>0`Rof$ZCFgUApG$ z8`ZDR$P~>+uR&VwObzWWiKmn;_ZwMmvy|#JOP^GW5kj|3%Cn{<)>F;0q?EFE$&qi; zpRv)U%I8&O@jaTh)HzeB%bHi$(xjEy((Zr8MkJT7eIu&vF=f2xQpRdsCt7WD9hyS? zICg$tqdRK2rs^BeXQ4G!TN^_fN+vQ_$IWY_m|I}i*_2kd zu@h5F;o0s{m5)~anwL+bw~6~jbXdlXPA&Ho$S6FnW7(+4Sa-caW!S3I(8AeJQ+~|I zOQ+AK)8v~hBBBggEvDd{=zP1+-4tEZJrBjEt8)E=PU)f3^Hsk5?bGU5r_UTXC{M1| zMsBKgB^wbq(dqbB5~4RnKhzs9yQvq=4X=6obUJmjj=OVPNqG^?<>7!w%wHWNd%N$O zVN}Ja8l&D7YnM`=RjIwDHi@;(5hBUD8?_jH7Ed$hUhfkXz!xKEjBr;f)P_+mZ~XL1 z_BFHY$YW&E@TRNO*?H6=y=Jd>6a`8Ylw5Q8ZK+q?+Y;`RQw!zpaLh_|+p4Q@ZTYTV zs7J2Z{N~kdi-*rI3xad+APCaUT!-n7CHn>r6qgr0Hovyk5*0sM9PE9)n5a*fqtgTI6V<$<4 zH{Vyj>^$-{*Wb9dHLw|OQ|#8p_T;;g>r5$&EDK`q+J@dBgln$9FYV*19SscEe5T%@ zdTxV~Qp4pD_Z>yZP9Zk6$1*5hd(G=7)@TQW*>%0_dtT&gzoDeg6teqRR#OA0Ao zntd~xokQba^>DOPO3q~z-83RpqZw4bSG@XpKrJ5C&Ij5;9bl`%! znWc2ub7@Y2%5NtY(|Ke((tYB(UpjsxI>y!2inbDI@uJ*lv`&&OFU;nAFM@>@6k5pxt3m%<}7Q?W_Xw3UHS?OD0@b1p|k||x-8!r zwX3X6ZCO}AaoB*LtD3(>SN2>OD}rG?J8w7K24E3x$+A|h)-VdDCrNPjL_aynp1&ud0N z+O`s#){sZ>UMlhfc@yoERE zftRS5>MUicJV-51LT{})Q&{5cHYI{rZyIE?hx_rpJ%4H}XFz)vXfFoO4osU*BP%%% zPzC5`^{@w40R0Tm&j9@l(9bIUG|ozj>9#8cfHWCQ90bnD8iuu%r=?Fl9p5B-Rr<0S z@l;?#yX}Y+J-{4$L4+b2Zz#u;^ymMFX# zjX9L_qHr5j1Lw5Fd->;?&fDjo>(~r0QXg(gYhMfo=oi zitFk=_D1u}-}sDwD8eGcn`f9>r$CvjM~b{sj$A2*i9CTIv zddzj-=D6jm%$0FX<&FQZQTZ-}uqCBE1I}+5I;uoY&a&pBTKaD5#R&eE)OR5XD?6{$ zS_wDU3MXEL@@{2CLK^{3ACmYsz3)OC;RLmcH`_ehT&t|TZ0)kUbPgnUgD_ZkH$9)? z?=#WcX1Y?!TVy*?=e0TbZ+&^>fKX|1j5?fk>hi~&%Xy+A3;Ln^fr+e6N^jA znm1SNk$4r$eW&^gDE1M=#LaEAGIr;nbdHJZ)^H7V1gFWXzZR^01X;Pa-BYb)?;e3% z8ZN;oDGgoX)8xD0+(!`DTq)AOj_S}gTt?5T6f@D$?ro3THO+>7PCLtV*xxiuzk7ZE zvdNJbMbu9_GG;?hJM-D3vf=83RrY5KUv@6hz>cwTyH$xS?>|PK7$kEA8BI=jD?8Hwq+!#-ah@c4}2{ zrn+t_t#%LBy@>CUr%U|*O?g#a9cM6hoq?(=8rP3C#$Xw1melX!zjW{)>Y&n`>NPOS z|Jl3N^tf_W`~Qxjhad?MFoT|kBw+qSxKOs!Nlx5}6F(~H{hjkwmmODaX)OsBdVpkX zm>NcQYMIl{9w!AjKXO195pR74*?pmBCt3PjFlHrisr1EWqslux5-~3}-h&NkBV1S8 zN_({dthQnuJ=oX$$20In$-7ZPAZPm)xC~hG*pV*;`qK~2oyC(Gg#Hn?V>76k7;)Wc+ z*!vSj7f&C2s5;x1It*v)=XB@Y*yyY-M`KRoC!Y8s>*LAN|iENBfF!hUMp2u&$Rc-(N)hoRbDI zsoZ6LFmZP^-Sc#sXIr1xesT@}V&msb)677`)FC5~flZIYXgsk?LmGU3Wg-8f^tYj7<#f*O&A!Vt(>e zrbW<#m4P~qrfLi}Cj@~n$MM;^z7D+Dd0%$Qj3LPZM-9g+8k+i=y|J zWQ>pj;+gC|Po2WWwW6g~ZVlDGy~2O-^!_KL4eLtIF6k_GM%1ba@`;H9gvayC{1;j8 zf2{>uZ_z8jLB;N|F(!AXW;5FO-dg{~*!$~P3=3W8}w%It94qf(_8B< zTq}Ddj?^E$>S|z#=!SUqY*JcW#@ETgE^uFTeB)%u5!?pBNW zm(o65s6Xc$VNdnGq938goj?z|atek1;xqq0pvq0O*G>v?5%HX~In9h0I(em;Y^S2hXuY|? zIL>d99^zu-xkD#wLma8(VFQPQWymyAcXm@cwB9gL#6`(-`{98(J2Gxvo=&50YatZ? zq*gk_;cuKW;^O65FW#CG^$yhAY-?(UzzUHf)|WJRkK_>-InQ|&o}Giw8FKnsIeQFs zZH`t+B;bA0NL=hZ7x7WLm@_5lsBfQDa!?77RLZ`*KoucGHY*_V|b-6Bk*}NjZjnHY-SaA?a-+ z@1`*o#^@92!_rM$j6HYFYqtht&VyBqJ6O#`Y)BXHz#Jc&c;ce%Iq#*;BaY3+huVg= zLO2#%_7(`9;mJCP7SH~X@22f63f(DDns`3nBSULi z4@Zo@nJnW%^tsdXVbV{>))i<&)y`5sz&0l1mLE==aRL0?!jI<&<*mCCD;0DHZHn(L zjcmaDl>{0W=+7$TZCwK;M{oinC&x1Bjx%Vf`+B8R8W;Z04SGmlYsVV%0BL*Xr=r`L zaJ*56S4ygJ;r|@|W{!=43eS!?;?rfq(pDL+`_b1-uW^y^Z0e-ZR(2rToS31)wu~8; zG4w&HMe&h@Y|MPy1)c`0H*dJ&%+9Cf7&y+J?Xo1;{~9;pd1LAcnSl>F^!9QaCG(A2 znfg3OO&4SIo%;H4Yop1g#XXkeQ!Dx7n`&ajvj?PXT73g%C=rc=B7dDx#Zyz|PTEVl z_>7jorUvP@$|GWoh66A`KTqwwt40qKfKABMBttehMzcvXl0MI5d2IB}j@(zvNxboF zc6J{-8xQ#gMZ?|6R)3mr)bF$TtR;=W_g7Pf9Jz{Il5nVD(~OhCOj5z@|HdxAmZ$umYz~*QQK|a zdOM4uKc>rvLsESRghXsSfR4c2w}Ytcb?dT}g88%ht&T=M($h@Pab`d=J^5q+*+%M% z$A15roi{9RyQwXOoZ)-n2yc3Bnfs2%!>pD+7=Zce7! z%xd`SD&_a@DsV=Sb1AviS&Zy2jbpwfMRg@P{_HqLAGddJ87X{#g^Q&r*j3hEYsXX` zJFJg2<`O^hbvn5}5`@JQE1$$lp{+R-d}m02W2~v#*TQe6efuMk$hNC0BUY)Gt_^P9AsNwmOku{gb3}-HI5wUVo;?5ZAit*r^B4%p+sQLzQ5mh`SSgNa5Hgc(|l8N z$ui7dz08bF#rByfyX}jA_yX_yBNRQokKv}tt7(R4ttx$H?9tNNxbClH+kX`%rEGI* zdMkaW+tYhj;cLu(4mt77e7^rxtSX^k6^`R|#@^_j!9Z)Yqv~Te#Al`7e-$vWRL7@{ z*7~LaNQqisZS2~QMAUy5hyPX75~2(?7b1ZG?t}TCz6e=C&zk24*1xkXk`sr&5eWwn_Z&y|10}$@% zh3Vj7&A162RwAt_gxgp-B+u7Nm>0}Hw@8{8r{T?AZ(skW}R-QX=)Xz&wD*^UJUo;6JxICDipaJIX%8P^)v5+51dm_@|`6h5Bov zzIljuOC#bYW9itarm4ju?My1&pRJs6LI3^WH3zzKXeFhqV;yN29r|)r!})?dWrBhIV75 zn%u8gSL0&i`vS8zom0$*9zaH$6mx)ZrSbDc>$NLvT$FrY7Qs?mF?7e68D7CT?y<3< z`daO6YHeJ+e19ddFCS#eYgwe%&UiOYbKy1+^Uu1n>Ws5~rVc1hu z>vSz|vDehmS8M*iNwY4-KAJI_ZNpGFwidQ2ZHPg+uP&SLoNs2%x@h}o+5+8idd{?} z^L08d*}YetV4Q#eA6C2L;_mw%t?ol?>I0`Hg|j7*DLQ;~)9oF;lSAtw@S_Q|$`~yT zf+=Px-=BsPGVE##d~733iD?032dwjMVn3Ws>!R|bsRTMU z`$EV$H#Pl1p#nCu)3LsDFR`cBNRHv6xDKXtzCpL_HF7*3GY7?c<{4yObPV zqhTKbPOWU&R_M`Wi#If;H>vw^@$&r*S@dko@Hyvzt_SLnsE;aakeDgFT?LSfoF9;L z(WlVhIrUKY9#P`1GPTUU-QKts$i>ii8S3-+8H>g|4V|F%=4=xq+rE#VsTdeSh7r>V@`W<}%IL&6O3-PE7Z1E8eeC$VJu< zZ2DHwYd}ycOXz62m-G~S{lKk&*t^yYxfuI_W%bi7s=`5=8>(bdYCcbiF-~hBg}V`-QwRb66=MYP&^ zw(`h@?f0?WWBUmw@HJ;pSH~RPhY{CIbNHh*NG_^yxd0aX@4z_6c^2Fn*=FBo`Ck-&Nw-W#we(Yt@nSd1&=? z*eH7H!tpCrD7l#UzEYZoIHjs#tIhzS?wrO6u|sRKzh+ri+*MHKJ84mV<7zM;u+n)rU@RD#dVkZDbOe#3I$%)~jUP#nasmFb8Vn{p-n9E;?R7$K0&U zmfo4znes#HIH${y;VFmuE2dewczM|}kv0hA3cm*V!QDCi1(8$^mj2oaS1xj1vT`KR z@SHtXSc9DorH_?gecIe+JKiMq%Ei!27*aaTbmmvea;JQDMtEmvQYK@bw@bou(e$FT z<84N20A$!Z1Sm2(k=0;YIw5%LbSxKFFIhOT!`b)Uhpu2>!g~xF=KC}nF7J_;h=xDJ@c>PlL9XzhAPJ zi?)}Djk>{kR^`aeFcub%wk<`*HWlQx-Z^c{#obFzO|t0HU3Fn*3xHIO)AmrFG(t%} zB7w_A;0p+>owEF5(qkh=M#sBS;Lnu*-FMUWVX0g$7GJ>PksfHRNth4BKE(Cphh%lw zCjPNWT`nqLvU0Vj2Xw7BiJvkxOiay8~= zK>~{@1zcv!q#y-MIFmWB$K%ae92;kDoE?eSVK9T5g>ds$vk!r!-u7nxmbMBS)YzJ zU|BbG<86#aK9kxI%EhD9UI}rMD=^Z-uBN~ghR*j)q_pI+K{mjMeOV+35 z*pBq3hzr7$d7>i-Mw@LhKAVW+L%4{SbwE7H5Vr@ z@#uZ>%n)j)9l}&*MzjS$x8ZUc@Jb15E>2!@I;LSK(B-yl9L!j#$ysy9iGY;SubH~$ zBIYHNMV$aRx^*qrF@njHq85YEV?Gj7=xDt|ZSQPhPg_R``m~kPH`Jn4Njt%Gc(B%A z*|_36KbO6cSam%*P4X5W0qVOikux}zN!#_uHB5+7_pew;fq`djiPS26_>z_%87U9z zPpg;7S^K{xdmd>$t%{$8>1=(jhBjnHKC`~Js8-VdTP+7cB>fzeqkeJh4z&m_Rc++T9}>Oy*%-%E4_5cTs2Wm3TWeHnjcTn?t+S|2UXzZ3E64Xg z->Qwr#F-O1{{pF}g+-@C#%7hDe)`t&vTt==kf5Q~;T})0s-DA`Z8UJCMUUUwf8<*S zmfXZL4Nqwk?O@+4Lp{i^@5i@!)CHeqD~;0Qm(QO-!wIv^;H|<&%psCUC|gp3E{EIW zSJO{?^~#|x$O)^>em2cyI%Ap%o>Q-V`fB{)ul`?L$~ev@VyjtO5oNZ*v)OS@J2h6N zzBFenkH^WGFXQhV(eU|C6LA9k{P~eCBKiGhdirzc>w+dHreiOR8Tq|Icw`1k&m} zZHFB35!yH1!4rcSy zuH*-tCc@sjSMR58jwNl;>MN?(dK)EaW}>z1A?;x^s#v>agv6;;Vk!Rx`EP$iyP3h8 zt*wKcT5AESj|Q01mm}?`lx0BL(qy?6=-jtmg131Hg`BzUTS>EJv3 zf132JfMsx(?l*rJC+Bdaho{t&o~Y4~Kz?c+yfbRz*!YATL)=YLO{7&x;W4{}HJ5L< z>s_HsyNu9MW$AXaMq~(UVDcL)O?vysOnd--JkpXbfSwks={c3%v`rZ;Wjr1Egdcub z3sYceOJA{Bb2`d(@y9H7G{?>6pLJjr@3_FzVx@K0fN> zqdq=vEvjerdRD(Rt3J``7Im_m6y?-5PzsLdm?Cg=nHkfZjI*9P2ftzGFr$g4d-uo? zq-C%Jw4E~=@gYt+KXnd&!_E<4o0BHDMZ6spS{=f+SaC9v(@&kF->`F?BWIbfCOI70 zI*gcJtJBR$)7^dQ-24qYw+S=sz;Pfa-Kh()U^+*`GgAyXed-+lhMh}^)YO`4O5c@+ z1=LN;d=fes{$o(&H|$)Re!za>G{du$>|mToKb8^^;NYju>2KIMo3*sD?PMS&*^pQ` zA$`HfUN5tF>fEi_zgy?>m#c0Q5hC)K;jJy-8A+~~k&gXQdem3mg}|dY69;T-F;XRk z=DeC|Fc!DzC{OLhyJ~c5q{wNJp{69pyJu{&BrSo|>g}5QuUmWR_EK%T^?|CXH)^ro zVZ9@It0vmE%H@|MI$-WvhC=dKIU-=pjGDgP#Db3sJFNDge9>6EHTJEShP0V+ttXQi zk;4`hQmb|--K5&McmAgBzGgn-Y2j&Bt7f%o-ufnY#z~|eUL>epY4JGOnN8M*R`1Y^W zb{^05`}Y~e#A}a?-1O`g$7ysFSc?}hwZrr{iltg5)v7ujkg-y|RD+}%B>j&V7)V-i z?P%k)9T~P~2!Ax(t*UwW&tmaMjvF1>=TV!Q>7~GX&ZTXs!_orc*sPx|3+fFt{jZE7 znya?Vt@MXhuc8Q#~AjAwl`&xQ8dKUo2i< z0KXhy4Tuct7uuYA4zVMiKE>s1mW+A6SU|r3{)t6=%?Q%Z(hQHueAKa;m9ELiAQ6@? z7V$5DUk>m9lE}W07;86=cDjWvKeG;v^e;9NE`Wbx1XnqkeCvz~0VnFHsc&$#b71Hf zn;93tKjY-e7??I^QZq;Kx{8~4C)xt-iw%_v;GY=5)@|VNo}soSMxO7Ei!=vb)cY5k zIv2n%2Y6)w8r?GjL&^>Z)LA8f*%X!@-Ct}hT>$^Y&Yd+n(W0A_AkOGNg&V+iD?zzOH@a?NI)066sBxV%>tdIr&?(HJ-jXbyn|^)BlKUJFXcmD5wCVos_+|h235o zmc4c+dqw5F-F^r4GV0}awp{An%|_fV=j4B-eqC3O6641yr2Ntb2EruS6DY!RP;lpDc1krc=yvU?ZU=JD9_;e~W^Me|b*_Br_0sO3 zPjy4+p|kYI^qBIuJLZx!i_>Xgij2A>1t^Or%%>jDKdakkS7nNF z?UPeIA-HXun2L&3Xs)Mj^B>rEGziWaz2>ZiJ@pw5yH{>s##t9iANnqTDgZJiZQAnG z-5K&(ixh0T?%fA?0MQcwe>Mu$m5$aR3;$I6XphK$+SIrkA89U{;QFm2J2LEQX3~_6V%cacn0lZ zT{=8X8Mp}gpgn*-H})1ZTH7gWWt;{l>W*2Ui`)`lVQO5xb*8qcJKyNxi?@$l09461 z8Yp9t%5}8Xgn=kS=aIcOe9hZ!mQ@F9C--B?t6k+@M;iLX|1g6@ z>vh7c*M-<#$Im+7IHeQiQIXS``eK__D(`qqtr#6eQ(n~V@_JBo6c#U$mNUN z-;P|Hqf2G}b+$-nd)87WTOlnU7UvVWa*_M{k$V&+wy^-NT2QqP3w#o-l|ENLk*gQE zza6=_ZKR-@o0pj9w8a=S*E(T5Kt2g7y`tCOkKAyjVJU`{r>oG442=K}IKWv9pUCYO zxxXE`&39we$|SRF$w41JfoI6cSZLuVa<8@D-;dn7ya}ERW8F~b*moV}-mo#!6~m`R z480aHem` z!-DX62Co@73jg4W}2^IzvRvEJ;^VX{GpTQcIz zIJ1M(4pBhJer+00Wa!1ndz~o{H)CZE&fkQpsBO=9vG>5C@xaKf!xt;>#!3~9GHSX* z1=42OR?I+PVCamg^4Fj`^O2tE!SRf0+_*KaM8s&fmtHT|e0ty8iqcXt^i+P64kKa8 zdXmLd2Nqo(4=9dm@aW?r?Jh_gW1raAmjtA~Gjkhg%QDVhvW9#?TD@!a_-gQIx7l}- zTJniLdQbW;o%dieXGT|j9Jgw-JL6iWsK(j-^^}%)RQic)_T3e8VHPHqCeyHz;W$j+ zrw1Hs>F>rr669j<{@5Gs%t+D6wYp(mZ(^>nhJJhf% z*FaJ;!_L{2obaLE+o)cT%93;u^5%r>y?_mq3lT~^GB;(&K(~~}{qWa`A4WZURJX@1 zf*7~CQ~yx;tuE5ug)~4oRJoA>xyp~vT{&JGHqj~#Fu$24;$rR&m>Zi{RLRRxHOnM@ z(n|MJXAs)a)>adX+;x+Sp zT&%wx>#vYEA{1MY0Z6h?HRmg%fVBhRd;5CLq#)NwxaX08M}S6~Q^civ3=T{DyX~<} z*LlqhBG*W`>ygk-rSXCu*kf}wQg&ZG=22jN+Zw*B z5>|Ld`mdRrFv0a_htzA4aPM&0Y&PB>j^Oy40TnygKm8-dPbZ(;QE@^i{q3+jw9zBmZQkA$Z*hc z*!DW+-`PXt>`do9&y}8o;=hU8t z4#rzvJu%P4`aQ7TkT&n+g2v&>Cb9ZLZ{(ib<2P96FIm6T+wVUJ(6%xulG`B8iOo}1 zn*E8W%?H0tDyKW(|C;|(43>TjL*=?(_LWdt4<-wv^BhU#30 zonbcSDgi^G+q&Z$CW*R(L2y}ugRRjfqLlgxYAXE((vPy-B6xTd{MGl7-A;Vv!uKUg zt2bw8dx&XiY&zK*)BJoINBWelyHL15{^`ujBaK+=zK_!gZ2?^j1rMkUUY{>eTtNTQ zZkyQYu#XNrbN8Eqji)Azm#hxJJP>Zf@mbgiwL#_N0ZDzmfKP+?jE8(F%nQa* zFpgV_K)i7?o*2RYi;P^-_Q5L{wR5IqY||#VRvF9I&w%B`>4~3c(QA&pgAO`#1#cjm zK&}%pJv7EXrHj&Ie|A9XV&q*INz-KMxG7p~=%mGR+W9$X1H8HPhsf{Y0OCcMvzO;SxYwVtKr@-6QvglQO_x)_Xuyp1NaRW5be%c1!vmc})M-hU4> z2Yp7^faAc1Gm%6m58Q-j(>edn%{7hQld3vepzf2KpTm>4-VSu`!zt5_JW=)e65lnK z-g9|45p$FoBQ#@8S6*FV630Ai?D>%6oNg~gLy;dW|_8FU{)PxNvwcYZA8 zl8+c7HIwUh;J9tA&)bhRu}eW-NPl+=F8h#SbOfb$K9>F&uzM$3!^rG$i~F`~&HaM= zSK($bO#jU*V`3RSqcCjiXl)Q7kM#sMT$sO}QzKhGW7qwQzScr*Cu5dw&?*u6Qyg`( z&KK|(@V`Isf?z|M%^hcCFxp)PHpq4bo+VFufZg)SB1h+I%(^yC}FQ_+uzQ ziO$k+L&~2vH~3ye;5;j1G3&nv#upE-#RL0BLbHi&b*oA<>gNR7B4`Kb2SVhFjMpNg zAMvC@((fa7c%A3Hw=sguwkB+QFDgV`$b{%Mayf^ zG86@7t03e87rXm>N7Vu8=kt2e_-F0^1p1YoxwS)$Cjoc$DFYT z41el7{jmV_vjZf?T8EeE8n?5O<#lX!=O+N>AB{pzfI5@n!K-qB+o?-~Goy!XZT5bi zP~blwiUa2m(-|~*X4Hfyhe(T#t`lbeWcKAhf(N;_7MjsYow@_%-=|8)ur}^w@EgMgE3-x(WX2VBNZldp%kMaK@2>QBR*ynUMI%Dakz=5Uv(*&XD z6M~-rxM2KdwFi*aM+#H!lTJi~xt7eGk0v-7EIq=A7na{&q1ickmo6H^PR?y)8K;s` zX_J;g%_EkGAD80i4?+4g-tG)|MgXC$!E-^<2vbvBW zW4nym)14;~Ax|3j3oI|pe=)AeAfmF@<|wBl*s^ax6e%FPx}!WM8~9X5=kcXFc9+S; z{t#M@FwybR;w+knEIU%Qwfk;E$6k-L%!`{3I8NC5#>2)gtGBZi!>Lc$%^UXiiJN{A z^g(A!2zKv|Q8nZ;ASOJr0wkTuBA8DVrk*PmcCqv>ERnlur57UUoRNBhbH--s&a>t3 zo;**#sQPHCs*Zaf1J?E}W6zK^I_Zu!$zI3AgwF~; zb;zPsZN*C`y05G&NW|q1#nPTP|nFZsFo*u7x4^Nb``3=HHoSpWwUWg1IfNF!h5nIAcfB zDJWj%`In22U)t#>`F-J9@?2dNg8NzNTmzsn3$>j=r^1eJa(T_#J7=}my6EQCxUR2z zz-h*CCaj>KWzQFlzozM35}JXk&zh^dR|1`T!SjS(bM?-t?T*t8v+GU0 zS&~J)?-A0XnX7)5#`>Q^H`la#7jDo)hl=O(3~}|`V zMRmU}BHx9`JyLpXJ$tW7sWG;2M*N&@pjhbiMK$(uad?j$;`S(;slt0#ARjhUcercc zvO>S$u-^S#ImSytz8|H70ZD8z+Tzlr*3AE83g%yBI&98EfBPcb--)Zy}u}Z7fP`#>I|7MImQ?f zp`HAs6cXUpUcIvY#p}E9s+KO3hK{47o448K0d&v~dur=%Q?~qMonvq%ao6o*Of<1Q zv2AB!Pi*VNJaHzR*tTuk$;8%)J+ZAf^*r~!Rkv>SuXc4+f9S6Nr(V1EUW@Ee@9+5r zOitXa#c(=1Fcp!&t9BS>j)1ge>5TeTMpS4qg0IwvW{av{j?ASW9M?GPyE-|_Cv@%2Qo*pkj~?v|KnZX5et?|bif&)& z6ym(*K8=nN%r9>y9@EL~XgPmJvNtD(xuj3ejl$aD^Q-koDb?3y+eLtsSUd|AlO0L6D_0 zEWX=ja8SK6^pREXHy(ZPQwU%E{)*E|(fWA=4m3@tN8j<}$Mxa&?m3st7UfLPr{G8h zKrrJ+k~0wxG2TnE%hNO2<-$X!ggd5qa?uiIci-}2%Z(Rv{(RslktNvNGXxqnrj$-n z!cZ0PZ;@CaJ`R|mN8#20d(M$pK5JG2v1!E>)~D$sW&_d@8wtRu(z)$0JiEpn+?k;m zA+PR>_qj#ZA)9HowJ<3rMrAo%e>c64aUES4!s)7SXV8gNZ*tm#LF80<0e%-Yui2hqgK=uGCfzDOMqSvj6>Z;HX* zi_B|FIDY#6zBIo3z#%;2gOjuPH}x!qHmQ~rgIYIGv-QxS*(0=Mb{xmv&o-3Qs2vb< zRkoDe%o6%Gx7ZtT^-Au&rrFT)$F_3KO66sj17b-xl(J_|;7iVY%*}7{UyBN~+4oQU z#g(oyw)_2XJW?;z<9mFCT-sy){>lBQ&B<}Y<2gLNicJ&}6(SLT`08p$tv|6ve7kcv z+MtEmuJ_%--JBQbofmKd(6{J(>Jj?Tz?{4@937^OcZp$t@eI%q)81RW6x0vg{($*? z=W<*7@JC>Hme(_GKQnCgy1n?LC(yr#04nAC+upGF;!x0zD z6=jOWr6ITO(#~lIjR~cQ=aeNWkEErGjvfic?!(V%y@GDJ!5l$m%G+=@HXwKX65g;c zjE>swyh6A=kl_(|c+iZhdovtC&Iz|JV=SK=i-3m0sz!?8IT5!g7bi@#p8Qt&Ha7ugaP zNXvzeco=91${Z;a@jYvpq_X7yoa)xFzvculrwHDpz8jvT(A)1k)VHTN@<$6glVQ!T zpg?z#3M&8hSIh!^@r+luv2zXSo3$+s(3jo}_jV;zI+Oz`zhtiXr))O{bnpqa>Ig#~ zYv=gQe7nWMIipqMU~{yH&+%+`FmYHLV%&%d0BJ zaB2M+N0C*{@ukyK$$C&eP$JdeeS*&G6bvSBmvyKe!f9*yt91l3&pI_dIn#coL^-vz)NDM^32& z)8ygaBF}o%9ogJulp_*JEZk5&_m(E37X?B|QDti`uCPp`6(d`A^Lm=T3@sjW@sWBd z)pv7~l~Y^ickE)QjRJ_{9$qwOC)vBfXDCr~l#y%Z_)}kzM`z?&O61(nit@y42uI{0 zQu43u_`G%{Xou$`^$Ia=ECknOdIq*TluW;S3wa zo*Q%Occ7_sFQRqX%N#NAwD^~kC;!jYoPez_@t})nr^mX^SIy4%>SUemMlijtA)xOpU`*68c9^~J0JWxI!T5m3=N<-zn6dD6XU)b8C)`HV%7eGf1nakDdjXB zloO6EuvnX`C5~J#Ly~0ee+_#}c#t208X~hHtHLR@YWRS(doL!WWM! z6+j#}U;c@HcObhn{w&^g?xc&+sj|*sa!HeTE5<%|3P@RHy~v=-|2F4~`=R$03)=1# zveg03ZJyx1h8|b;VSOGn_u2x{7ZJ%tX5zLrJOIv&H3>3+C9Xy5id9Ua?Aak^l-LZ9 zgPG$ow*M|P#o(DgH)%_szwsf!-D&AT2b(=PMyiLLq3@+q7Obi7qR zS)L|$rFuG_I1jW9d{qRUdA(1mO^EfQ1zMy}1CS)Y>ZBmGCPapZ3bP z_YLU^3Rl(&is)z7kLrY9&y;?C+R_=gX~*fVm*6dz;HD0QJL1ECpaTQ4%~_gTf?EhpsBLoX=0y9QAbr+z+pUR zB97G@)pm-@YcWH)o2?5y_FOhUKf26#tS20YEt^|x(kzP0>(367+i~7z>hYkJkOJ_a z9c0h+M;LP%PeqZy{~b$q`{O}hZZxelCpk89=_hE3{ERBBJ9zJ5Hh4(jG*z*#g(fs=|L1j^rqY zqWfjXfN9?$$1tABZe*E}}bTI=Qfyc~-Y6qx9ERS$X8KrxNeFD2)nyg%5nD zx{emk`igVr?VM>tTXNCc@&qT%SnN8<-j$;If8 zOPdQ6wPako`wj$NF;fBT^nFPMxQ%8^k0q1YAktU7MNrJEmMVb!j7tR5 zZn&89F!ur^y3rI2`W>`}y#LvYlvIY9_i#9u>1x+PTrp_k#$mAE|FKsWx^V6cQNvE- z90Rr@h%LOL4S0Nq_iC&4vprij1z3$2DXLi=OFUhGQWb}z-=4A8m5bikdny!;`4{g28^=(_)7apavB@-bf8YJ&~Npe{wHF!s_mHd1kAKKLDA zQnOQG);sD<%%Vw9H3Y&HZa7wd4SMga^>h82!~PSWfiyEUphLAwvV|KP@Mhxt)c}r=Y#Oobm?sIu$sqc1IWY|GoLRN)I zwzR^lsIzn2{6aM8AsFBjwM882k~8cYVKbPG#2*+o=?{y9CGE%SU9e2z%P}~r+JU$x z`Zo$|Ihr?Xo@$Uco|Iv+G*3rdLoqnCV&Y|0eqY%=OUR0AotCcW7pZMW2!{=R8mwYk z#I{>73<4p&OYKabDD3~3z>e+t6{h+_QhYkS` z{uGi;Xq>zeqG0d(=3Ixsh`59y9?-0_;+CV||LFA{rbe=xvnHgev7O;Ew22*`VNyc2 z;ab8Jubgxe?&rRMViAz7#TS%vQ)K%DOi$p4vO}FJIAiQmt0pAN<7VWJI|1 zfd?Rb^&gKbUgaNL#&R&gXmm6N|CpJeR~i34CG9kB29H9>KOu8k~1I~ z+#$6uU>dRip0F8XY}IW_{Dt319kv!4=s2#8sG&FXZNO_Iz3TfNZU#j#P#c|QF_+8i zRi-s!O#Q0MmFwid6Ow%GJr3+XfVVwe-dc)@G^`X0uD{X#+MyZIb)9G@cVIr%!vBQs zcLxr02|{vS94_ylC4@z6S3Tyz9{3Gunm<9Gc+?2THOsqs3GJc zMIyFb^w(f7+QbuvRnk%Ji<*MP(|V;HheSD`*6C|crT4t9S~>JVLCpyUe3+Cm)$hEr z>Om>^<*=X}(Auh!JIxwoB@4JjmAXdz?BRQ}e0td<>{d>FEpIM!j16;pR}6ELh&JP} z&(9#IHQWi4q~sA=h8Q*N?42h5UsfL53pc%GX7#G$re%~oo&0{*9w}{Rc!uMAxeQF? z%@gUi9&n4SJ`H9s=Hmq=$;TNC^IQ$_HkOQj~X*vAFeBs{n;f?&G0g1o9H=6BY%W3{WF5KmEmyF@u3g%3aPpe#0HFVe8 zM#Vj2MbN009g)v?FTL9+Wv6>fj#D!jnX}==>x1K|g7-kCWztC%Fj%_%@?crIF=O~| zabtf|=aAFkbU0tn!geDyNRmD7VsNrQE#C3g{Z=ixc&WD7DI;#V=xRgCLXg$@YJ*_j z`s>xKpm^Y3isPu%E4uyvDa9;=`kl`Du`cVXS~?9XGp_2y^A>~&=4I~sg@+~!4iwq< zatnE=H+9O;uO#A?r{1q3ogTIa#OA#kI5ru=1Myqu;@F z)Abg(R%I_Fr>}_*2@c=PBp2L;3F)uHQ1wMa)!1aU5U_V1oGPj2LY$WSv|QDTVy$AW z2BNJzp*F@VPEClQopU<0#CGjuc7u`jpAZ1?A8E@z!`sp0r#GuKAG$BC zb=AZtgeULDCp(o9vNU7F&kO;?AN0 zBm7yd7>o~s;Z`%k(FPFrJ9A#%77#jAH&j=MC_sJoJliT*fL(~E+Z44_wfG*K%W21G z#b`w_o$240SEM%8gPMzx%9O)0 *Sts2TC^5jR@-qz%(BxeFw;4B~8e1EMOKKrIm z!RiiZ2PCuwxSu~oqvQLxpvgtCLY;|sqtXlQX6EF;n^f&W)02mng`OWoPBz3!lts#iWJgTR=`_#;+cwZCk8GHn8DK2_F%gvQh#P&0+d zbH;!6b}#w8+er*1-1t;b(jv_SJI9PHN!^z|Z(r$7>2BE`wz;|p&kL&=rxu**t{q|I zvC8T-j6ZQ;eqi39XC~sV4FvTlLQZCG7mC>R${Y|9(cE{pJ zr^_^Han&#OgOGyGp}`C?L_}ftN~OEVfL^xfPF1GlgUVpA=#(iz5`!rK16#D(#@Y*h zvmr!b8jn{1@bAtSDd0v@EOFtbMRK{34=WJ@0K=6hr{Z#A`;VU6pnUuB4QCtR^0F0~ zK)4`r&roR6j2xH_@4hl;RJJ*cE9931_~%`sY4KDu(mg|EI+-FUa9ILVv*Z$vL%nor z)&hA5_`?(W$`N|$9PLcxZfCDtTlYHEZ_k1$i-he#6K)zv34Zl$k1}-_pD7}(`6Mf> zv{J{6M2%20qCz__b#US*SHEmmO14}3_`Mo3#n#4v0=e#KLZUlj@49U0cDjZ-JAGht zdkS-BETNg*{^a6Gnlg1()KR+g%0FISP25uS0o5^0w+`V!aZrPq#R?~ z%B&fApN4OB5FeYvSI0!4O2XAMc#nor@Jr9}xCM6gEenr;>JKX@(#%F@)rZQX1?}VsU zO}0ag{)Sax+JYxJm0t!->j$K}GaHe9^QlUZmwt=E8 zbH)3V-alKuGeOxhJ$_Jg>6GcRN(*umw|(jvXD$!FToPF{tu~*g7uY7+P|rl5%;d|- z05*oVfhdlXl#nZpp&SvkP3d&ua;ea}%JYj7T@5wP5Ou3Z_A0X6bI1Ltzg*$y`5o z^eqZ74zD}y7?hC8HY{HadUs*wfq%iUNLzv#Kw9cfCZeR9POcUeC147}0QKhgs~I7l z0U&LzdFzq>L;Tge4!|dLur9Gu-_*X{VD=SuO;#~@31;NVU-y(z)BUO5$Mvf*eS_(E zS;K?wLHpM;xZB${0pvz8o0`b$W(RfoXL^l^pU;DKecgfv{pMr$-_H(@iP=9qYz?9> zL_IH&2W7n-#xxokP+qa2Oy`1}xgl2(wfuh+EoqNF( z$p#NT!_Mt7vVSg9%2GguoKl#Vq@T5<4Jx=(mkc@!>~TK}% z(j~XI+gvRpe~J;E8SveD;(^7cWV|@2tL=WnTwBt^(5|ax-r~pi!ox6chFC>X(o8!- zL}`vPwv9?fJ2{UTJ8pI2t*)^#Qf;{${nNxTftd6S-9}ZVT*ZLXlEz+9DLUuo0cvqv zl?vGdCFF((k@VncZHrO-yMA-a`ySxCaGqpZ9q>^g;+w+Bcs~KNGX6d11Q*K^=Rlg_ z8VFdqzI0T~zPz&WQ>QDYsV5B_-D@fHv`by-CV=f%N1|=DX6Lh@p{Gv4MK`Ky8*(U1 zeGZzI9Eu*la>L``c>9w1y0Ljv`$cKf%rj%}XpGJ~DpwYZ zY1-${k`Y6c6f?ckbL9!#0R_XDthURj3+@6|aoxTE<5)RYqMAMR<-mIh>m;kg*wXKg z*x?-OM@)&C)2Z8x`<4LAOQ~8BFJ^N=Zp(X)WjmjcOV!?2(-)Phz(;aIAl(Y~WZdJv zR}1IgxWtH83M|>V$~l?@Hmwi6eUC zR*6eRa+81E83QUNEB6yY0UL6H+8bq7rwMAFXDMxiBx_8mX9_zpLucckDw#Hq30##P zdmf9yhQ5h2`pu2okPpu9V&TGaZR<{o&Y#=xL1sY`f2wMK7V4Tc!`V!)RQ z9nI?H+9El9@^;9jjHgbHe=KTmPV+&nRUhdrs`Q^|3Un;7c z+CK6RAr0cA^=Y%6upkcT2CmDyJ^P&5Z(ai75n*eXNq8fTyH0R^_3s37m^`m@Mg3DA z@9~0Jl6JQj2slUriV>L(v(gbo%T+MZa3dc4I~2OwyiFH^h-~UdnyX(br^uh)*l655 z!E`W}A%=dZ`i9mE_mLs9=(NF?4lw(OQ`=}vB9c~x3xlv|r?p`GKMWKNEXXHkaHqez zvs>`m(pO;OiPR7lleS(kWLR_Jeae=vC~x8a+Nw>8X4B4))4UbO9VKT^TvdbdBPG4~ zcNKNajK7nLE6jDEEo?${&`c<4meWHhEo2%{t~tNobq zR3k0oXF{k~!`XKRz`NJ8e4JnW1;6V!hDOD>gqCQxVCohY-cTxD!Bcrmxu_&i?eU77 z5v6V^c5Rjj4jUtKjV{)n0laIe3O#5s;tsy02*?5jR&Ofs+$z`TaVj9YJt2?3KXe2w zrVGUU_{i7NA#}s>A4dD<83g-ro}mc4b(y{@>db@eP~&WliIIah`!%M*LE<+QRRMY9 zPQKnWkQHB@aa10-L4%JGRuCMRd(gzyg*>;_bC94Re%MdZ8(y%a(D7JbRj=HYg?1Qa zJ%zuR>EPVeox*&m^mKy!Z0R@3)O$25^{tNv%3?%uiqskTIqI)IY{K%9E^TKPB*3^qo3 zc5Q^jSVVPj8S=t6@wRD*bf?Z<7fu6HC4G73C%h}D#hw)}qb^Bf4$DRIM%MR6H;TV9nd7lX1e6u2wkUDfDHL%kD>7?VI zZ33l$*}Ge#GTbEk4>h$q#7MR+ti0w7P?zm5Xy{&N?|!$b*CZb2@QJ$Cjd1m8?Bm_wV3^cKlun z^?=ty_P9PD+Ttg|R5(^9CIdH}wu5@(HoyHIzkLTU(pA&Skq5qk7U1%G>CCXOV%mr`;9{1*LXWTcK6##A5(a#bKuLTC9Z zPs~&^Szo0B->NEZIph40QZM?v@BDTGVx;c(4=G9xdpZU)1Ta1DJxqVbMSCv@ghdi-R-I>7$7yH}&2zx-$|$V}`Yri3P< z0QC$l;<;Q2=^nljG%j|sm0IBHB3g+ZWpEVq zp*#S)EE^LdZ8^R{J7%>iVKw*nv|4Lqp0>R+t!;audd?urSSGPLq?SfmDSG$<5m5{%^l1G6CmH=%B5c?T z8ZkyQhD_~nrHL?z93VgE(s50=L0h*ed3dQt1}{tpeEG? zTH*+8i7&j1<}JMt7H6XXB~sZbzQG|p_ zPyoyqx0gf*N|Y_%jM-2FL?>7p>IfNa25tvNDS-#3`(DQ(G6N;@>w8x$5UiAkbF@x6 zTHc9I*vUV>hYoi_cF8cVvM>Msh1QRpOI*DAahtH0e<9&Nptp6qzvJzbOS;Q4v5 zd_3c8(9fNGF5;5Pa-O1D16my%H4OpG%bLn#NUL|a?3Q-{HY(ByGU=)+t=%bN^4#pt zg~$AsyeLfDCAYZ;{Q`aky4s^#QXtDY352&s-yeYeH+dnlH-UF4J7Z}(V|YIep?DqL z|I)wwcysF%A^X3u9*F<{IAP2EU(T>k-Oj&hYc!p+{ew;qeQt)Te6v&jeVuN`4v*`N4#7Mks!K?W$1%^G&iyi*2YH~GBItmi=ujnJayAaLM z%}9oejq_a>j8WFQN3w`g=tEf1Hyk?z?HSjiS zg5K&04hggP;4|*i!*Z7HB^$1jjxrkBkq$qZ?Fqa;60v^Bd`OrCwOKgD-DqH)2qFmv3Memz(>U@t=w+o z0-q@owrLt04C*A+2P8?K#pA0ZQzUCg*-PNQu#HekSnzP%2u?n>tBq}SFY0VRpvSjZ z$A??P7pWoT%4f?B^d+3u)bOY-ZuIPJ!wME^p?tDw9a-XIsDXRhe)i#)JYNiq9N>@P zj9tWE6tt~6cD|KGli~+~-?^?WwyT-XvtsxxtSgl{TW@-5P zch}21xTmi?wV@~q?z`x!U~|1KUp!T*sNI^uDbKAVmV3)=Xj%4oA_SC*0#8nrIZ#HN zTr9}qXiWBW(S#5s$Xh`~OLw_1mi7Htm^d@!A4>WbWz;BOLl_;t)&`;p1B7Ylx z{oz2-#R0@@<9jUBS5B}HmyU_t!@kX{ll-Dw`-?S%K?D|GvpK5{|CmEmdh+$Cl~>r^ zgdDwEklf9n!qV>efs!`I+uup)9b9$5k5xx&uFxHMtsEmn*fqq2qm-W>EDLN~k{*n{ zpF{oa@Wd8+n7$YiK18JA{8^l$ZDQQf)S7z9Iz17HIk{5t zT|@B3*O3dAcw$|`0yGEvO_Ez%scJH8OYC^>!k1{@_azd-o5SWCIc4z*7AnQ6m+LfC zV@fq#I`QL9iNzC(oFT%X*SHQI17Oku{(;`8{DZbskZ~T_`;(ryZLxD&4QOs&b-)eS zXswG%>k_fQx`*6KQN(Ph*XXfs3V!T#;ad(_`tE>PFd}GQ4DSosyEjiL?zgprEKggF z1`N{Z1Qdb%rLfd$=^K0{@7AU!MD7~q33dL==RM~OcHUQ-lx77M;9s~GLyow8_c8m? z@@=0K*Dh7pnlx*{wwc%Z0S0JuanpjGANbEgOH>_pq1Q>LY&8xM5ZsH=3hhO_#`|VF z{g31&tYBZDdkcT5NvdwJ@iCg2YVf8ICE8r#Q{+xfCq~ekD{)6e)mERN@6mr#B9JsD zkhQH>?(XJdfTcpn0eRK|iC~I9(WOSZN>;z9PVKZe6mFr5>yQ5Wai*tdYM-wLL(p8*{ZUly7YP zMUt`nRv{QYxj*r;OvVe0ya1@H_Jgzk=wC`=6oG6C)k@l{>PAzJ`7Tt0VXkmA%)$oU zr$NK0y|(oJNBQeb+R-q0bF;Bk)ebLI2%1NXWYGoDu=&qlhOufj_(Nayw*JJi-PaTP zG-^-mq47`W0lpa#!GN6Qf zEl5Q)kl8iCI{Ym%vQ;E22puHhwV-7S+r~uj!ziO$^7r>|ofy&O7AazuqA>J?7&X)ed30?0D_gYskr0hXnnoco?&TOg zIkw>{H_JyF)@f*v;jyt*$u~@Pk^LjqFd3?_oa?)nbjVV|TqZ*8R-Gt_RzX;yF1Uh8 zlC(O1asHbPcReqS7S-$}g5bi{Kap&+q0K*_(xgSCWFW@~d+FCcf~uOmbJF5)H|eG> zoneOUe27f)(uJ|(~QuGJHj5hPSs zj>~YEVhlMLY|<9kg@d7Ng3eFe&8GQYl?DpfzG^eC0X0fdC<3tyolkIAKHz710T!qt z>d;wi#o?b9$YocdztHS+wjL+}xzNiO6fVh_9-GYn?)NtkeEV(9NkDWac~S?@NRWh> z;#Y)MOe;&~o&4mf@mXUii(wrysAjmd%20v4b(6wx1WNfDI^juY>QZkY&pRlUh3nQU zwR(Bcg96%os>k-z;SBY%AIHOsEd$d0s8-8imYsM#bJ+Hbhq<$R%-yIPVTWO?0B_Sr z{p@&5K&NXV{vDZakti>5fOzHR(L`a8Tw>`SEow8un=O@StPJayY2NfIB2`MRb5NM< z_D_TRuYW`9?&3p0{OQ5&i&x^>TC{_Fs8OZbR0j51c9d~92a^qxQ;RBK9J`s|*SKT% z+s|&^3W1bPJ56n4<=bEmKk^EkQ0KUq51Za#OpwRVLQF!Pu|*yI{u0_Lj>D!+|M|ep zl$pKrdKTxgUC5GJPJ-1^ciD#CTXUk<`@hS&_;3OS^W)&Rm#2lEdusi`qf$+A;R9pj zrh6j8Ew1%chyn&H&T`A#D9u}0hu=T;PttDJ$#loEb8M5EOq(ikZ&Y}>2}<4!$7$s z3s{GF@P{a&rPtJw9zAPRPKEXTdM!MspbnsT%$X(2LicbL+6{$M=l9b4f_AQa-i&Ps z@yVjgINMroJw_@7i-^vR_sVgIG3D)yUxtH(=94tea4BNc$W>uAGc-Cm@5RDA+TP>Z z^c{Rg0J?w-Wm}X#;4bSd0=E~t0_CdQ<=&^|KWb=ACiKm;;i>AYq^Z|hhKY^*s%5&0 z&3!Z1RdEfj^^!zueiaqQI{75+B@?vhYV)HGC|@dHq7c63CJKDncSUb^+<%Ry5C8V* z6n(4Sd^xHcz7)w(J(?pN__3-51$C6m=tY}&aJ$q+uNr1CMMOwU*rP=_9o2P>+=Amq z-(0Y)XE+_aOuFO!k9*5G@|I7T7PUIu`r2>px6zP81+7iziFk|GnWwZX`)f9PMZIlh znx1g|zOA9)gK<%j5~<7cYV`K(MaO)#Jp{#=ulx5CjuTzCxY>@ecx8hd1a_kt@4UI$ zTdxJSM;Sxr&=f4xIP*SOJ*;^xa8Reh2p-0mNIJ^ImkDzHwrA;8ciH#$s-^-I zII2ocii(o#O#tUJvC{@T`m*68Xgak(8 zM0>M;>o|m7J1tK8ZL)Q~Jg4cR()Dv7n}t`wX03Tv6@(dq`p^usR_e30IuI%vDr%s! zY+2ozAuGzNj;?@J6)Zp8sPZ97%1gJdwc{IWNIF+fyTH%XP5OR2V?4V1N#{QzsTJ3f1A{#DtB)1wz|rihIyrScFT7#JJVYFj z1(xjw)0$iu-H&RAoflVTyOiv`qxksym+~%M&*+-?C=b7O3RKcdMWJdTKlfZU3%SfP zGh7=^%M8s`Ge?@uvMxmSXRtolTmV|*O-_uCVGM)wD3PUV*ON6zU=c~?eRzxGZO(Jt z_0R4eJ(HepgROM_!aCu6ce|>n?^c%QbIT+RN+^COb2yabLhr0rJPEgfI=&9$D85v4 zb`hn6CBK8muukj%A@{ZGjwl|VOV1ZH;vrfa_0_o3NE;kb^P}=7)%$R7^-_8ixY;rn zni-1|dw!$|q43#DF!H)}A58~2)|`R`S4|HA0RX0|qM$BOQJf-G@{{Wa#i5mK%-@<) zqNYRVYM~ge)LyfQvn~bpADuG0Yy+`HPfO{)#c?{v#N`v9AQm8#oig5^hc^WwNC@Rb zR3$8Gch?38=qsxpyF5&~z~k+JB{5)s5p#akE!k24qLeDXM|f7L4{M8m?9LR%ptwk9 z?7DjR1<%OBW$;K45Mc3%H}46pYUPx{CY^QUJ5+o_5Nwvrj778 zWl_=k8u2&Ne*d(>TPp+@OG;$=2R1Rs*H+K;JA{kR*SZf-&^PJEv2QUOj=M1k;IJGo z5SZwS5~8L9M6G{DCLp}))@9@iicwo`sFOdkPG(pwzWd|idd1K@zWprxv}hJiiz@dL-#vBPTdP|g}^Zkv(zTxWt-7jY=K7PxT%|m*5W(35&M8a;B9c-H#bjGgk zv6KTA?0qe${jd5Tq>L$fhWXnd+U`_P{`qaSsM2hDx?XUnO7r!bhpLR#LvxL1zzV}Y z8$`T0AWrv9f;Fs{4nQER`!FF~MQp?#L4MlbY)M3|G=Y=|(?kRw82xoL@_63tZ1?|d zb7hkxY8BtyDD~EBsu50}nlr-G6<22<-%;6Ka+xvNBBqJoIE8}M zpa_DV-tkKcy%KlvK9Q4IeK=SC$_@~M0Go~Ak`$kt!{{c(GF2?)7twVJj}FhWgul#P z^D<k6QGm`m5LRA*N6hpiaG4Y|QKFyX9%;!QU%CXnLVt)!f&N7lu+$ zyPIQR)7qHfDI$2{opGY8rMxk$o!?;XosU%%o}_d5(An7cA!~jydz`UsrDc~uX3oGO z5OxG=U=4~O_#Cu|Vlt5D3HP}T*E1c70wUS%MTZRp9R|qI@X8AS=@V2L!>(^$Y9|E}$6)+?`T?-uL6L)^Pv40$L z*u|@D$m9?W*k@w*>tY2DbPZ(R%6=m}#IMsgDC)0ohB3EAngHRk{1p;oeb(&F6Z@kG zh+^HSFg^Vi+m#+J%FV~M{V(@%Xq-$8h-J9eiEk%CkvZPPIazd&9FZ`<_uZG_x}NW3 z1=pn_-F&>>RIM`deap7y?w z!-Am>&iFU8CtrZq;n?Oh?S9WA+L=UB=U@2{$6&#~-k&X>6on};6i0>ROFx5e37U!| zW2WmfiiUW-?+RizK|H&bXoCo(&-fh%)+{bqF<>O>4-ej5T1G_p<`YwFh7WFxNLAs2 zq!oBz#NvR5%-M4+98Koyp2IEHnL)?nfssN$JdJ3^$XuQdz%Tv8X14cb!QrDt)uySdaK z$FWXEs?MwKmN8oHqz?oc|Ey{GF@$kPeYDjB~m#>GD3xS$+cSE$Uh%xHgNcSSM17dAAxybSFwG;#xN{OOurz7RJ^m=#$rtb)6q!6+KMzP~vtS_q zY0dd^5xfjQ+l~(LJ-t{JW)OJe3Qsa0mMm1v(wl-UL$0n-F#h_`suKBCt)G8l`8Obl zeV}}Sxa}PHADU#K*+u&-72f^}S1feaqC@fEVdH^6dQFo#@|1kquU)}6gs#b>;V{iy zO;e4lW)ISOI~M5u(M!GnB^|uyi;L#|)qyTx%Q-r-Kn}U-tOwp;=grts3%l%>_rfhv?oaIJA=>zDr%060Z3KM z!A~d?;*y=inQgJDZLvJ%z#sQ)U*33UFI$%x5-LV+p^|>f4O-?H^mC5!J9EPD!!6=OgPM4Y$LzwLh&ev{wNl zlZp~uGqDz-Kgb64=&G*N*Y-#FW(>v34@)3KBbOmu2||k?9iPP>|J2xhv-EH8B+ork7r#-PC731Y zg0dT%lW|bal)sX-#u3DMNPOE;<97ZAV*wcedKFALV@ez4H;jI^A7M=fT&<#rlm5-- znFhDJ8bhZs@MFdq0KS(R{jBZ#pxfoefDKGFvb13Fvj%bBgHS=X1N1X3KE;3M!m7XY2avRf5_; z|6R)YdOCgy=KZ1JzT2Dfh`q98Gm=%)9!@ejK2d^5J9W_XoXd(lA@G;zr0sb@*j8Sc zZRX>Ah|LDLk5nY|C?p(UTvdp0ba_2ZD4jbU=qYb1R#qNO+LqiMTD1%3JgHtB!)w1( zM(9f5>do&Ogt91Zi5oLZwHOd6dk9|^u(u!?J~KPo)3Pd{Y2?Q6BQT?S$61amufAg> zr)GZZ6#-yWg!Z0|yNw=(KRn_REyDhC#v^b^+Jssd~ee zv5vA~b73|{;bTaxFvD}F86t?I{jqA-w0rfT+f^O#_}v zQ-G_?E_|mT>(dl8$T~NAIKv3WYh9Q1ZtJKyUcph@ z+fkbm(++Rk)R=^?652bv%6N542jj|uubG@)^X75Q4E35B>NPXeYo_4WOsKCpzIq)O z^m>%{?^wy&M$5@%weD@+aWxNEV}0AuEPVG1;=Dj!^8)$N;G5GRF;GwVXsn7p>Nbcl znXu0(Xm<_vqsF(a#^wa(jaV=n4h(b!oK|_SVG&W^)p&II_H_xSwK#~{5L19`GC*s_ zgbd|Q8h2e@IeeGUa#Z_1R4WqWHX%n3S4SrKBDQdUN{``vnx=^c-Sbc?9sRx+{e~xG zs<69S&%1&?Y>h%Z>gcoHSJQl3%@-Zjz8lpR4HtK^4zvhT973n1?T%x0_4?8v5#$Og zbI3I>hSnT+&2d-0^qv4^8-|+0tBgm-Z%W6tY-KNVt?Z>i%)ZN5r9?C%y;uJOt_;Dv zURHD9HN~$fe!bS} z;^%47uIduMmnIiEs(ytgE#!#D^;OSD#G4$Wibp2W#;<*5SQf5PlofZ#(Rv?!b<>iq zNq}VCDU%@OM;_iB-n=xpmBIuBT3401OPBaovPQ?Qdp>x>hc|~epXFY7o;a0VaIF?` zu}_yd8*MI)6!@`3!J*8d%nM~WZ}c!un&JAY%=j5YFI!*_FLd*LPt5#b{9LX+!Lk+a z5P)(0zgdq@aC9*HUq+me=z~&aWjnFz*>yNrFdHKAk}bO}{KJ7(yx=xZ#hYY1nn!Y!l)Jxx#F2pVh|b;*N8^|0u$=xZz@ z%;NtW9V*S*7K{kNGP8<()`jEY4e?>oVbND(`Zgh4XsIf_5n}{sC4#XMV9vg}K3H@d z>%*e2vS=4^t|5N+q3j!VW%^cyUFyW~DIG@-iw=vv#v&etNBGjEloruhtZt#3X;i~c zDu|!F>vC9hSoGChB7)Kj6+bnhEc?2HcDGA zp~ZFGC!gcfRuLW+9Tt6!MRNc{pRuZm4`wX_bC8ZQdxU7hpEvQSC$r}xoxyL~&|Pg8 zs@XAi)S*~5fsj_J@(pU>)0&pUnQwAt%)PzSSX00jt8ldJ zeJDa@hd75ge=W{de1bSkmDV@K3w5&%7Vm&_-)`fD&8c6Z&IzzjfSpkkYy?5{*0Y`z zloC|9j5Dy#EjQ41*!jSh{zMx)WT3YDQYXmQ`VdZ~RIyD67BA2cdy zk}kW%$5lG4`VOl=TOBPPnE*W|HkUQy>rf1H)5jX8hgFAFua4tt6B;xHAq3R;Ut8YW zqUuHV@Q1DX+S%%%(VZ77zJ!dF~M&DTN z3DgZ)%m>JM8>6tc zCSWu}<`R}B0<}_M08weLBMCmOxjF3lCVQl=UNEM6%_5x>5n)mhjjv^l{lcDlwcf%D zFG@1CV|G3|ae(3{ysKEteWJ-7G(-Jv8{1&I5eIK{X^H>g%*W=;#6l+KY*OvIaE2oQ z#R`qL*t*?LOzCSqoH?AyvSuWutCwu$Y!P=`xX4Wh&LvvcqQ7${m2kYBL#8j^4_P#d zwqAF0TwL8m%AyJwtJtXRwrI6ug${B4N*va`#0^LMgFc3jP3#jvB*sEtB+fBKhf!bm zpR?VUjQBO*s|=4H11+l*rH!%X-PW~!?9pM*7dCzJR;=_rxn;EvZ_;>VH{`HQb$cGt z2Mu}>B0eM@x!c@w2esucXv=-r>qjo)q_ToEe`a%+4-0AC#kZl)Vrx~L5T?CYmcy_h zt>6t(IJo{`2cb1rv%%AbE2x3wrS3gpg4cZ=y(Of0!2Ox+yA|$2@3NKRjZ@o1ER%=& z@KPGxz^w=2pRTCXBJw0E)#ELY`xP@{h!uopFH8M~@PYZC!K}TTV_hz~B;1)bg2mfy zv8_Q=Z!q_R^)IN)GN>i2O?9+f+&nDuZt?FPGHKtirUUpd0=yTlL1yV?Eoxcr(JD>N z=9|=e(Hr1=Q2(VqviX>OK$??T#fMbbR>HB1x0=HZbve-g`rwv9H{lSCQLBiX;%@3Y z7S2uxf8d2=AXK4VUnP>1NKzt6i6kYGl-OtF*}5JDyx!?X9?o4B46n10j7%Wu+xo&D z#{ZA3T@vtJ*vrwvZ*ppy?y^S=Xzkizmlke1;+#Fc8e3nqaP4gzRs3d)q!AWvRtob| zwnlt}u>yPTR$+y!c~=DD6p|A^0sWUhm$9Cj>WpR=6LN2Tn37-9lspuwUK$$ z^Dn7~RA(KvhlU!MmMQ^aFLQ1l7Pjm@T@pHmqnUs4BuZq&vd+_r%Z|SvnY}e=H-ja1 z+wr*udbzPV+Q!#hx|DT&FVT!aA!ScOyjh>_Nv+Yd-!bNek`27vS5!AZW ziZAN!2}Hl{C!G2FwiP-AO2H8$D_eGMzEO`K? zEcRFsF6^8l%6Cooqv?09=|V=~QXxg4;u?t#oXwj_DjWjbpK4cZ_W_L+S`p|tnYJVcN3v-|_R-d5M!ds7kON?2?gp&%T7ldr`M6{iM}e=zFZ?q3tGjb;D8j zGpKtofN+`3BJB3Y**#^gA#9YjFV|h&_br#RTtCfnjcd-*+*kE6ChS$02+uk@Y+3zo z*g-$*aeO%NTpVbVD^}cPlZ;J;mQ7Rfj7wVs>Y7z}2%+29>Qf+= zFPrrdtsN3PFA2h-m*z;bvM~;{^4PtFewgswOrWjGTw)2pyu{2rAltPT zA}Ly0d3XnUnDE?8=-9mXxmMn=EVB$AnAdM?$(GXjVH3(>!gDi0vR!k5!A4o{TdDOd zjACu77p(Ka1UO81ZYIo~%_+kogmMb?>O805?%r&Uq3~b=9wt0D6BdO27t(6rvyU>s z`&dE{h$#0@OsIzm&&`CqOBz0bj=ltJ(&$JX9I_~2nuP}w+F`dsIGmt7U~Tznatl79NbdL=dODw8>ZfPuhWg)E(7wEB4?BP=d$c<0+RQTJI|~X-cr?cQ$}(`M@HA9_ zaK6=GWyRXi*~Ym_58nXh;7~iM(*1Sh=+a70v?j>{ResjoJWiyIL#^ylWl+hh?DVb&oq0 zLW)C$=cdA}ZnZ%nGD94*pqJUV2|j3;D9aWK=dWj4%|pqQnkQzj|y4xNn$-2)wBNeh#!5}jIW$09V$Ex6=0MCjRr-GshK8X z1#Ne9UESKS$F9Sn!n0EWH(RU}UBkBwso8A0H`%dXOzPAhRDd)MbbN{r$dSH=&#)At zKsy_Cgg4P$r-REJ{K;IL{px3@g0MMdjdEUI8WH2(+mvi9n03&D3dbruI~5e&sd=~& zeWRQ6Zlq&vTjVoVlm`{gCgrnJAR#_!J+T zGQ0mjd)Jm2SFURR?s70$ClqX$fC4yh6)uPis*Cm={-w;qOCf!|6rLD!(&M8ZxK1n zHH%(%9wUrQY%sCO+82;4p5^}m$hWCTAgY~4X;V4g9y_jh3BdY|e7sTKvzgN2{r&U4 zhGV_Dn~RI}m3v9lY{Y+|4esoF(3`Wb_3-{-cqf3>6mW-?R-5K%I+p{}_MJ^n@78-e zw_sOT@|9xnwD4k7)kG*GzgEn(mF_=8}VISD2Y|x%A4LpIT@j*$X-ox(yeE0Z7Xx z?a>WyQ_DBGG*oZbBd3uXs;7o}cXI|bRs>q=8kS?ql2OpcBAQ}t+|4<)a=+%>a|S(U z&~v&uo_@uaJ*Sbz2Cr|zM*?YPLD{AacY%t6r^@-ZP$)9yEr;2;Hi%&_(0k*tQ{ zr-HC~LF_Xl*0yd);eqSsz3mnbo5nl1340;29bT9M)oH8V;Hn3+uZ-#FG_r|HSkN5~ zkBl+Lp4mj4JS@=-vjg0JcMDgA7@L6er0nL z)IxW5hJsM`Znvf^EdSuR!t~rf>3n^aBhB54p4%inN7Zvwoj*6E1GEB>4q~Y^8HT#? z96E=gj+>t-G3RSvtIGxOI4J)X%1fk_2=pWZ;;!no;Ud6YIp*kki~n zrDC>pSbIyXt+g^ElS=#@Z8+o-t)`H5fZcH8O-WYYgY<6rk9m0l%caHHcCf2xw z_c80k4TrE0P_q%OpD%Ydt1M>m-xLC_sWok+vd}w+` zyJihrs~e4L*~x&I(OkS^+{WW>*M{;w4ds2BL)I&j1(l_g7FrMmCe}_%0loJ%OFZr_ zlu-7nq114cova8h{zg6|AAIP1BXq`3ma0N|9%8$?cGj^>wR*TKuy1r8PTvuyW&4CR znQM*Z8Nck;LACU)m}Sauoc2TPdm}dVZM@;2i2tllEDXWI$dk-zto=qT9d_R(yRldu zX*S)X*44+}zBuq{8TG5(*yTg<>V8reuuLn~9cM zB8+Ov%?rhs!TGwUd>r0C6z{|8Y*{`NRKhz~snD3a$6EvSqIb$YM@#kkD!IxmHOkMS zBNQJ|C^Ct3nY5v{gAMK5M~5lR49Ld32?ZU=_-vA)wpQjD*EN`T31rKla1gmGBlUKZ z3_jxVDaC_)@4`Mf-d{*dM1-;-&%bKbS>Prfa%AN5%80rr>^jNY#A+c4T1WR8mc^Tt zI~mED9zprkf)aAEvCkEP$(8K+6v<|tHDyodj)enlBTR8awO-1cIfJ*yiuE!>LS zZe#RIT8=sT?9x(nH1OI+SfSBXd|89#n?i_$+Rc~ga75;a%zex~B#|?Tm$5G>pS&L2L6$%BUQh+b^$D70{Yrn_$zdi&IWCPt#G8Y z{;(R(5v?Oyzi`Nl!iL#xOUM`OW@T($1=UK|eOJ4Tu5zA7zK(qTer>!`ctIgsUNLxT zVHLO37Q!aN6~9y%Izo1Y><@(uRF=WmnTuSM*N9&Qg;L6*2ov`=wUCaa9ZCDs%?Gp6 zM)nvCa~V2qXI{KYpyajoajP&x@vHSBC(B|}mc_m!_NtA2IQYwxiw$0B0k10Ak!@IA z*iAEOeRhJ|9%6nP@wKYQq2n1t-c-5+iX+$tTBWUl3%%}9yuoCJFmgIsCDEPUsMGh&jY$9K34Rx_G-XuBttpL{}JdMjSkB-xJdhF)zIL z)$3GTV<1Sp2^lG&LxBaAk>)cJLw9t%Rbq&rf|%=3$A5`w5q8Am`l{!n{R13m#v^;; zj`1}~v?pMRK?hBvz&5ivtVJ|7HQazZw>YB`%03a4p$TPZLUMg0Bbw|ZOW6^bl$X6zxL0X^&Y=^U970 zGTA0Klo=`j?>02}I_0D5E6fMvBiYGNo${!U@~Dpn9rE7~`PoNzMPOa9?UD)TUIT;d z2fI*)!#(-!NWce`01B#i==@S<4Lx5x{;Z8<+1{vYeRF;Nh{DGeh1D0B48gSn%N{=t zwN|&S4bAHM-tF@v46L#;zRf+^3abwd^~x8X5!gt%$u)? zmX+IQLTvCCH;!y)H+ zD_bJwB~zFjA4pw#U%uPy5nWO(`29HYFmxC?3_YCEsH!kn_W&y(ozNJHxzswb_x+RD z`_S})G|8sT)YmSxk7CpzFvYzZt$hDqMZ<@y7i?Em>XhCVE??kP%XXg2s`oi754dqf zhp;z77#3(=Wltbpy_de{&Q^14Wq|;yUn0iC+8bhR#~f`IACpaYS+)95X;b1a@BNz? z?oju3sB6BmS0{|rl6?(cgS?K8irn^SU!p3`#PFW?fWqqiQw1iV0)D<`lUG@kE^}zoZ_Y=yt(jdM8Wrc>9@Lp7#bRAP0jK_MKhl9V^0BMXh%^TuY?k|*%J8)xe5Fd#j4u=?FgQ@Xd!o9-c4Iu&FOLhjZ?S=z< z3NV~PAga_3yLK!cz3*aMx^0FDceVW)dOq51>6I*9#gH){TwlSbfvfL`VFN7X+2-2I z!6>zmxQ6@?-{6vbWF!o9fV->2gi}_>h)}D=XH(42N>=~bp@nGOfJ?2*S^A8#^cmyz zTEdm3&p1n;F@ul~& z5FKYBx+wuWsE zYkQku!*@N)FjUfn77gEHhqE1CU+s|pYF1?4Mf@qIe2M87sm~tjeD~e@{&9#nP}{JA zFnNKw(Q2|v^=j^A-j(LzelecPAXo3lMns7tEY@XM`}7&sv23-@gSs>t`-Vt@k+b65 zsOQ|M=Nt<6>${1=nM=L+47c7yhS$_9K*%LE7xx~dGgW?=Y1Q_^b5Xw zEg{IB1$?Di9EATZn}{SLI>Y=lw$e&~EjR-@WZ|u>Lcw%`uCHMC7irwVDZy(pS^H*((3I(cB%@ITX&Ja1P+90q2|$Q@)nh z1n>4+J`D7sJ{m2N81#e@?oef0q9c@xm~Q*UM#_=(-!5rdWz`w;UJ;19sfR0V8@EA3 zT3+}uJ0u77-#+qK19z4m)LmpXTTGca?82bA&->`Dj|2Vhr-${a5l-Zd)Us#EeC-+t zY@jfv_?vqg2mjx`5U{eNw9Z+9i^iWS>_9wWu2!;!vg9o!VSL09Zp6q6w8B2D+3M&{ zSipsPnGrZ&5p&EavFFP&_y5f8%Zz?kjv^*qt%?&kn=M_Wv{5<4s&25`oV1o60S?Qis3BYh9NI87HvCz#xjW|gpqWPu;r*!VQywE|HCY) z$(ec1nR(8cdCr-6{xak9DVFdwP&5k=5%rEvbNh%d96{z2jl;6g18MCu z>9>K8@+L|9&a{R*&0SGW2r9$ z;2WREGA*^Rctc!S%DKm4#qHrPDD@8a^QiA(GCRbG!Ii^84%N0|L3a!{FFxKn-gO6& zLh&m(7s=9tQm)t1B`VizkdGYgxF(*X%_1+HH^4a^RUWUVV#A^98sYltG;tbd=fZ|2 zO0kxZ9(G&nt+Q&*1@5n<_q$1sd`LoY&7R*Y7@@WsYT0sc-DCO;u)v@Z@rqjB-6?y_ z9zG*BzPHvcR-qKu&5${~b7tddM)`LKvU?Q79&1FWs(6=tR3uHpQ*O6w*R7!#KqfaDz{$va4rcaS7= zRz3?<;nRV2Zn0n%qO(QZPkk@0r0!Mkpt=-H?k-C1TS|U}jt_UX)Gs2Y+Yn9m2SREZ8XfaM*Z>pwriABQILb-58gLFEobqnZ-tS`1lvr*Op&i?U20ZE_pXZ z@@|Oa^?%6=B9hlaI|AxTUzSZj6ulNjMT=6^ zy0Tu=fw`rOG4{+HK6OivWPAwIO3DVMpNq>>wR>UeaM-Mb&kB(=0UAYPjipt~Ju&M11`H zZKOldOM2))b+WQLbM-xa;vQVOptWpH`jfq+!_!M1U$pqGtN|`rLvJu+C73fXNP7hM zs|}??)=Q>i?9LjHd3j ztvr5f>CpC)!LF4(l*Pf8wpd;Sj`0s2II-*g&Hbgr-HUEils;w&mv99ZPPRKh%&fu! zv|avWlj#unk|{zBCQe@6hxQ1GrvuJ8LTAP!g0Vl|X*w*vG8GC(@WeGxYZ3|jbB4&03M=HAf3)RADy!zR#G82G^Vo!i8X!p~`ChlboZ z%CI`Sk#8Ci2*SPK9Snbx>NB(SW!IQKM_?8viIsP4i^Fz}weKo;TbqtPE+f1J}oOghAf5Y`yhmi84(zxVjg{gLTUr*Odik-Qegujg?P{!zY9h^v(Bq}!;8Wi94i=MHCdVhzXO9^uDL z=D_@;be*QCfoti$N~@eTO1E~&X z9^REz!=m-E>}~{dQTU9*h{(f-2ujTixgG9GR>V`vl5wTf@>SLCXCI5jys@cU*DG*b z9JI_PT6!o&$3IOa6dkHHQr-|4GHZ> ztC05Z6$yTyGu;Fx*|Q83i1(U6G7AApmx;7~GSh1=Ih4z7cpuZ1#^}WyXV7bNtZZ@8 z24!Ihhv`48b^Jcrg>W|^R9=y`@m6#x{EAIjNru~x&MM#YoV^uq=&N!CnY_g0@8*bIkbCQPJK1+6~ zwQxGtt(Ne(n_mt&Mgj4rZ*(qZEj$u2k4Yeg&!0sHHu@}TS;FI*i{vAswQy$gk)chF zVwCHv>qlxnFdy(9CXRhB3hU!47?Dp5-EGF~n`WnJ_1nb9$DDmOCYS>}=8CQNq2ZW9 z1MX#6>wZ_8?K(;Run<5*brH7DYF$LbV3E~fpgzSj+PXmiA03C*bcKmVn~hp5h1nud zX+AqlquOp70Ps_Q0bFh93I!O>8}5jY3ShiPQ(bIa?`{l?-1Hi`={0iGYh=yzkvm@_ zH@ya2fYlENPGxG|o!XK;AwE48PH`xioHAw8SE*kE;WHvMM&AY)Ai0Nvo#+(H>Z(^U ztM>A*+J2uGrrxI&fp8oHtRBI9wzEWcSWO{x?;T77@nH3T;g*a(c1&pWtMq;Z8rUW5 z7IKMDO`oUGy>Qio+P?}Ul`54dEN2Uq&Y|hm zhYX9rrWL(MtsUt8+gfI>T_bD=tq)zWXxFW)FM_SUAGBFN_vOy8tbpy7=1a!Fp0vmbGqB& z&RP&7@T}$Tt8{!*e#WKmvg+t{0dibBz&YB>HO?{;BUARq^(L+UbEV_OqW>o^7vi{H zg?})cddGkAvw>>(?RkHYQqHsOEtR%`mj^4YHvRWNR+}ts&(VFU+ui8%EO<~3H?ti_-Y^{$qEK=njx4z`vZUz9 zx*LP8@0M35#(I3&I`4{8u}p0{qNPlsZ{cD%{CjHg$Pdq~&k?h#^;$rWo8(&~bu6eo z)~*}JVy3lvcv1zom9>%UxSfdb#btgbUr6M5ncpGP1Gjnv#!HpbJ@-`p* zY`*yM=yx31AUH-~Q>;aFqM23}YuYO8Htz&K4Ao_#MqU^kl0BqzFJZ{_&H6z^gL|7* ztdN5*Y|hKFsyqN^nKs0qW5Ji$$mbB7MSX-jVVi)schL!3dR-Dm+v1h~L3m+dyCEL& z={-L^9@lF%A35l}>^H8D%^N~vT(9NNT}RO2KYaq3^FYsmoI(XHZ-r)jyAc%aEBwv* zLm&gH9L$AK-k%)lQT`#MpGtHmTJycoWBfdH?b%^xiKB3_wad66UdBQEsl47WFgi@s zs6`mCvtg~YWrS-FA$S_Z<8dKA{sea6cM3bU_(nVeX^!8HuSz_w!DZMvBJ4aAya@^{ z;_q5yu1q-}wj!{gCA~!C6z?Z?Pk|f?o{Iv>dvFcG+q4-TZpp0=+&*2St>dKBfJG9G_3uD=~beL(Fp#gQNi2Lq2zS%Ju>~ z3$;w-!3x6n#PmbV%M#Oz?l9O99WbhF40jdB8rrH1h~eFcsr|%TkMKpSR7dIBNav`5 z0b7^Z_wFuNI^IvwJR!iJ23=INr-$Zx9F_&P8Xb>z)U^Gp<3#&A1*? zo{y9w>5R6b8jcQiL9xASjVD=|`mi|Qkn(~X6@Z1W8h7Dg_F$$K4p%3%mWndz{edv_ z!^+FC64=ZQ9Y&0*)ff~_3_G$B*K{R+U_}lqFULwH7spCV85^v=IXtWwzLy!%o2&;` z_$-*0riPgYQl>pEZvrJRc^Eg{&I==GyHRr&Qy*4dhLstf@ah0oTquIS+ExU9>NbVj z`m$g!x4|>^q=skxyarQCCyqt6PPMsK_-V0#c!l+$aGw2P{h%DCUYDu10Ave8SfVN` zR#nS_&LyJ#;?(K`Q}r(aIBph+~f z_XchethxwrgsNPsE_t8}4qb16E_Mz3#BKNO%PiKKl*&^~O=(Vgpo(LHfuT0l$-pUTtCwMHV%>;wI>M)Fm>dV6Fhpsn3*BZ0GYTHN8@?~ z`wt25=FAgCT(ED%0j*7gw#xvry9Rh2j%fb@vRlc=Tv?!lz?2;`%`s%#OTbbdkL(fd zKcqnBPz{ALLt8_(9|;ki$P(zNg&MyoDE(-d=Olq5prSc8>I~nVHqqpb-DvCX({6EA z%y2w84aY}3a%cf>>^{5JF&?C$p&A#NqH#xk#=)U<{tP5)EYNgt= zHQVG4bHqAg-4AEEhnJVVD%2MVIQs&mxzHJaE&SMS+5(#gUXC7n*`4rOrN{CJH@HSP zp;);Xub^tz&U@e67aC{Lyf`@sdzWspRv!V;RLi2^FnzzMsH6aI38Ypb_%@Qi?LMg5y$MYARMv6Wm*{eT3dU#P15M_@}hQMijO|CM~z*#5}LGN3Bzsn_(gu$ zjLBkp0ZTk;J}@7Uk8)h;SK6-;hh1lx0@EgWaqdI~v~?=P<6%i1>fRc4xOyk-)_|K$ znV>V4Uf$Rup8>%Gb$obv(Yrq3Qp?;-NX_!XH#F#r=JdU^cze)>MV{-l-FDEmd` z0Yg>RFk-4c;*Xa+RKBgNvnBVkymaVRY0c7`Rm4(S-nHOq@o~5F(A>2P+ zZSyv{T?j})jxis>{}YU7p9&&-AXJJUkxgB>F$Bc2atred#^(miGYfp#VGnEV*}1wE z3L)<`BFzX)h~3&<>*{ozj@199)bHFAp0oShWR;RtN>=ImM$%46EhSM`(nrsjBZRTi zmDtns*Rs3D^%~wa*obkBhlhOCYU6REo^CrdK*b$OmKs+lP@@UUP`L7K)Z+~fopBW9 zY;On)s}xsjRDyf~k2SXLhR)@!j$f29+Z9>c~XVc~yGS@?sJ;ZD1lEai7W~kB1 zsl;-ml8@^iBIi$Wj+ArEoD<{=jrz7`9y|qkJ#|0qF3olBmI>B6N}0g_Zj$%mra$LO zpWinFm04w=6pOGR!!Dh;Z^VCS3~Kl$J8X4`f2?PUKof@v(`?MvN55fEKRggPv!>>7 zXeO(ni!GgMos{d^yFD~W`xIzQ>#Q4Lhc3_x>}C6KN1r=ACH;4UvrhquQ`cJ9nwP=Z zaHxfWm|@(k)%eD~+cJ>$*>C}^8s7ej$f6^rLzb1+rWXm%a&G?GeDCiMeC0zJfH zVCfz|s>ZQQ7BfV+;cfG*kFu*D5SQu>L~U2f=J9p=t}R^g9+tM6&EGJt9}pbMs@D>( z*9h0V^)-o*)wBC#lU!~Fzt1Vp(X918A`ZosHE@I`u@;hQw8;LK z$!9_LRW#)zO?=En+nIyhv6gx6BTAnfe&$Bp^J@7R^Bx~@@};X7Pu|6sK?I|s5~eh3 z^eG{q1sz*+B;0HsJ zio%-3xY(%HN(G9TKCg=b*z9^kvL84fCzzpyin5N7#XP52qR_mL6$V_S+;!WG1^EwV ztM3kQJrd45xBf_f`S#q!p2bVY?PD~*_9tRvMo}P+=4NR9qg(+I{#HG!$8cS9(@89^vhmU99zpvF$ zJv(mArF;6e2v`vEK#-vK?>NVYlxIJU#8Rtn+dZf-A7Io`p>OCoXVD*d$cLHdW=57( z8+lhUtUgt%-l>IQX?>Rw#^tAO@}cM1wV9AvTj7g2@}OPjC@?ozMbp~+*S_-M=-I>n z4t0+S?#1&ae}tG>?%aH@yrniC=`bInp50Xo_pG;wJJEJ9Ry z&e?nmvab{1_0Nl=E1r>q{qG(FE*!IWMHwE;0~aASuFAk!Sa062?}vbABY=DfEbo0* z1zBi4v{qSrmMkoFBY+MI&uh6PpHYl*m)2fdM!6z zfC^?t9pHBlh7VCMPgHAGBDBX|CM?x4)i|`>@&#^v%^#l_AGTiML`=5C+e>S_Ve<54 z9K*meR)jG1=X+#_ve%%@GK1K69{g9$qpc$TzqO(tKLDXVc7OoALP!%-W=^sl#n}UdY@DcWna? z=1;h3Fu`0)9o$1ZQP(ns^ZunS3{P&{L|hK=Pko&a+%asquZ`i4t)>Jd9+6Gu5o5dw z`$7MivWbU?WRn%JE-n#M`UtPs%NBFGZ60S$twX^xQDD3$vy+8$wEE0T_gMQ9*}T_% zsi|*MsIH26S%xbts1b|ufa0V@C!kc{8^=+=)6)xmJzCC8|iDmEq4Fe8`&u)3N?i!vhPH+{J zu={x*hE}|}l^-PD9U|Wzky(6n8G#NpDG(McMpCe4^BgZjf04y^D1CdBwiQI|M${t! zRocznr4OHgy>r4sU7fLBE%*co=?z42O$U#vI}74rPx}y@M5+Ga~h5{tq%A56y3n=3dl5 zbuH437M?M+Cb{=+NjCRCO`|+qzdf#rf!63%sQ`rMJQr?Y@4CgX-X$|X>R9X${yqqo zx+5my;<1ufSCClii=~#pWp?V1N$@`#+o57%#xYoxuLt3gv*p{EDTMYU#YEYwjRQH|yh z{;mjzh@~3q?k#8zrA=Lj>1N106Mu9pby$B_tPdC<@eAs+bY%1_BR%){y=2kp!_7!Y- zt#SdmJSHpoQ2M4Qg&`Eo6(p-1A3LnKh9<*M!p$m=PH{fGzA0XZtM*+xEmx+x6bsl2 z|B12~`K`I=qw}Q?xo?WxM)9_|VR=#MvktDD4OpeccN)vL$=5l!Z!>Fhtl!P7Ib6Rf zu6@S(-ME+X;FV22aMvC2P%~{wGMY?n-PUTg!YfbN*lL2jI`T26!VjgE3USmwb50_uv z06P4?bN*=>O<&N~nu})F72Z>Y00l;GGM>*kx?)oY{KP)*QP|sifJhV&m}N zOQk=O@O~wsfIBa4+20da@w(MFqj=W|y!(|0CD*A1C4$)&8gl%QE{?qTZ7v;6tWU( z#Qsq5e6bepKBa5d4W?z~j#^=F6Sgdgr{~($2i<0k1ev$Bzp{NurvQ{qDu?!~gr>-`naw`&zY_fs-#LSrWuD;dcK;aj7E& zA3+Ezwl2-<9N2d&j=h25DcHqhyRCWk)(bf^-xCiwGBjHL19#`(87?E-{ZVGvluco*fbS2qKb4 zq9$V~bh`@U%{pz1bYv>q=HC}fJ96?7ITV@d&~D5P|}0_7+YE_3aSO>YhY%HI$g9-S?^dQk3XO!bg<^;@Z55 z;#zwMSKrP7FA@m1-r>82<&HRfRB=#iRC_n)5d*A!RUD%VjkT6H^B)(bJ2LTMWnzgp zu^rAO%XZ9q?j4qFl@j8ze^Jox2*yVhj7|}8G@4$dG%PThb_$@o??F|5vl!lylaDGV zE)kB-x@EaI&SgxSQh1zqX~KU{Nbd;CM-`Sn*X|UbXS{hg<+?`JWywaHgO>ei5xyfa zA5~(Y`Vwpo(#Mz)#TM65sg5PR<1Bww!0(97M->~Pviqi4F|QnMx0PxKd^oxE*8aZu z-;te^|6rbYa|i-7K+d)EP%#PgFSY2+&6rpiv>*85lHZ3Qri-bc`6oVx!PZ zPg!*ENYO`?B5AO8jmPp{y`Z4Zy=LX!U7L)rQs}?bkt`_*BtWiR zoBVmfya~&n4_HHoa4PqtswIRD$iN~5*@U>YmTwc;54yi4wgD;dt~P6k>6W(V!WH8; zBtw&L)5+m_B)Z@92`iVL;(N7qSop25iL>4fZt*qyY<)Uz=C&kaDd-cvo78=%c$Phn zUYeD7J#_bK8sV!?3uWVb7ur&Oky?F7d6s0>PGp+N%x$LbZ&)VpR>Kxl0$Gnqa6ZgD zOA{U&RX}Nv)!NXi;TkHaHg|*h5V;?EUQ3(Fim-UB0KOE9s3zE9+hg=T0O#)|`yP&- zug4^T z9%i29lIpIIVGxeey(v{6ETdZJLk#}{ADxPM=y{%$w_RHUp$Lnh?PVexXKAJ3CaC^< z36Y1R=kXq_g)PCpc6fZQ7U9yCro#t~zJA!-?hy6j{&-o?f&dv@`|QTBrS2|MEs%vj zO%6P4JyQ-%C^=ufn?}GSZN$vNKs9Nh73U+I@Sw@G7%k7quh5Ukb&EPT7((Wq2h1MAGp4CeCP)U89xbC-!>@OXPR zh1xmqr6TYQpcig|`Qrqt!^|_st4-rmr%tQdv)N>;Qpwlm5tOa*i!`P~&vW+}D4I99 z70^PLdEY)XAYBs1o`!y#Omx*H_~y>r<)D49(e7dEsV~4v#6WXfn?|UuTc|nO5fZJe zZ&SaY(sL+#-PW(92Hf2YXw~KfGLgbKS>ra=j}vPSZ?9^%>MFpEtPy9k*ePpB-Ha|G z$nuNymP6j_mKcrC8?~-kmG;_LutFJH3pRuHt8@0l;Hxvp1=n<1KC3qtFERAihD=-L zc}?=MsUC;M*X>^8Gjyne%?_*ZDr%k77y9Vxk1dpSxO@X#h82WKy5@$6<2C>;6D-Bt zX-t*xv@otMr~QzjaseA(CE^#Mzs@o_=-(^E9V)Q3MzCqJ4=UBrQJTY&+m7t_`fMHw zo^U6&0cb^yg|NaqEHT;4SQ%n9EY$dEqv6BD6JGa%s%=L!wWJo?*t32Tg|@dcHm_gz z4nAZ&VVuO^MjVS^k5YWq%w%caT(OP&CWXIj2YeWLIyJQ;TJ_$$cz9Y=R!nCo6EEkw zuzWW?@o^cahoz^>#$z1Iy&yQVap&yBwE7+{C5+5}n)V*5UT+Hz%67&D+XQs1Kw3u| zV~4IAtNkZ&@=NXBZ>}VKlka^feZ6B3@bKUehSZ637AMqhy=vWAevy9BTKDk!MtN-< zlQk@%RJZ13^3bK!pxSJJ3XkuWdl-JB3_~rcbVs30b?pjuh5xx0t?m&R)9*FFJv6^j znu&btu$moS+A1m$SQHqGK+I%3KH2ne{r0(Lvh9HwbPK49xXluwW1H069vZ^^cDuks z_!}jB6`O;@ftH3#!vkY-RHs?+{e=IvF^Rn=8cno zv*qid`Hj*{BYum-D~b3-BUR1LGPRozOBT?5}#Q9@gI|>nv??38tNNS7}>mTl`q3 z3D(>A(+ufD{hOygLUP|@RzdC~;&KiY2=`D%t~wtPuO0s1GyllpvTta!_}r*2)>;b` zSD1O@@dUZsM+n}$5V*-2qlXZfYp>cTw%N2`5XCXtA18u8qTu=A_4T|t8(u0o!eWSp zU8IV{P**qH9*g_uS>=b^w@j|v3^H+LZXnmJSJ-6fk}&2OiQ{8Z)DOdNnc;YmNN&BXtC_nAZeJEDH}Y{*%emTVcUYmZJ0%ep1w{SP{I9{%4E z|AIaUkw@LtTP*oGRHc{fbGFgw$29_u5PTRR=({V|R`=uvT4+vR26YM!4fU_TC^&E= z;loIR3}`m7v|>`L!wlo#z09e;YxDV->IFv}K8!dN#64Stc4b4_1)%`MikM@~4h2ut z_43HXJCX^}IhyBjjFmYM2YAWqcO&aVE`0ojsv{U5OE3UThK^Q4J&0N>YFhvbD~#3e zw*Dg2NT8ms73e|#epfw=_BLTz0ui=L1@_EH(yTh-^;RK(%c0=;ZW&XDFqbPVCfA}I zUQ>`@)kFBJ)mxPkhQq@%Td1Bp)RjB>US?(MtP$Vj(jY;eUn!zP#yzH&k6<*Vbc)QD* z)Y*)}aT28syD-pqYFxc;7xu&4y^5OwsC(5K7N@!QY#u&Z*#C{%$`9*f9s1q`ec_w! zph;=@&YqaTUCr97+nurX{?po8hr>6)p#%~&hStXz$iC(_oxbzVSPpFdx-Qot@=XxA zSKSH$RyEwK^9*B%-S_lx>3Q)ZYkD0v-vpa(!^a*STlP>7Wjb(A>oY5mqa%J*5A51^ z`;Cpe!|9#C4NAOH_GbB$yO`eOpWH(EKiGF7YNrr4HZ3TdlXw`I6F9 zU$>a?yY;FhLC(p3_j>&ihj%Fstnqme#u?hwfwL7Kw6{_z-nHm2YM33F_<%AoXo=zE zg{tPXN+^l23a)F?;O>vEe|Dtf14>7uxygH-ifpxn>6l?t`ZOF(S@HL3ryUXbfFd%+ zrV0>#q`B!XTjL#ej5UaYusDBEckRf@2b7b-6MU&vmm=8qFsxa+m`XrN4{fb}yM)gX zmJcW_gxl-%tn>ux7SRf!mb&BbRY}`l)q6V<^8qD>w`WQ8r9s<@|2J<_r88IP%K&gRS?ud~grXv@KY_S99@*%_k8XZkZUoap1yI zme+yYh}ZI-^$qk7>NOtO`6RLvQI5AzIhHr*)KG*oi$e^%wm!e#*!Bp}5uh)ZxP=fx z?X(RsS=L=pN0l0O%j*0|x7;H|M~WV+ zyKj;;((+!S=Zwyrj@v<`DfCyrt|zZLq&3lA6YYDIRQ9`-N^bbo{;4_ab-Incq75}( zIli%u{{?WZf%5@n!vaVn#epqyX{{y|R}SU0jqT9>0xW@C*VrFXK7@-EWpHmM8l*}!hpyHr-$T|vMc}8OK!!ccB$d>PzM>W zZ}!6rz`P{%U%ID;P$h3(l`tf&gQ}spQo+w|^YgkVx14`W&XF_ZeIy?d z!k$sSzpg~8Bg?NOWk<*7eK%Ig}Utg370 z8?liCwCB{mxH0<8*Rg2j@DH4(;bc*H;<}Hj<_4}`z8krL`U6LP*oAncv88Ex`NZ^q zBB#lm--GqABp=}XX-a@e<1KoI~>%;{lqftl>1pQx2;X4%=oDS1UGoU`DPts$M#No z*i&PUlSW5vXDc5k3eTwkaAWkFgMUq>)0qgtiPmbveZ*k{0NM`=>{Uk?0@)^A=`6W1`_$9Z*H(67Y4hEw-kV(gW?Z>icZ}5Jz zeJ|BzmFQHF%W=qd8jU#-^)Z29{(K(vjo|MtT)I~9v|eE#jhn&so(X&-^I}(xOVX~WIJcDEl5Hbr z!8S!jLjGPZ>xSo#z@sU?1rh<_+#p@7fwts04M0Bh^<3B+qZhl?TIef!<%?0b9K~)j z(OW}1oc8)Rl2LD8yWhVi z+uT^b4lH^1C8)U~W0C3PI_bDFJLhgV&a+eUZa`lLpp{oS8(<*J({h)rV-j5_rtL!y zhsMu}E4Wd8MX2V^Ia2GgwoX$mJ&x7IDJPI$@V3W3%O#4Zbi#p`jGod7FA?WgCAI#_IQ;L{hhS#3=jss)Nf~$G@xi%<4&Y~N(tEFP}*#pKWD6%@Gf`Yrb;Iwhw+bDvQm z$qA1=Inr4o*=>A1lk^7dkAb$+N?1qE851>Vwe83En5zwC8SV45)PG9Me->KtS&5Gu z+*bhZmlu3P|AwGnZfc4Aaxref9U9nXgAG-t z=lnpD@s0l*!asbh9j6cBDrOBWS3Kk{AEaX~q#w;#zDe+gNRY<6#u^Txa=5Vy?5cP+ zMW;FSU(|p7X2PpyLWcp))O;wg8w$^8U1{#KbxVIvF7*xg8v=YUp1o}QRQujzb8sqw zF$QlBe#rOz&PI?o>aQO4wCR1M(T5TT1Dg6g-Z0(0J<&D3FU$Le{tZEoCROzHs`{$= zgthS~OFQO%#zRZkAMOErnWcHg0Z-@!i1Y~VnRb8`;{180iZFb?5p#Or*_?r%Ihz^a? z{T~x4$*|V+6TC5Jy&_E1>Fa6s&*;H%Bm4>wo?N{Ukh?XmF1)e2Rqa+_jMKP%BWM4H z`E9_w&OS(|59c)SR%@7Ip3`Lxqt*2}1pscW-v-t|-407Sbi)m_%YuikkXBpr?AK8mL|ASe;cUN9({02A;WH#K6?{IAUYv4 zc0ZrjIr#S$YBveqBni|iwi)+UU(Q=~Org1IS0CiIzgRTkX2LsU!lA{v>O)1-Y-d5+ zg5FRC)*|DtS75m5@DAzV?0cKLj%H{+goRYyO!r}S{i*)aHz(dCCk}K7op35Bqw|cu zCmwWX!j)kCe7ESE7;lpp&QRI92Uq@1H*P+wOXp=>20y>h#LbR($d1(sV`FcgdZYQ_ zH7b8@t=&?Y@cxyZoNtP}Ns4S{qGhmY=_b+0v%b;Z7M_}?>u zvD5wA;6jw9zYUi_$;ld3_nOCJUTQZOFA-WHd|IptN-bKSeuk2CVo{aqBJ==8zY%${ z8m?oXDWgm5v~a5UQtu*12CO!Qw@=j64a*C{GA&m|)2v}Dc=&>yQQH$6qNZ6f6Iv03@`AsjT9=!!2?A4_bm zZy!zI{I-6PQ^fTA>Z=RG>laWz8#ji(-E5=WlTIu_N2>%|K9QSJ-Px*rwQ|`FU8l?$H=H17h!}s~us%JNvuMEvJL^ce?)Tn5vY_;Q&?zX(LWcs%&rrnUf zGDv~p?5N9;F*zNxAx%fDs=y{l^SRa5Zd_j(uD%pPKy3BE!9yDZ;kK4PbK&(#rMBz5 z?>i0*Z>(P#)>KnWac&W%ZN9{&q=G(2D*okvs=VERzjeSveD^VWNux?+jwbtbQVtJ& z2wwei{jgo)uE~Be#o#8!8z;sR@(pyHsk(8(TFS^QyAJaJzExfBX2-i`hgn@ejlS9* zF!IaRc~1pPl4x!n&#p{&^WD{z>*R;V@ zFwvAxWpzyIFnr|yl+|fC&`(w3ySekOxwE!5g{~^0lQj3HV{#Do5=7+q`6_-lf!;NN z#@^{G4eY4UnpIVh${jsB&Z;PlUsM6`X3@K5QIpO|0dyhD*_{SxkR!*b;o$at)dO#` zyl=ADnW7y+;!KKW>5mKeNeXTCDL+to@Mg@rW(>9w$5%4MK{#S{9Vyepw5iMak}H1G z=BADN7S*F-qizymjuQj4n=CaP{iiA(-rRZD-05htFA^b`L#3lafDUS0EiuPiu$|37$_XJYG!LSAy<^@I{9b)K_zJZ+5(Kc3_M) z8>gP&Z8Di)@8#MoSo$#fygKAfkq<`^(8CKGn)O(W2XUHMN+w?@PWxhI$(tu1jwh;!7W9pZmN#QQ z9Aj`;H;1NY?8TjAf&md9&aLU3_`YhGH-SDJfi^UrY27Yu%QzKH8Z*c+&>OU-`~#IV zZx($x77<38z`MaFTB&wG;+!*9KKqP$`j1xOys7lzs5CpzGXOn z!k?<(dGqPR@u?41pP^)MR)Y|O<|^|HpF$o#U;XnY)rTXMrDQ^qKL)CGm)@DKntwi_ zx{Cdx%Aq&2J{+^!fP*v)LHjv8>M+1$E}+~LyV|d;I(pOV!_iA67_Fh4flCMWJx#tiOHedlhVuM=}lcySH}jN1Yay+aAWkc7>%y$EZbcVNb~3dF$T>!8?*B_ z3JKh3y)0S)xz8vq&)pq|aKp1z1|YRuRpUA7{5NDToNhKuhI6hh(3y~>r69BAg4=L{ z*0Yo9Z`@w?i1O@}E2<4tnxIlQwn?;F+N3|43VXx&vc{(v9-OV8(JP~;X_bnC zbmK9E7=9`t^~UmrkI`gA8lIM)uyP$Tq!ZD_CB@MnkI{ZEE%XNTWlhtbe+4`bO%u{S z`E2f-*rv)A+n*$7e%3e@u5T|a{|;feG5ReE)XaQMnX)uJ_rV==ejzz=Ud`n56v-Q? zKjkkhp%J#yNSPKZz4H#fy;X=UBJD3GD&A=Qv4fO87p4Eb`|M0+f^*vNTx8-ENdMJz z!5gwal?j|kq(d+&@-wK4>0)2ixjqC>WRRU__Y0*F$4_)w9NG z`ESCq zhD?goPI!eJ{_U(H^quKNH^{FN>d@QfnF~ZDZK@SaayVI{Oa1 zWb~A%bxAzGD&bv7e>>UghUJ^qZO%|h*z?~&&$*h63V&+2pQ_4zsq6BM&F{yCTPNaC zp)fu2Q-*Ymu~v^GGXnm#gZ&NAOBg0nbzk9(rQ6O(SX^dBU@HP2|8`UQ8>JWU40ggn zy)IxCQo_xa@}4UW0{EQI>@$Bu^#YdQm=c<%f^l4t57pkWRbO$RvHW~76Zm;q-#2_O zuwf0FDvcAeG#!)~Lsm}dOdyL`Ur#H(F?=l;wh<%$lc5@+TXNx%@eu*&SFMMyHhBLm z4CS*b4L8=W59@<`f~z6n+H$&L?ARlbKQxXG`9{z78}PRV_`=f-h8^K;`BbY;$%wht z&QZ0+pWTN2hW@QVA5`|QZyHn4k5;9X<$eUt%%wiRue17%|69W!jw*N4%IV&m*f&ev zPm9hGTL+$<*L{=V4U+(vf&2jC919`TPx@SYcHuevJCnq3CcIrH$c~0-_t92sBH=@1 zOa{j4gY}J+k(&m*n)ofS#R zWT?+s{ODWa7d0NgiSgEm;k_E(?M|#~Z*?7R)|!l#w&X^7PGbFy|J%j?pf<0x?lzR6 zMORt<(CKMB*c|!;?ZIynyg3rAoZa5E19UUwx7~me{w?Y-wz1SYkLQHjoqPLz?7M#5G)=Us~eE z|4rf_Sc{y;jz}H930K7#&Y)EnQVic$r{X5TnLK;KU$z*hvg>a###%Yf)>dDBSF{A7}x66XQJ)W5#K_gK)P*IXaELbN^WV z%mw!M<>Sqc56O-polj@gz9{Js9Fyj8B96xM?*Qi?YfX7mnY0s`Ya+Br#lZ7H(SoKciT}fQL zv5$r_Kr5r}S9VCg8S@?(6ONd22KTkA=q=OLGou037k(Xj;=XRLeqHnF8Nh}tEWOma zOo^F>w5d9_u}pS;y>c(y`xBjZqx8p6>WznX*(nD06??8Dl$()Er(90@_cFSn`qNOc zMtB!F-VGM>8VvhXG?k`g&Ujo<=f>-G;MIn3CvH+!y2q&o2S+d^u$k$LMeY)+>)S_L zJHM@8

pZ$&D^ZuU|m@Y}}B(aH3?zpQL1G*Qx})MKM(-Y}&iqLlL$wm5aJ@ecia) z!39)_ZPGw2z1y@~mZR^^0}TJQxZVx!>jrm*%T|W5S_`6d;i7s1?dIWYs(!mL-;MAq zN7%sNY)6D18`7Lz219z!pY22P%%Xlb%&!~fj&<`t* ze7z9iF6q}~znJK8^W=T;MA>KxGdeit=SKC-O_Fpb7%9zf6fwNX@{!2mAt0>_c8odC zqK&FFl0Z4=9rM`*5O3OiB-%6|wF@N#F2h~NCdI|=$iXv1zOQ)V&7F_Lo%BZQ0J!Ot zbY_sH*EtjA`w(R9{sV;oJ|bc<3*sg;=0P9}<%-k7+q{HGq&go9mI&cKgxd zm^X_)5{sr+)XGp8;D9MZIaF!zOQ)(i{8VAhn@S&vN(+tq@*L8f%wX)(`9u^|%8&c` zqMSFMJ`$gNN+6l(VQ`dV;jo0JluUBSzo?++O{$MXs{FhTUJ7Z3*|I@x=J(Npd=buH zSq$`M)<eWh4mfM4t=L47s5`XV^Mwb8qZ_X|eyULH zO|OqmugEQs1Z57ju008oTcJUI9`9}A{Cttwn`0lHW75@+0mjBPY;I^h<==d=Icvx- zDo}e9?V}T|HFP!Jz;<$q4O^w*L)v1edh|WFN#D)3n{Ceu+znezPE<#zZhZ&i+06#3 z?|JHAq6QB+cswcBUhsbQfmN*g|5CnBDdM{?aS;kSn(k<&D~wjnWr*7n{0mBKP;`PS zC;?Sa;+h;(>14Rrb*{JcdTEc}_EV@NaL*k`+ZLvKOhK*(S3(`WLmj?D)ozE{-l`x)zSLjzYyR~Y6}$qy{-W1k z^!kfFe!DK%CIrpFIBm)4D7m@Q!E|Ggww%YQ&-XfikKjp-Tbc~>tQo>;>%g25bIE#~ z|9aO#pe52%4C^>{sova!PfyDv1=EAuqY&u*OQI$4-o{?}uWwBu*mQMAO4n-e{!|hl zKpcVHSH78bF2xQz?MH@XvoofR_oN;6N0Lb{kkk~K)1P8#QgSt{9ZG5L5_i2qU?-I6 z4CRwR+0QVqZ|f_pAyieuwrk{7l@Q8BfqDI+=1{H&RM(Bmae{I#Af1c%CrX|=>TLsO zHBULzyElR^XD9j?wfGrg zkMdl%P`_urN9w%BmXcizd#4vb=g^2Ys@sn~3YBijey?O_wTF;&e_N83Kped@a~dIa zfvoT-* zsGydMI*wL4LksIqBEws5|Lx4J))tL+a+@~f*+{viM}xFo$k&tH<}JK09WJKNhhwXW z@`2r}m9Ai4hC17ZC*j=^{F(%@t!ctYi+HDBlUwp`jBq49=4gM@k8Uyk>jo^_PLeP` zgE4(?;Q{F;cAM!Y9^xl4?pv1Ml;trvsT9qthdMQnt-dtUK-B1>{v^wD3-p=ROiR}g zJ*WZ21Rf!a&>Sb`azBqAcU`ptU0?mTO-SvQVoEWeJ*TvQy71j1(9GApP{# zuD?J36^=BbHR45!*FIg1{H(#13)d8#9`E=n4grY%k5bOP!Z<$dcDE%)s+qt+0KAY~ zPa0^jcbjpZKH(c5gKNx_gPfNChtTlJYnY7c;w|lwMHPYp6@md9{;wB?l=7q$XG%Tg za=Ew_hyoRo@|8y=a?+ES-ExRADLj|^&V34Xr}K?}6({LpW5sD)>F7{#8V@t6I1Q*c z4Y=O2=l{_h-#Z2+4eGY_aGxWTD-SWf0~$U&5Fd5<$q&9B_1gwgcZIX9%6}A}V%Vl~ zU8)VK9$SA81Ycw{s+jr#(%k9|mhEQgaW0c)xDV8s@+c0a>;6Ff3fsvq`h(Fsc_)WX zJ9Djr-pNV!T0ZlOrVrQs>B-mQ&p+WW{fdR5{K!;3?F*mVbLGcjXRPb`d;+HzC*kZE zk|KL#_@N*9@S&>-C!Ke)pbHIL9r8o>aj?{(PanR2_z4F%_2$S~5My1GI-uu-^eCkT zb{#B1^$t(HT3C-#aidh+DD5^%yNyz8qg{_a-~0SF+4}-bMHHA845V2tR}#}Wst=jj zqap@IMGTB2%laL|NN(iLBwZ81F~(eEn3Q+zYo(^TR{b2M?nkNnQR;qFaKotJhEc%{ zqknIcSo@>DTRBx=6gB)gccHOX5H_@l%cnx*^(V-fqSH4;*Q9ey-#Vv7LZ8Ku7 zmGdyvaqXn9VZ4je&}*Z!(oAEe))ZT6eV7raY?;xo(eFPsaH8BmX4m9#av2wnbfU*r*yX>ZGJY8N{J(uY z4)E2@Af13T2tXIhN`)Wk^;_C;X_xBG-Q;NoHNLVh(*%0GbFno}KX~Z4QLG%DdY>qB zG0p7{F;b%f0LHZlDga=N>u2@&GOR}#)}svTQHJ&FpR)eETdd_W@)hDa@;oWuh zhiH&d{>CVOW0Zk19)4DjFMnf{zcI?+7!@BpDpunC2xxkEZY{y}rr@etc)AxK)@J4L zD4_g{b&b9Ptv{%!M(%DWZ6sdSB`x1HX%$yny`|ei@VI{J3Tf2sQMxd<(Eig@pfeFe z`fzHP>@tH1Ox+dxdXCU4WPX&VJ?8aojd0@c6klBdj(L4me=uKxAeW?-0+N!anm;!KdHz+XR0r^*XIeeWO!as}@l(h8pLi z8t^&2@9-xu=Diethx8FB{pcgZLI&Di$0~Ll=bk4Jo}_<6@cST0vgb;aw#p`)z9zVa zMUynI^Id;UEJvR2rS8U@`gO zjCede?H4{bu=U+kw@f>g%~@INb^k25bN}d1&+WhC;k`#4DmtxA9ss9}Va|vtc@gKo zkFB9!t8r5uU?+3x!lBOZM%_bEnS9gT=5V1e@el-K0a#G*+&L>BDPWnG> zY^D)AN0_e9gX2>dQKK%RMh&=~^P*$az&Ldo)V8mMhLF18#Ojixfc43}0$exOl~X+{ zr+QXSb-vUk*tK2Mt=gZPM;GqQx@(l&z3W+fP~ARDE;xqIZXRCuWc+Y$fQPN8vhs1L z@&Y^H+Bnyl4{@shJn{|9h*X=;t%Q)H(*hLvC3RTKp;OZn{z!#QCkmE6^2x1GB|RqwFAC70&e z_$UncI1&MEE#K8G{iXbP_I$exA??aKE2#RC$oOz#In?8{%AP^FBB&(SkU>aggYu(T zKBR2i_vA4NyLF+6B2Ns0CHZ~OlSY{zRzT>dr;L2^>8Wzl0F8?ElJqX&7_~+-Byvltgnpn$DbX#e{}7(D=j<(Q$km&Uv13R}OYA^J{(chXg>@8$ zbrgnm6oz#a_5mamDB`a5x;&MT_q2NYBEg+Xi62rjU{;witP{fzDkhuOB=`5$E6urU zh+w*odvDDr+Qa#L?|s~|`j4gR)}x@?e1Hp{F6QYfSlURvJq8hDz55o}6;C1!_O!Kx zB)!4y*eu62E5mHVKLW#BYM;_9^4BtY7Z)2V(hbEmwry{HgUG`+SP^+xw;u?X3~Tmv zOY+ude>C}l4(WZ2+~v})q~qz6!%8nTP0CMqwz>ww3-Wg;h!9(Vd#>EyU6x_hnh)Ye z70Y(~^BC#(Ee+tDbRAfXG@D_0oCQ_II)7H#K>JHao$p*El)3=4AHX?seK1OE+d-(i zrA2ICJu7|Za_P*~-y5Rt?yho1Ja+$MKqaFD@BaC3hCnF zSsex*(o`O{(Nb`$~3wXCdRrBa_9AOecS~_ z>BmZCLR`;$Sg4#TFej3GcSB`WpSGm>bj9P1F3ds#3;bX3#995|yQJ}8d&Ou|26Jo( zUuk>MqrSg73;fE*rd7An59%XEca=@B!}^(?Ea|g9o*GmnGFBuqPW*MxHgMO}&BONS z-O>kHs)15f4sr;OcViU_{hJ0bQspUC1t>fVfwi+wCef21C%Yd8u&$R{k`<$hm6C%M zsEYH#VgHViX}g*ObY1Oq-OVhyE`B0_Y{hyU+5AJpO9N!>kyhInut*Q5C&|?Iv7j92 zb^Sda4(R^a7*m26t;zybIg3b@)6`ODMhj2B_t9m!P7N!387q_zD{8rPTMn-tTUkR` zq09Be7oP$2eiVYp5tW2?RIOX+)MxER^Kl0Al}{tpb?+k=l`6BK=bVJ+WRR*ed(PuD z)?1hhrl~|DClqO!izMH3pN`>{MtH8xi}+YtdSY#+SX(XDR*SXO;=X=SL#eRft6Bxt zE{nBcU%ho+>%^nWlCIFwz-TRZT~?!X=hCnd8mf;IZ|`&V9b?;a2R@vC(JFicrt}C^ z?DVLP(*k_IBA7m_4GX0SyqscadR8;FQ>A63&G6{DU#9Q7mP7UJiRx?*os;3;*`;$ZZFAT?r3Kb`3{zx`Hc3Tc0eIStnB5p~iw(lbl%@l?T} z_=nrGjx1&!ST~M+W!81k&plVB98NGNSjalG1=D9WO(_Mp`4Bum z;d&WYa?-<-D?DOWc*Lymh+jIS8FS94>RiZ^(;RMS>De__&5L|_C>GDIlhV~vrAli~ot1;ABlKB^*%RSEYo`^osC(xmBvZ`PB#~RHbM)z_ T-ddtY{LlXb<2ZYN;P4s%qp6HD From e2058fe010275fb832ff9069be0975a9c4cddf49 Mon Sep 17 00:00:00 2001 From: Xavier Denis Date: Thu, 14 Jul 2022 23:31:33 -0700 Subject: [PATCH 4/4] Get the proof compiling again --- CreuSAT/src/formula.rs | 2 +- CreuSAT/src/logic/logic.rs | 19 +++++++++++++------ CreuSAT/src/logic/logic_formula.rs | 24 ++++++++++++------------ CreuSAT/src/solver.rs | 3 ++- CreuSAT/src/unit_prop.rs | 12 +++++++++--- 5 files changed, 37 insertions(+), 23 deletions(-) diff --git a/CreuSAT/src/formula.rs b/CreuSAT/src/formula.rs index e6365512..7d7a372c 100644 --- a/CreuSAT/src/formula.rs +++ b/CreuSAT/src/formula.rs @@ -191,7 +191,7 @@ impl Formula { #[cfg_attr(feature = "trust_formula", trusted)] #[requires(self.invariant())] #[requires(a.invariant(*self))] - #[ensures(result == self.sat(*a))] + #[ensures(result == a.real_model().satisfies(self.real_model()))] pub fn is_sat(&self, a: &Assignments) -> bool { let mut i: usize = 0; #[invariant(prev, forall 0 <= k && k < @i ==> (@self.clauses)[k].sat(*a))] diff --git a/CreuSAT/src/logic/logic.rs b/CreuSAT/src/logic/logic.rs index e454260c..896df042 100644 --- a/CreuSAT/src/logic/logic.rs +++ b/CreuSAT/src/logic/logic.rs @@ -10,7 +10,8 @@ mod inner { use creusot_contracts::{*, Model}; use crate::lit::Lit; use crate::formula::Formula; - struct M(Mapping); + use crate::assignments::Assignments; + pub struct M(Mapping); impl M { #[predicate] @@ -21,32 +22,38 @@ mod inner { } #[predicate] - fn satisfies(self, fml: Seq>) -> bool { + pub fn satisfies(self, fml: Seq>) -> bool { pearlite! { forall 0 <= c && c < fml.len() ==> self.satisfies_clause(fml[c]) } } - } impl Formula { #[predicate] - fn unsat2(self) -> bool { + pub fn unsat(self) -> bool { pearlite! { forall m.satisfies(self.real_model()) ==> false } } #[predicate] - fn sat2(self) -> bool { + pub fn sat(self) -> bool { pearlite! { exists m.satisfies(self.real_model()) } } #[predicate] - fn equisat2(self, f: Self) -> bool { + pub fn equisat(self, f: Self) -> bool { pearlite! { forall m.satisfies(self.real_model()) ==> m.satisfies(f.real_model()) && m.satisfies(f.real_model()) ==> m.satisfies(self.real_model()) } } } + + impl Assignments { + #[logic] + pub fn real_model(self) -> M { + M(Mapping::cst(false)) + } + } } #[cfg(feature = "contracts")] diff --git a/CreuSAT/src/logic/logic_formula.rs b/CreuSAT/src/logic/logic_formula.rs index ae0c1c18..3c54ab41 100644 --- a/CreuSAT/src/logic/logic_formula.rs +++ b/CreuSAT/src/logic/logic_formula.rs @@ -82,10 +82,10 @@ impl Formula { exists> a2.len() == @self.num_vars && complete_inner(a2) && self.sat_inner(a2) } } - #[predicate] - pub fn equisat(self, o: Formula) -> bool { - self.eventually_sat_complete_no_ass() == o.eventually_sat_complete_no_ass() - } + // #[predicate] + // pub fn equisat(self, o: Formula) -> bool { + // self.eventually_sat_complete_no_ass() == o.eventually_sat_complete_no_ass() + // } #[predicate] pub fn compatible(self, o: Formula) -> bool { @@ -153,10 +153,10 @@ impl Formula { } } - #[predicate] - pub fn sat(self, a: Assignments) -> bool { - pearlite! { formula_sat_inner(@self, @a) } - } + // #[predicate] + // pub fn sat(self, a: Assignments) -> bool { + // pearlite! { formula_sat_inner(@self, @a) } + // } #[predicate] fn unsat_inner(self, a: Seq) -> bool { @@ -166,10 +166,10 @@ impl Formula { } } - #[predicate] - pub fn unsat(self, a: Assignments) -> bool { - pearlite! { self.unsat_inner(@a) } - } + // #[predicate] + // pub fn unsat(self, a: Assignments) -> bool { + // pearlite! { self.unsat_inner(@a) } + // } #[predicate] pub fn not_satisfiable(self) -> bool { diff --git a/CreuSAT/src/solver.rs b/CreuSAT/src/solver.rs index 73a52afd..f789d3eb 100644 --- a/CreuSAT/src/solver.rs +++ b/CreuSAT/src/solver.rs @@ -268,7 +268,8 @@ impl Solver { #[ensures(@f.num_vars == @(^f).num_vars)] #[ensures(f.equisat(^f))] #[ensures(match result { - SatResult::Sat(_) => { (^f).sat((^trail).assignments) + SatResult::Sat(_) => { + (^trail).assignments.real_model().satisfies((^f).real_model()) && ((^trail).assignments).complete() }, // Do I really need this for anything? SatResult::Unsat => { (^f).not_satisfiable() }, SatResult::Unknown => { true } diff --git a/CreuSAT/src/unit_prop.rs b/CreuSAT/src/unit_prop.rs index 5ad09bdf..90f02cf7 100644 --- a/CreuSAT/src/unit_prop.rs +++ b/CreuSAT/src/unit_prop.rs @@ -159,7 +159,9 @@ fn exists_new_watchable_lit( #[ensures(match result { Ok(true) => true, Ok(false) => (@(^trail).trail).len() == (@trail.trail).len(), - Err(n) => @n < (@(^f).clauses).len() && (^f).unsat((^trail).assignments) && (@(^f).clauses)[@n].unsat((^trail).assignments), + Err(n) => @n < (@(^f).clauses).len() && + // (^f).unsat((^trail).assignments) && + (@(^f).clauses)[@n].unsat((^trail).assignments), })] #[ensures(@f.num_vars == @(^f).num_vars)] #[ensures(f.equisat(^f))] @@ -234,7 +236,9 @@ fn propagate_lit_with_regard_to_clause( #[requires(lit.index_logic() < @f.num_vars)] #[ensures(match result { Ok(()) => true,// !(^f).unsat(^a), - Err(n) => @n < (@(^f).clauses).len() && (^f).unsat((^trail).assignments) && (@(^f).clauses)[@n].unsat((^trail).assignments), + Err(n) => @n < (@(^f).clauses).len() && + // (^f).unsat((^trail).assignments) && + (@(^f).clauses)[@n].unsat((^trail).assignments), })] #[ensures(@f.num_vars == @(^f).num_vars)] #[ensures(f.equisat(^f))] @@ -283,7 +287,9 @@ fn propagate_literal(f: &mut Formula, trail: &mut Trail, watches: &mut Watches, #[requires(@f.num_vars < @usize::MAX/2)] #[ensures(match result { Ok(()) => true, // !(^f).unsat(^a), - Err(n) => @n < (@(^f).clauses).len() && (^f).unsat((^trail).assignments) && (@(^f).clauses)[@n].unsat((^trail).assignments), + Err(n) => @n < (@(^f).clauses).len() && + // (^f).unsat((^trail).assignments) && + (@(^f).clauses)[@n].unsat((^trail).assignments), })] #[ensures(@f.num_vars == @(^f).num_vars)] #[ensures(f.equisat(^f))]