Releases: sdcondon/SCFirstOrderLogic
7.0.0-pre.1
Changes in this pre-release:
- 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 is somewhat configurable (lessening the chance of confusion/issues occurring due to zero arity functions being specifiable with or without parentheses), there really is no excuse not to get rid of this. - BREAKING: namespace changes. 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 any awkwardness. Specifics:- CNFExplainer moved from SentenceFormatting to SentenceManipulation.Normalisation.
- CNFClause.Restandardise method removed, replaced with extension methods in Normalisation namespace.
- SkolemFunctionIdentifier and StandardisedVariableIdentifier moved from SCFirstOrderLogic to SCFirstOrderLogc.SentenceManipulation.Normalisation.
- VariableSubstitution, MutableVariableSubstitution and CNFInspector moved from SentenceManipulation to SentenceManipulation.VariableManipulation.
- Unifier class and CNFClause unification extension methods moved from SentenceManipulation.Unification to SentenceManipulation.VariableManipulation.
- Added some extension methods for Terms to the new SentenceManipulation.VariableManipulation namespace. Specifically, added
IsInstanceOf(Term)
,IsGeneralisationOf(Term)
andOrdinalise()
. - 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.
- Package README update
- As always, some XML doc improvements
All v7 changes so far:
As above
6.0.0
- BREAKING: Removed knowledge base implementations, leaving only the abstractions. The implementations have been moved to the new SCFirstOrderLogic.Inference.Basic package. I'm separating these out because it's no longer completely beyond the realms of possibility that I'll have a go at creating a "real" knowledge base implementation at some point. If and when I do (or indeed if someone else wants to), I don't want these ones getting in the way. Besides, there is enough scope for different KB implementations for different purposes that I don't think any implementations belong in the core package.
- BREAKING: Significant SentenceFormatting namespace refactoring. Cleaned up SentenceFormatter a little - removed its knowledge of specific identifier types.
- Some changes in the TermIndexing namespace:
- BREAKING:
IDiscriminationTreeElementInfo
renamed toIDiscriminationTreeNodeKey
. Its implementations have also been renamed. - BREAKING:
IAsyncDiscriminationTreeNode
methods modified to return ValueTasks instead of Tasks.
- BREAKING:
- Some changes to VariableSubstitution:
- Added
MutableVariableSubstitution
. Derives fromVariableSubstitution
and is modifiable in-place. - Added
CopyAsMutable
method to VariableSubstitution. - Added
CopyAndAdd
methods toVariableSubstitution
. - BREAKING: renamed
VariableSubstitution.Clone()
toCopyAsReadOnly()
. Didn't want to use the term "Clone" for the methods above, because "Clone" suggests no change quite strongly - "CloneAndAdd" is a bit awkward. So, renaming this method for consistency.
- Added
- BREAKING: Made the implicit Predicate to Literal conversion operator explicit. Making it implicit was a mistake - causes the compiler to make some undesirable decisions when working with Predicates.
- Added some overloads to
Unifier
, to make up for the Predicate to Literal conversion change (above).
6.0.0-pre.3
New in this pre-release:
- BREAKING: Significant SentenceFormatting namespace refactoring. Cleaned up SentenceFormatter a little - removed its knowledge of specific identifier types.
All v6 changes so far:
- BREAKING: Removed knowledge base implementations, leaving only the abstractions. The implementations have been moved to the new SCFirstOrderLogic.Inference.Basic package. I'm separating these out because it's no longer completely beyond the realms of possibility that I'll have a go at creating a "real" knowledge base implementation at some point. If and when I do (or indeed if someone else wants to), I don't want these ones getting in the way. Besides, there is enough scope for different KB implementations for different purposes that I don't think any implementations belong in the core package.
- BREAKING: Significant SentenceFormatting namespace refactoring. Cleaned up SentenceFormatter a little - removed its knowledge of specific identifier types.
- Some changes in the TermIndexing namespace:
- BREAKING:
IDiscriminationTreeElementInfo
renamed toIDiscriminationTreeNodeKey
. Its implementations have also been renamed. - BREAKING:
IAsyncDiscriminationTreeNode
methods modified to return ValueTasks instead of Tasks.
- BREAKING:
- Some changes to VariableSubstitution:
- Added
MutableVariableSubstitution
. Derives fromVariableSubstitution
and is modifiable in-place. - Added
CopyAsMutable
method to VariableSubstitution. - Added
CopyAndAdd
methods toVariableSubstitution
. - BREAKING: renamed
VariableSubstitution.Clone()
toCopyAsReadOnly()
. Didn't want to use the term "Clone" for the methods above, because "Clone" suggests no change quite strongly - "CloneAndAdd" is a bit awkward. So, renaming this method for consistency.
- Added
- BREAKING: Made the implicit Predicate to Literal conversion operator explicit. Making it implicit was a mistake - causes the compiler to make some undesirable decisions when working with Predicates.
- Added some overloads to
Unifier
, to make up for the Predicate to Literal conversion change (above).
6.0.0-pre.2
New in this pre-release:
- BREAKING: Removed knowledge base implementations, leaving only the abstractions. The implementations have been moved to the new SCFirstOrderLogic.Inference.Basic package. I'm separating these out because it's no longer completely beyond the realms of possibility that I'll have a go at creating a "real" knowledge base implementation at some point. If and when I do (or indeed if someone else wants to), I don't want these ones getting in the way. Besides, there is enough scope for different KB implementations for different purposes that I don't think any implementations belong in the core package.
All v6 changes so far:
- BREAKING: Removed knowledge base implementations, leaving only the abstractions. The implementations have been moved to the new SCFirstOrderLogic.Inference.Basic package. I'm separating these out because it's no longer completely beyond the realms of possibility that I'll have a go at creating a "real" knowledge base implementation at some point. If and when I do (or indeed if someone else wants to), I don't want these ones getting in the way. Besides, there is enough scope for different KB implementations for different purposes that I don't think any implementations belong in the core package.
- Some changes in the TermIndexing namespace:
- BREAKING:
IDiscriminationTreeElementInfo
renamed toIDiscriminationTreeNodeKey
. Its implementations have also been renamed. - BREAKING:
IAsyncDiscriminationTreeNode
methods modified to return ValueTasks instead of Tasks.
- BREAKING:
- Some changes to VariableSubstitution:
- Added
MutableVariableSubstitution
. Derives fromVariableSubstitution
and is modifiable in-place. - Added
CopyAsMutable
method to VariableSubstitution. - Added
CopyAndAdd
methods toVariableSubstitution
. - BREAKING: renamed
VariableSubstitution.Clone()
toCopyAsReadOnly()
. Didn't want to use the term "Clone" for the methods above, because "Clone" suggests no change quite strongly - "CloneAndAdd" is a bit awkward. So, renaming this method for consistency.
- Added
- BREAKING: Made the implicit Predicate to Literal conversion operator explicit. Making it implicit was a mistake - causes the compiler to make some undesirable decisions when working with Predicates.
- Added some overloads to
Unifier
, to make up for the Predicate to Literal conversion change (above).
6.0.0-pre.1
New in this pre-release:
- Some changes in the TermIndexing namespace:
- BREAKING:
IDiscriminationTreeElementInfo
renamed toIDiscriminationTreeNodeKey
. Its implementations have also been renamed. - BREAKING:
IAsyncDiscriminationTreeNode
methods modified to return ValueTasks instead of Tasks.
- BREAKING:
- Some changes to VariableSubstitution:
- Added
MutableVariableSubstitution
. Derives fromVariableSubstitution
and is modifiable in-place. - Added
CopyAsMutable
method to VariableSubstitution. - Added
CopyAndAdd
methods toVariableSubstitution
. - BREAKING: renamed
VariableSubstitution.Clone()
toCopyAsReadOnly()
. Didn't want to use the term "Clone" for the methods above, because "Clone" suggests no change quite strongly - "CloneAndAdd" is a bit awkward. So, renaming this method for consistency.
- Added
- BREAKING: Made the implicit Predicate to Literal conversion operator explicit. Making it implicit was a mistake - causes the compiler to make some undesirable decisions when working with Predicates.
- Added some overloads to
Unifier
, to make up for the Predicate to Literal conversion change (above).
All v6 changes so far:
As above..
5.5.0
Added override methods to VariableSubstitution
that have covariant return types. For example, this class' ApplyTo(Predicate)
method now returns a Predicate
, not a Sentence
. The only type that this transformation potentially mutates is VariableReference
, and there's no particular reason not to have its method signatures reflect that. Might save callers a cast or two.
5.4.0
5.3.0
- Added
AsyncPathTree<TValue>
andAsyncPathTree
to theTermIndexing
namespace - to facilitate more efficient IO for node implementations that use it. - The
value
parameter of theTryGetExact
method of discrimination trees is now marked[MaybeNullWhen(false)]
. - The static single-letter variable declarations in sentence factories are now initialised rather than instantiating a new declaration each time they are called. 26 minimally sized objects is fine to be static - I've no clue why I was so cagey about this.
5.2.0
- Added a (synchronous only, for now) path index implementation to the
TermIndexing
namespace. - Made some minor changes to discrimination trees:
- Some additional argument validation (just null checks) in a few methods
- Added a
Contains
method toDiscriminationTree<T>
andAsyncDiscriminationTree<T>
- Made
AsyncDiscriminationTreeDictionaryNode<T>
thread-safe
- A couple of minor additions in the
SentenceManipulation
namespace:- Added some more public methods to
Unifier
class - with Term-valued arguments - Added sentence and term transformation interfaces that work with external state -
ISentenceTransformation<out TOut, in TState>
andITermTransformation<out TOut, in TState>
.
- Added some more public methods to
- A number of type and member documentation additions and improvements
5.1.0
NB: includes breaking changes to the existing discrimination tree implementation, despite only being a minor version bump. Should have done this in v5, but was impatient - and don't want to bump to version 6 so soon. The nature of the package and relatively low download count suggests that absolutely no-one will care, but if anyone does, feel free to reach out and I'll take care to not do this again.
- Added an async discrimination tree implementation - to facilitate secondary storage.
- Some breaking refactoring to the existing synchronous discrimination tree.