Source code for tensor_theorem_prover.prover.Proof

from __future__ import annotations

from dataclasses import dataclass
from textwrap import indent

from tensor_theorem_prover.normalize.to_cnf import CNFDisjunction
from tensor_theorem_prover.prover.ProofStats import ProofStats
from tensor_theorem_prover.types import Variable
from tensor_theorem_prover.types.Term import term_from_rust

from tensor_theorem_prover._rust import RsProof

from .ProofStep import ProofStep, SubstitutionsMap


[docs]@dataclass(frozen=True, eq=True) class Proof: """ Respresentation of a successful proof of a goal """ goal: CNFDisjunction similarity: float stats: ProofStats proof_steps: list[ProofStep] depth: int substitutions: SubstitutionsMap def __str__(self) -> str: substitutions_str_inner = ", ".join( f"{var} -> {term}" for var, term in self.substitutions.items() ) substitutions_str = "{" + substitutions_str_inner + "}" output = f"Goal: {self.goal}\n" output += f"Subsitutions: {substitutions_str}\n" output += f"Similarity: {self.similarity}\n" output += f"Depth: {self.depth}\n" output += "Steps:\n" output += "\n ---\n".join( indent(str(proof_state), " ") for proof_state in self.proof_steps ) return output
[docs] @classmethod def from_rust(cls, rust_proof: RsProof) -> Proof: substitutions = { Variable.from_rust(var): term_from_rust(term) for var, term in rust_proof.substitutions.items() } return Proof( goal=CNFDisjunction.from_rust(rust_proof.goal), similarity=rust_proof.similarity, stats=ProofStats.from_rust(rust_proof.stats), proof_steps=[ ProofStep.from_rust(proof_step) for proof_step in rust_proof.proof_steps ], depth=rust_proof.depth, substitutions=substitutions, )