litex-lang 0.9.65-beta

A simple formal proof language and verifier, learnable in 2 hours
Documentation
use crate::prelude::*;
use std::result::Result;

impl Runtime {
    pub fn verify_forall_fact_with_iff(
        &mut self,
        forall_iff: &ForallFactWithIff,
        verify_state: &VerifyState,
    ) -> Result<StmtResult, RuntimeError> {
        if let Some(cached_result) =
            self.verify_fact_from_cache_using_display_string(&forall_iff.clone().into())
        {
            return Ok(cached_result);
        }

        let (forall_then_implies_iff, forall_iff_implies_then) = forall_iff.to_two_forall_facts();
        let verification_steps = [&forall_then_implies_iff, &forall_iff_implies_then];
        for forall_step in verification_steps {
            let result = self.verify_forall_fact(forall_step, verify_state)?;
            if result.is_unknown() {
                return Ok(result);
            }
        }

        Ok(
            (FactualStmtSuccess::new_with_verified_by_known_fact_source_recording_facts(
                forall_iff.clone().into(),
                "forall iff: then=>iff and iff=>then verified".to_string(),
                None,
                Some(default_line_file()),
                Vec::new(),
            ))
            .into(),
        )
    }
}