Skip to content

Releases: sdcondon/SCFirstOrderLogic

7.0.0-pre.1

03 Aug 12:52
Compare
Choose a tag to compare
7.0.0-pre.1 Pre-release
Pre-release

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 and VariableManipulation), 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) and Ordinalise().
  • 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

07 Jul 15:06
Compare
Choose a tag to compare
  • 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 to IDiscriminationTreeNodeKey. Its implementations have also been renamed.
    • BREAKING: IAsyncDiscriminationTreeNode methods modified to return ValueTasks instead of Tasks.
  • Some changes to VariableSubstitution:
    • Added MutableVariableSubstitution. Derives from VariableSubstitution and is modifiable in-place.
    • Added CopyAsMutable method to VariableSubstitution.
    • Added CopyAndAdd methods to VariableSubstitution.
    • BREAKING: renamed VariableSubstitution.Clone() to CopyAsReadOnly(). 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.
  • 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

07 Jul 13:03
Compare
Choose a tag to compare
6.0.0-pre.3 Pre-release
Pre-release

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 to IDiscriminationTreeNodeKey. Its implementations have also been renamed.
    • BREAKING: IAsyncDiscriminationTreeNode methods modified to return ValueTasks instead of Tasks.
  • Some changes to VariableSubstitution:
    • Added MutableVariableSubstitution. Derives from VariableSubstitution and is modifiable in-place.
    • Added CopyAsMutable method to VariableSubstitution.
    • Added CopyAndAdd methods to VariableSubstitution.
    • BREAKING: renamed VariableSubstitution.Clone() to CopyAsReadOnly(). 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.
  • 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

06 Jul 15:04
Compare
Choose a tag to compare
6.0.0-pre.2 Pre-release
Pre-release

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 to IDiscriminationTreeNodeKey. Its implementations have also been renamed.
    • BREAKING: IAsyncDiscriminationTreeNode methods modified to return ValueTasks instead of Tasks.
  • Some changes to VariableSubstitution:
    • Added MutableVariableSubstitution. Derives from VariableSubstitution and is modifiable in-place.
    • Added CopyAsMutable method to VariableSubstitution.
    • Added CopyAndAdd methods to VariableSubstitution.
    • BREAKING: renamed VariableSubstitution.Clone() to CopyAsReadOnly(). 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.
  • 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

09 Jun 15:34
Compare
Choose a tag to compare
6.0.0-pre.1 Pre-release
Pre-release

New in this pre-release:

  • Some changes in the TermIndexing namespace:
    • BREAKING: IDiscriminationTreeElementInfo renamed to IDiscriminationTreeNodeKey. Its implementations have also been renamed.
    • BREAKING: IAsyncDiscriminationTreeNode methods modified to return ValueTasks instead of Tasks.
  • Some changes to VariableSubstitution:
    • Added MutableVariableSubstitution. Derives from VariableSubstitution and is modifiable in-place.
    • Added CopyAsMutable method to VariableSubstitution.
    • Added CopyAndAdd methods to VariableSubstitution.
    • BREAKING: renamed VariableSubstitution.Clone() to CopyAsReadOnly(). 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.
  • 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

08 Jun 11:40
Compare
Choose a tag to compare

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

26 May 10:33
Compare
Choose a tag to compare

Added some Unifier.TryCreate/Update overloads that do not use ref/out parameters.

5.3.0

21 Jan 15:35
Compare
Choose a tag to compare
  • Added AsyncPathTree<TValue> and AsyncPathTree to the TermIndexing namespace - to facilitate more efficient IO for node implementations that use it.
  • The value parameter of the TryGetExact 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

22 Dec 11:32
Compare
Choose a tag to compare
  • 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 to DiscriminationTree<T> and AsyncDiscriminationTree<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> and ITermTransformation<out TOut, in TState>.
  • A number of type and member documentation additions and improvements

5.1.0

12 Aug 10:55
Compare
Choose a tag to compare

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.