7.0.0
Quite a substantial one. Apologies for any annoyance caused by the breaking changes, but I hope you'll agree that the overall structure of the library is markedly improved. Also hope you'll agree that the addition of feature vector index implementations is a fairly big deal - consider it an attempt to make up for all the breaking stuff..
Changes compared to 6.0.0:
- BREAKING: Removed
Constant
type from the model. There has never been any real need for it - a constant is just a function with arity zero. Now that parsing and formatting are configurable with regards to the inclusion or not of brackets for zero arity functions, there really is no excuse not to get rid of this. - BREAKING: significant re-organisation of sentence manipulation logic. Two motivations here. First, to tidy up the SentenceManipulation namespace, by moving concrete manipulation classes downward into one of two sub-namespaces (
Normalisation
andVariableManipulation
), leaving just the abstractions in SentenceManipulation itself. Second, to push the specifics of our CNF conversion logic (notably, the standardised variable and Skolem function identifier types) downward, so that they don't pollute our model. The CNFSentence and CNFClause types should be usable without needing to also use our conversion logic. If consumers want to normalise using their own logic/identifiers, that should be doable without confusion. Specifics:SkolemFunctionIdentifier
andStandardisedVariableIdentifier
moved fromSCFirstOrderLogic
to newSCFirstOrderLogic.SentenceManipulation.Normalisation
namespace.CNFExplainer
moved fromSentenceFormatting
to Normalisation namespace.CNFInspector
moved fromSentenceManipulation
to Normalisation namespace.CNFClause.Restandardise
method removed, replaced by extension method in newNormalisationExtensions
class in Normalisation namespace.ToCNF
method removed from Sentence class, replaced by extension method in NormalisationExtensions.CNFClause
unification extension methods moved fromSentenceManipulation.Unification
to a newVariableManipulationExtensions
class in a newSentenceManipulation.VariableManipulation
namespace.VariableSubstitution
andMutableVariableSubstitution
moved fromSentenceManipulation
to VariableManipulation namespace.Unifier
moved fromSentenceManipulation.Unification
to VariableManipulation namespace.CNFSentence
's Sentence-accepting ctor changed so that it no longer converts to CNF for you - it expects the sentence to already be a conjunction of disjunctions of literals.
- Added a couple of feature vector index implementations (one synchronous, one asynchronous) to a new
ClauseIndexing
namespace. As with the term indexing types, there are node abstractions here to allow you to bring your own backing store, but the only node implementations provided by the library just store things in memory. - Optional ctor parameter added to
SentenceFormatter
- a delegate for controlling whether brackets should be included for zero arity functions with a given identifier. Defaults to always including them. - Added some extension methods for Terms to VariableManipulationExtensions class in the SentenceManipulation.VariableManipulation namespace. Specifically, added
IsInstanceOf(Term)
,IsGeneralisationOf(Term)
,Ordinalise(Sentence)
,Ordinalise(Literal)
andOrdinalise(Term)
. - Added an implicit conversion operator to OperableFunction, to eliminate a situation where the compiler complains due to ambiguity. Should probably also make several other similar additions to other operable types, but.. haven't bothered for now.
- Minor changes to
Unifier
class - trivial performance improvement when working with Predicates. - Package README update
- Some XML doc improvements
Changes compared to 7.0.0-pre.4
- Optional ctor parameter added to
SentenceFormatter
- a delegate for controlling whether brackets should be included for zero arity functions with a given identifier. Defaults to always including them. - Package README update