Skip to main content

Term

Struct Term 

Source
pub struct Term { /* private fields */ }
Expand description

A term in first-order logic.

Terms represent objects in the domain of discourse. A term can be:

  • A constant: socrates
  • A variable: x
  • A function application: add(x, y)

§Examples

use vampire_prover::{Function, Term};

// Create a constant
let zero = Function::constant("0");

// Create a variable
let x = Term::new_var(0);

// Create a function application
let succ = Function::new("succ", 1);
let one = succ.with(zero);

Implementations§

Source§

impl Term

Source

pub fn new_function(func: Function, args: &[Term]) -> Self

Creates a term by applying a function to arguments.

This is typically called via Function::with rather than directly.

§Panics

Panics if the number of arguments does not match the function’s arity.

§Examples
use vampire_prover::{Function, Term};

let add = Function::new("add", 2);
let x = Term::new_var(0);
let y = Term::new_var(1);

let sum = Term::new_function(add, &[x, y]);
Source

pub fn new_var(idx: u32) -> Self

Creates a variable with the given index.

Variables are typically used within quantified formulas. The index should be unique within a formula. For automatic variable management, consider using the forall and exists helper functions instead.

§Arguments
  • idx - The unique index for this variable
§Examples
use vampire_prover::Term;

let x = Term::new_var(0);
let y = Term::new_var(1);
Source

pub fn free_var() -> (Self, u32)

Creates a fresh variable with an automatically assigned index.

Returns both the variable term and its index. This is primarily used internally by the forall and exists functions.

§Examples
use vampire_prover::Term;

let (x, idx) = Term::free_var();
assert_eq!(idx, 0);

let (y, idx2) = Term::free_var();
assert_eq!(idx2, 1);
Source

pub fn eq(&self, rhs: Term) -> Formula

Creates an equality formula between this term and another.

§Arguments
  • rhs - The right-hand side of the equality
§Examples
use vampire_prover::{Function, forall};

let succ = Function::new("succ", 1);
let zero = Function::constant("0");

// ∀x. succ(x) = succ(x)
let reflexive = forall(|x| {
    let sx = succ.with(x);
    sx.eq(sx)
});

Trait Implementations§

Source§

impl Clone for Term

Source§

fn clone(&self) -> Term

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Term

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Hash for Term

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl IntoTermArgs for Term

Source§

fn as_slice(&self) -> &[Term]

Convert this type into a slice of terms.
Source§

impl PartialEq for Term

Source§

fn eq(&self, other: &Term) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for Term

Source§

impl Eq for Term

Source§

impl StructuralPartialEq for Term

Auto Trait Implementations§

§

impl Freeze for Term

§

impl RefUnwindSafe for Term

§

impl !Send for Term

§

impl !Sync for Term

§

impl Unpin for Term

§

impl UnwindSafe for Term

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.