tiny.smt.Literal
Defined in sat.types.
A variable or its negation, packed into one 32-bit number.
API (10)
Actions
Public operations.
fromDimacs: Returns the literal a DIMACS number stands for: variable|value| - 1, negated whenvalueis negative.index: Returns the packed number as ausize.init: Returns the literal of variablevariable_index, unnegated whenpolarityis true and negated when it is false.isPositive: Returns true for an unnegated literal.negated: Returns the literal of the same variable with the opposite sign.negative: Returns the negated literal of variablevariable_index.positive: Returns the unnegated literal of variablevariable_index.toDimacs: Returns the DIMACS number of the literal: the variable index plus one, negative for a negated literal.variable: Returns the variable index of the literal.
Fields and members
Public fields and members.
Source
Source: lib/smt/src/sat/types.zig:117
zig
/// A variable or its negation, packed into one 32-bit number. A caller builds every clause and/// every assumption from literals. Variables are numbered from 0 in the order `Solver.addVariable`/// returns them.pub const Literal = struct { /// The packed number: twice the variable index, plus one for a negated literal. Two literals /// are equal when their `raw` values are equal, and callers compare literals that way. raw: u32, /// Returns the literal of variable `variable_index`, unnegated when `polarity` is true and /// negated when it is false. Code that picks the sign at run time calls it. An index of /// 2147483648 or more overflows the packed number, which panics in safe builds. pub fn init(variable_index: u32, polarity: bool) Literal { return .{ .raw = variable_index * 2 + if (polarity) @as(u32, 0) else @as(u32, 1) }; } /// Returns the unnegated literal of variable `variable_index`. A caller writes a clause whose /// signs it knows in its source. pub fn positive(variable_index: u32) Literal { return init(variable_index, true); } /// Returns the negated literal of variable `variable_index`. A caller writes a clause whose /// signs it knows in its source. pub fn negative(variable_index: u32) Literal { return init(variable_index, false); } /// Returns the variable index of the literal. A caller finds which variable a literal names, /// for example to check it against a variable count. pub fn variable(self: Literal) u32 { return self.raw >> 1; } /// Returns true for an unnegated literal. A caller reads a literal's sign to evaluate it under /// an assignment. pub fn isPositive(self: Literal) bool { return self.raw & 1 == 0; } /// Returns the literal of the same variable with the opposite sign. An encoder calls it to /// state the negation of a condition. pub fn negated(self: Literal) Literal { return .{ .raw = self.raw ^ 1 }; } /// Returns the packed number as a `usize`. The solver indexes its per-literal lists of watching /// clauses by it, two entries per variable. pub fn index(self: Literal) usize { return @intCast(self.raw); } /// Returns the literal a DIMACS number stands for: variable `|value| - 1`, negated when `value` /// is negative. The DIMACS and proof readers call it on each number of a clause. The call /// returns `error.InvalidDimacsLiteral` for 0, the number that ends a clause in that format. /// The value -2147483648 makes it panic, because its negation does not fit in 32 bits. pub fn fromDimacs(value: i32) !Literal { if (value == 0) return error.InvalidDimacsLiteral; const magnitude: u32 = @intCast(if (value < 0) -value else value); return init(magnitude - 1, value > 0); } /// Returns the DIMACS number of the literal: the variable index plus one, negative for a /// negated literal. The DIMACS and proof writers call it on each literal they print. Variable /// index 2147483647 makes it panic, because its number does not fit in `i32`. pub fn toDimacs(self: Literal) i32 { const one_based: i32 = @intCast(self.variable() + 1); return if (self.isPositive()) one_based else -one_based; }};Source: lib/smt/src/root.zig:105
zig
pub const Literal = sat.Literal;Also reachable as
sat.Literal, sat.solver.Literal.
Complete caller list for Literal.init
9 direct callers.
lib.smt.src.profiling.sat.buildRandomFormula[function] — private source atlib/smt/src/profiling/sat.zig:48in nearest public ownerlib.smt.src.profiling.satlib.smt.src.profiling.sat.incrementalAssumptions[function] — private source atlib/smt/src/profiling/sat.zig:151in nearest public ownerlib.smt.src.profiling.satlib.smt.src.properties.model.drawAssumptions[function] — private source atlib/smt/src/properties/model.zig:101in nearest public ownerlib.smt.src.properties.modellib.smt.src.properties.model.drawClause[function] — private source atlib/smt/src/properties/model.zig:87in nearest public ownerlib.smt.src.properties.modellib.smt.src.properties.model.retainedPremiseFixture[function] — private source atlib/smt/src/properties/model.zig:53in nearest public ownerlib.smt.src.properties.modellib.smt.src.properties.sat.ArtifactSoundnessProperty.property[function] — private source atlib/smt/src/properties/sat.zig:208in nearest public ownerlib.smt.src.properties.sattiny.smt.Literal.fromDimacs[function] atlib/smt/src/sat/types.zig:169tiny.smt.Literal.negative[function] atlib/smt/src/sat/types.zig:137tiny.smt.Literal.positive[function] atlib/smt/src/sat/types.zig:131
Complete caller list for Literal.negative
40 direct callers.
lib.smt.src.profiling.sat.buildPigeonholeFormula[function] — private source atlib/smt/src/profiling/sat.zig:77in nearest public ownerlib.smt.src.profiling.satlib.smt.src.properties.model.redundantFormula[function] — private source atlib/smt/src/properties/model.zig:140in nearest public ownerlib.smt.src.properties.modellib.smt.src.properties.model.test_semantic_proof_oracle_rejects_a_circular_self-visible_trace[function] — test source atlib/smt/src/properties/model.zig:369in nearest public ownerlib.smt.src.properties.modellib.smt.src.properties.sat.BoundedStoreExerciseProperty.property[function] — private source atlib/smt/src/properties/sat.zig:159in nearest public ownerlib.smt.src.properties.satlib.smt.src.sat.proof.test_proof_artifact_assumptions_are_part_of_its_exact_scope[function] — test source atlib/smt/src/sat/proof.zig:425in nearest public ownerlib.smt.src.sat.prooflib.smt.src.sat.proof.test_proof_artifact_rejects_a_first_step_visible_only_to_itself[function] — test source atlib/smt/src/sat/proof.zig:408in nearest public ownerlib.smt.src.sat.prooflib.smt.src.sat.proof.test_proof_propagation_reaches_a_fixed_point_within_the_exact_step_prefix[function] — test source atlib/smt/src/sat/proof.zig:364in nearest public ownerlib.smt.src.sat.prooflib.smt.src.sat.proof.test_proof_reason_replay_checks_inference_and_rejects_an_incomplete_trail[function] — test source atlib/smt/src/sat/proof.zig:305in nearest public ownerlib.smt.src.sat.prooflib.smt.src.sat.scratch.test_conflict_scratch_rejects_before_mutation_and_exactly_returns_its_affine_loan[function] — test source atlib/smt/src/sat/scratch.zig:587in nearest public ownertiny.smt.sat.scratchlib.smt.src.sat.solver.Solver.decisionLiteral[method] — private source atlib/smt/src/sat/solver.zig:1374in nearest public ownertiny.smt.sat.solverlib.smt.src.sat.solver.test_bounded_solve_preserves_status_and_proof_under_eviction[function] — test source atlib/smt/src/sat/solver.zig:1565in nearest public ownertiny.smt.sat.solverlib.smt.src.sat.solver.test_budgeted_solve_keeps_proof_steps_in_the_trace_slab[function] — test source atlib/smt/src/sat/solver.zig:1707in nearest public ownertiny.smt.sat.solverlib.smt.src.sat.solver.test_entry_eviction_enforces_a_newly_set_cap[function] — test source atlib/smt/src/sat/solver.zig:1785in nearest public ownertiny.smt.sat.solverlib.smt.src.sat.solver.test_eviction_removes_worst_lbd_first_then_longest_and_never_glue[function] — test source atlib/smt/src/sat/solver.zig:1480in nearest public ownertiny.smt.sat.solverlib.smt.src.sat.solver.test_learned_clause_records_multi-level_block_distance[function] — test source atlib/smt/src/sat/solver.zig:1893in nearest public ownertiny.smt.sat.solverlib.smt.src.sat.solver.test_learned_clause_records_single-level_block_distance[function] — test source atlib/smt/src/sat/solver.zig:1871in nearest public ownertiny.smt.sat.solverlib.smt.src.sat.solver.test_learned_store_pool_survives_variable_growth_and_cap_removal[function] — test source atlib/smt/src/sat/solver.zig:1651in nearest public ownertiny.smt.sat.solverlib.smt.src.sat.solver.test_proof_trace_survives_budget_growth_and_removal[function] — test source atlib/smt/src/sat/solver.zig:1742in nearest public ownertiny.smt.sat.solverlib.smt.src.sat.solver.test_removing_a_learned_clause_preserves_base_prefix_and_behavior[function] — test source atlib/smt/src/sat/solver.zig:1802in nearest public ownertiny.smt.sat.solverlib.smt.src.sat.solver.test_removing_a_middle_learned_clause_patches_the_moved_clause[function] — test source atlib/smt/src/sat/solver.zig:1826in nearest public ownertiny.smt.sat.solverlib.smt.src.sat.store.test_learned_store_fills_to_capacity_with_stable_slots_and_zero_steady_operations[function] — test source atlib/smt/src/sat/store.zig:406in nearest public ownertiny.smt.sat.storelib.smt.src.sat.test.checkSolveAllocationFailureEvidence[function] — private source atlib/smt/src/sat/test.zig:356in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_base_inconsistency_keeps_artifact_scope_broader_than_its_empty_core[function] — test source atlib/smt/src/sat/test.zig:91in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_conflict_budget_returns_unknown_instead_of_spinning[function] — test source atlib/smt/src/sat/test.zig:478in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_conflict_scratch_growth_rejects_before_solve_evidence_mutation_and_retries[function] — test source atlib/smt/src/sat/test.zig:161in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_proof_artifact_records_assumptions[function] — test source atlib/smt/src/sat/test.zig:241in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_solver_accepts_simple_satisfiable_clauses[function] — test source atlib/smt/src/sat/test.zig:30in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_solver_clears_proof_trace_after_satisfiable_solve[function] — test source atlib/smt/src/sat/test.zig:257in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_solver_conflict_scratch_preserves_binary_implication_learning[function] — test source atlib/smt/src/sat/test.zig:114in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_solver_detects_unsatisfiable_unit_conflict[function] — test source atlib/smt/src/sat/test.zig:74in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_solver_exports_independent_proof_artifact[function] — test source atlib/smt/src/sat/test.zig:216in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_solver_keeps_assumptions_through_learned_conflicts[function] — test source atlib/smt/src/sat/test.zig:426in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_solver_keeps_core_proof_scope_and_step_statistics_aligned[function] — test source atlib/smt/src/sat/test.zig:327in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_solver_prunes_irrelevant_assumptions_from_unsat_core[function] — test source atlib/smt/src/sat/test.zig:311in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_solver_reports_unknown_when_core_certification_exhausts_budget[function] — test source atlib/smt/src/sat/test.zig:405in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_solver_restarts_after_learned_conflicts[function] — test source atlib/smt/src/sat/test.zig:273in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_solver_saves_phases_across_solves[function] — test source atlib/smt/src/sat/test.zig:55in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_solver_supports_assumptions[function] — test source atlib/smt/src/sat/test.zig:289in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_solver_supports_nested_assumption_frames[function] — test source atlib/smt/src/sat/test.zig:445in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.trace.test_proof_trace_fills_to_capacity_with_stable_pointers_and_zero_steady_operations[function] — test source atlib/smt/src/sat/trace.zig:398in nearest public ownertiny.smt.sat.trace
Complete caller list for Literal.positive
42 direct callers.
lib.smt.src.profiling.sat.buildPigeonholeFormula[function] — private source atlib/smt/src/profiling/sat.zig:77in nearest public ownerlib.smt.src.profiling.satlib.smt.src.properties.model.redundantFormula[function] — private source atlib/smt/src/properties/model.zig:140in nearest public ownerlib.smt.src.properties.modellib.smt.src.properties.model.test_semantic_proof_oracle_rejects_a_circular_self-visible_trace[function] — test source atlib/smt/src/properties/model.zig:369in nearest public ownerlib.smt.src.properties.modellib.smt.src.sat.proof.test_proof_artifact_assumptions_are_part_of_its_exact_scope[function] — test source atlib/smt/src/sat/proof.zig:425in nearest public ownerlib.smt.src.sat.prooflib.smt.src.sat.proof.test_proof_artifact_rejects_a_first_step_visible_only_to_itself[function] — test source atlib/smt/src/sat/proof.zig:408in nearest public ownerlib.smt.src.sat.prooflib.smt.src.sat.proof.test_proof_artifact_rejects_literals_outside_its_variable_scope[function] — test source atlib/smt/src/sat/proof.zig:417in nearest public ownerlib.smt.src.sat.prooflib.smt.src.sat.proof.test_proof_propagation_reaches_a_fixed_point_within_the_exact_step_prefix[function] — test source atlib/smt/src/sat/proof.zig:364in nearest public ownerlib.smt.src.sat.prooflib.smt.src.sat.proof.test_proof_reason_replay_checks_inference_and_rejects_an_incomplete_trail[function] — test source atlib/smt/src/sat/proof.zig:305in nearest public ownerlib.smt.src.sat.prooflib.smt.src.sat.scratch.test_conflict_scratch_rejects_before_mutation_and_exactly_returns_its_affine_loan[function] — test source atlib/smt/src/sat/scratch.zig:587in nearest public ownertiny.smt.sat.scratchlib.smt.src.sat.solver.Solver.decisionLiteral[method] — private source atlib/smt/src/sat/solver.zig:1374in nearest public ownertiny.smt.sat.solverlib.smt.src.sat.solver.test_bounded_solve_preserves_status_and_proof_under_eviction[function] — test source atlib/smt/src/sat/solver.zig:1565in nearest public ownertiny.smt.sat.solverlib.smt.src.sat.solver.test_budgeted_solve_keeps_proof_steps_in_the_trace_slab[function] — test source atlib/smt/src/sat/solver.zig:1707in nearest public ownertiny.smt.sat.solverlib.smt.src.sat.solver.test_entry_eviction_enforces_a_newly_set_cap[function] — test source atlib/smt/src/sat/solver.zig:1785in nearest public ownertiny.smt.sat.solverlib.smt.src.sat.solver.test_eviction_removes_worst_lbd_first_then_longest_and_never_glue[function] — test source atlib/smt/src/sat/solver.zig:1480in nearest public ownertiny.smt.sat.solverlib.smt.src.sat.solver.test_eviction_skips_locked_and_protected_clauses[function] — test source atlib/smt/src/sat/solver.zig:1536in nearest public ownertiny.smt.sat.solverlib.smt.src.sat.solver.test_learned_clause_records_multi-level_block_distance[function] — test source atlib/smt/src/sat/solver.zig:1893in nearest public ownertiny.smt.sat.solverlib.smt.src.sat.solver.test_learned_clause_records_single-level_block_distance[function] — test source atlib/smt/src/sat/solver.zig:1871in nearest public ownertiny.smt.sat.solverlib.smt.src.sat.solver.test_learned_store_pool_survives_variable_growth_and_cap_removal[function] — test source atlib/smt/src/sat/solver.zig:1651in nearest public ownertiny.smt.sat.solverlib.smt.src.sat.solver.test_proof_trace_survives_budget_growth_and_removal[function] — test source atlib/smt/src/sat/solver.zig:1742in nearest public ownertiny.smt.sat.solverlib.smt.src.sat.solver.test_removing_a_learned_clause_preserves_base_prefix_and_behavior[function] — test source atlib/smt/src/sat/solver.zig:1802in nearest public ownertiny.smt.sat.solverlib.smt.src.sat.solver.test_removing_a_middle_learned_clause_patches_the_moved_clause[function] — test source atlib/smt/src/sat/solver.zig:1826in nearest public ownertiny.smt.sat.solverlib.smt.src.sat.store.test_learned_store_fills_to_capacity_with_stable_slots_and_zero_steady_operations[function] — test source atlib/smt/src/sat/store.zig:406in nearest public ownertiny.smt.sat.storelib.smt.src.sat.test.checkSolveAllocationFailureEvidence[function] — private source atlib/smt/src/sat/test.zig:356in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_base_inconsistency_keeps_artifact_scope_broader_than_its_empty_core[function] — test source atlib/smt/src/sat/test.zig:91in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_conflict_budget_preserves_genuine_results_within_budget[function] — test source atlib/smt/src/sat/test.zig:498in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_conflict_budget_returns_unknown_instead_of_spinning[function] — test source atlib/smt/src/sat/test.zig:478in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_conflict_scratch_growth_rejects_before_solve_evidence_mutation_and_retries[function] — test source atlib/smt/src/sat/test.zig:161in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_proof_artifact_records_assumptions[function] — test source atlib/smt/src/sat/test.zig:241in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_solver_accepts_simple_satisfiable_clauses[function] — test source atlib/smt/src/sat/test.zig:30in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_solver_clears_proof_trace_after_satisfiable_solve[function] — test source atlib/smt/src/sat/test.zig:257in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_solver_conflict_scratch_preserves_binary_implication_learning[function] — test source atlib/smt/src/sat/test.zig:114in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_solver_detects_unsatisfiable_unit_conflict[function] — test source atlib/smt/src/sat/test.zig:74in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_solver_exports_independent_proof_artifact[function] — test source atlib/smt/src/sat/test.zig:216in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_solver_keeps_assumptions_through_learned_conflicts[function] — test source atlib/smt/src/sat/test.zig:426in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_solver_keeps_core_proof_scope_and_step_statistics_aligned[function] — test source atlib/smt/src/sat/test.zig:327in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_solver_prunes_irrelevant_assumptions_from_unsat_core[function] — test source atlib/smt/src/sat/test.zig:311in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_solver_reports_unknown_when_core_certification_exhausts_budget[function] — test source atlib/smt/src/sat/test.zig:405in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_solver_restarts_after_learned_conflicts[function] — test source atlib/smt/src/sat/test.zig:273in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_solver_saves_phases_across_solves[function] — test source atlib/smt/src/sat/test.zig:55in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_solver_supports_assumptions[function] — test source atlib/smt/src/sat/test.zig:289in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.test.test_sat_solver_supports_nested_assumption_frames[function] — test source atlib/smt/src/sat/test.zig:445in nearest public ownerlib.smt.src.sat.testlib.smt.src.sat.trace.test_proof_trace_fills_to_capacity_with_stable_pointers_and_zero_steady_operations[function] — test source atlib/smt/src/sat/trace.zig:398in nearest public ownertiny.smt.sat.trace
Audit
| Definitions | 10 |
|---|---|
| Public names | 40 |
| Members | 1 |
| Version | 26.7.0 |
| Revision | daab053ee433 |