Tag completion directives with source
This commit is contained in:
parent
39a047e10a
commit
e933c45079
2
foliage
2
foliage
|
@ -1 +1 @@
|
||||||
Subproject commit 8870cee1793571a313ac4f0948e4d73c5589e671
|
Subproject commit 7af51e9e64947a16f7f9c5c7923b77a8862139b5
|
|
@ -5,7 +5,11 @@ impl std::fmt::Debug for crate::project::StatementKind
|
||||||
match &self
|
match &self
|
||||||
{
|
{
|
||||||
crate::project::StatementKind::Axiom => write!(format, "axiom"),
|
crate::project::StatementKind::Axiom => write!(format, "axiom"),
|
||||||
crate::project::StatementKind::Completion => write!(format, "completion"),
|
crate::project::StatementKind::Completion(
|
||||||
|
crate::project::CompletionTarget::Predicate(predicate_declaration))
|
||||||
|
=> write!(format, "completion({}/{})", predicate_declaration.name, predicate_declaration.arity),
|
||||||
|
crate::project::StatementKind::Completion(crate::project::CompletionTarget::Constraint)
|
||||||
|
=> write!(format, "completion(constraint)"),
|
||||||
crate::project::StatementKind::Assumption => write!(format, "assumption"),
|
crate::project::StatementKind::Assumption => write!(format, "assumption"),
|
||||||
crate::project::StatementKind::Assertion => write!(format, "assertion"),
|
crate::project::StatementKind::Assertion => write!(format, "assertion"),
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,15 +11,14 @@ pub trait DisplayTPTP<'a, DisplayType>
|
||||||
fn display_tptp(&'a self) -> DisplayType;
|
fn display_tptp(&'a self) -> DisplayType;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_statement_kind_conjecture(statement_kind: crate::project::StatementKind,
|
pub fn is_statement_kind_conjecture(statement_kind: &crate::project::StatementKind,
|
||||||
proof_direction: ProofDirection) -> bool
|
proof_direction: ProofDirection) -> bool
|
||||||
{
|
{
|
||||||
match proof_direction
|
match (proof_direction, statement_kind)
|
||||||
{
|
{
|
||||||
ProofDirection::Forward =>
|
(ProofDirection::Forward, crate::project::StatementKind::Assertion) => true,
|
||||||
statement_kind == crate::project::StatementKind::Assertion,
|
(ProofDirection::Backward, crate::project::StatementKind::Completion(_)) => true,
|
||||||
ProofDirection::Backward =>
|
_ => false,
|
||||||
statement_kind == crate::project::StatementKind::Completion,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -240,9 +239,9 @@ struct VariableDeclarationDisplay<'a>(&'a foliage::VariableDeclaration);
|
||||||
struct PredicateDeclarationDisplay<'a>(&'a foliage::PredicateDeclaration);
|
struct PredicateDeclarationDisplay<'a>(&'a foliage::PredicateDeclaration);
|
||||||
struct TermDisplay<'a>(&'a foliage::Term);
|
struct TermDisplay<'a>(&'a foliage::Term);
|
||||||
struct FormulaDisplay<'a>(&'a foliage::Formula);
|
struct FormulaDisplay<'a>(&'a foliage::Formula);
|
||||||
struct StatementKindDisplay
|
struct StatementKindDisplay<'a>
|
||||||
{
|
{
|
||||||
statement_kind: crate::project::StatementKind,
|
statement_kind: &'a crate::project::StatementKind,
|
||||||
proof_direction: ProofDirection,
|
proof_direction: ProofDirection,
|
||||||
}
|
}
|
||||||
pub struct ProjectDisplay<'a>
|
pub struct ProjectDisplay<'a>
|
||||||
|
@ -284,9 +283,9 @@ impl<'a> DisplayTPTP<'a, FormulaDisplay<'a>> for foliage::Formula
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn display_statement_kind_tptp(statement_kind: crate::project::StatementKind,
|
fn display_statement_kind_tptp<'a>(statement_kind: &'a crate::project::StatementKind,
|
||||||
proof_direction: ProofDirection)
|
proof_direction: ProofDirection)
|
||||||
-> StatementKindDisplay
|
-> StatementKindDisplay<'a>
|
||||||
{
|
{
|
||||||
StatementKindDisplay
|
StatementKindDisplay
|
||||||
{
|
{
|
||||||
|
@ -581,23 +580,23 @@ impl<'a> std::fmt::Display for FormulaDisplay<'a>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl std::fmt::Debug for StatementKindDisplay
|
impl<'a> std::fmt::Debug for StatementKindDisplay<'a>
|
||||||
{
|
{
|
||||||
fn fmt(&self, format: &mut std::fmt::Formatter) -> std::fmt::Result
|
fn fmt(&self, format: &mut std::fmt::Formatter) -> std::fmt::Result
|
||||||
{
|
{
|
||||||
match (self.statement_kind, self.proof_direction)
|
match (&self.statement_kind, self.proof_direction)
|
||||||
{
|
{
|
||||||
(crate::project::StatementKind::Axiom, _) => write!(format, "axiom, axiom"),
|
(crate::project::StatementKind::Axiom, _) => write!(format, "axiom, axiom"),
|
||||||
(crate::project::StatementKind::Assumption, _) => write!(format, "assumption, axiom"),
|
(crate::project::StatementKind::Assumption, _) => write!(format, "assumption, axiom"),
|
||||||
(crate::project::StatementKind::Completion, ProofDirection::Forward) => write!(format, "completion, axiom"),
|
(crate::project::StatementKind::Completion(_), ProofDirection::Forward) => write!(format, "completion, axiom"),
|
||||||
(crate::project::StatementKind::Completion, ProofDirection::Backward) => write!(format, "completion, conjecture"),
|
(crate::project::StatementKind::Completion(_), ProofDirection::Backward) => write!(format, "completion, conjecture"),
|
||||||
(crate::project::StatementKind::Assertion, ProofDirection::Forward) => write!(format, "assertion, conjecture"),
|
(crate::project::StatementKind::Assertion, ProofDirection::Forward) => write!(format, "assertion, conjecture"),
|
||||||
(crate::project::StatementKind::Assertion, ProofDirection::Backward) => write!(format, "assertion, axiom"),
|
(crate::project::StatementKind::Assertion, ProofDirection::Backward) => write!(format, "assertion, axiom"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl std::fmt::Display for StatementKindDisplay
|
impl<'a> std::fmt::Display for StatementKindDisplay<'a>
|
||||||
{
|
{
|
||||||
fn fmt(&self, format: &mut std::fmt::Formatter) -> std::fmt::Result
|
fn fmt(&self, format: &mut std::fmt::Formatter) -> std::fmt::Result
|
||||||
{
|
{
|
||||||
|
@ -651,7 +650,7 @@ impl<'a> std::fmt::Debug for ProjectDisplay<'a>
|
||||||
{
|
{
|
||||||
crate::project::Block::Whitespace(_) => None,
|
crate::project::Block::Whitespace(_) => None,
|
||||||
crate::project::Block::Statement(ref statement) =>
|
crate::project::Block::Statement(ref statement) =>
|
||||||
match is_statement_kind_conjecture(statement.kind, self.proof_direction)
|
match is_statement_kind_conjecture(&statement.kind, self.proof_direction)
|
||||||
{
|
{
|
||||||
false => Some(statement),
|
false => Some(statement),
|
||||||
true => None,
|
true => None,
|
||||||
|
@ -661,13 +660,13 @@ impl<'a> std::fmt::Debug for ProjectDisplay<'a>
|
||||||
for axiom in axioms
|
for axiom in axioms
|
||||||
{
|
{
|
||||||
write!(format, "\ntff({:?}, {:?}).",
|
write!(format, "\ntff({:?}, {:?}).",
|
||||||
display_statement_kind_tptp(axiom.kind, self.proof_direction), axiom.formula.display_tptp())?;
|
display_statement_kind_tptp(&axiom.kind, self.proof_direction), axiom.formula.display_tptp())?;
|
||||||
}
|
}
|
||||||
|
|
||||||
write_title(format, "\n\n", "assertion")?;
|
write_title(format, "\n\n", "assertion")?;
|
||||||
|
|
||||||
write!(format, "\ntff({:?}, {:?}).",
|
write!(format, "\ntff({:?}, {:?}).",
|
||||||
display_statement_kind_tptp(self.conjecture.kind, self.proof_direction), self.conjecture.formula.display_tptp())?;
|
display_statement_kind_tptp(&self.conjecture.kind, self.proof_direction), self.conjecture.formula.display_tptp())?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,7 @@ fn find_conjecture<'a>(project: &'a ask_dracula::Project,
|
||||||
{
|
{
|
||||||
if let ask_dracula::project::Block::Statement(ref statement) = block
|
if let ask_dracula::project::Block::Statement(ref statement) = block
|
||||||
{
|
{
|
||||||
if ask_dracula::format_tptp::is_statement_kind_conjecture(statement.kind, proof_direction)
|
if ask_dracula::format_tptp::is_statement_kind_conjecture(&statement.kind, proof_direction)
|
||||||
{
|
{
|
||||||
return Some(statement)
|
return Some(statement)
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,7 @@ fn find_conjecture_mut<'a>(project: &'a mut ask_dracula::Project,
|
||||||
{
|
{
|
||||||
if let ask_dracula::project::Block::Statement(ref mut statement) = block
|
if let ask_dracula::project::Block::Statement(ref mut statement) = block
|
||||||
{
|
{
|
||||||
if ask_dracula::format_tptp::is_statement_kind_conjecture(statement.kind, proof_direction)
|
if ask_dracula::format_tptp::is_statement_kind_conjecture(&statement.kind, proof_direction)
|
||||||
{
|
{
|
||||||
return Some(statement)
|
return Some(statement)
|
||||||
}
|
}
|
||||||
|
|
33
src/parse.rs
33
src/parse.rs
|
@ -3,6 +3,7 @@ use nom::
|
||||||
IResult,
|
IResult,
|
||||||
sequence::{delimited, pair, preceded, terminated, tuple},
|
sequence::{delimited, pair, preceded, terminated, tuple},
|
||||||
combinator::{map, recognize},
|
combinator::{map, recognize},
|
||||||
|
character::complete::digit1,
|
||||||
branch::alt,
|
branch::alt,
|
||||||
bytes::complete::tag,
|
bytes::complete::tag,
|
||||||
};
|
};
|
||||||
|
@ -42,8 +43,36 @@ fn statement_kind(i: &str) -> IResult<&str, crate::project::StatementKind>
|
||||||
),
|
),
|
||||||
map
|
map
|
||||||
(
|
(
|
||||||
tag("completion:"),
|
preceded
|
||||||
|_| crate::project::StatementKind::Completion,
|
(
|
||||||
|
tag("completion"),
|
||||||
|
delimited
|
||||||
|
(
|
||||||
|
tag("("),
|
||||||
|
pair
|
||||||
|
(
|
||||||
|
terminated
|
||||||
|
(
|
||||||
|
foliage::parse::symbolic_identifier,
|
||||||
|
tag("/"),
|
||||||
|
),
|
||||||
|
digit1,
|
||||||
|
),
|
||||||
|
tag("):"),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
|(name, arity)|
|
||||||
|
match arity.parse::<usize>()
|
||||||
|
{
|
||||||
|
Ok(arity) => crate::project::StatementKind::Completion(
|
||||||
|
crate::project::CompletionTarget::Predicate(foliage::PredicateDeclaration{name, arity})),
|
||||||
|
Err(error) => panic!("invalid arity “{}”: {}", arity, error),
|
||||||
|
}
|
||||||
|
),
|
||||||
|
map
|
||||||
|
(
|
||||||
|
tag("completion(constraint):"),
|
||||||
|
|_| crate::project::StatementKind::Completion(crate::project::CompletionTarget::Constraint),
|
||||||
),
|
),
|
||||||
map
|
map
|
||||||
(
|
(
|
||||||
|
|
|
@ -1,8 +1,15 @@
|
||||||
#[derive(Clone, Copy, Eq, Hash, PartialEq)]
|
#[derive(Eq, Hash, PartialEq)]
|
||||||
|
pub enum CompletionTarget
|
||||||
|
{
|
||||||
|
Predicate(foliage::PredicateDeclaration),
|
||||||
|
Constraint,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Eq, Hash, PartialEq)]
|
||||||
pub enum StatementKind
|
pub enum StatementKind
|
||||||
{
|
{
|
||||||
Axiom,
|
Axiom,
|
||||||
Completion,
|
Completion(CompletionTarget),
|
||||||
Assumption,
|
Assumption,
|
||||||
Assertion,
|
Assertion,
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue