at_grammar_induction.git
3 years agoConfig changes; new corpus file; comments etc. disjunctions
stassa [Sat, 12 Sep 2015 21:24:01 +0000]
Config changes; new corpus file; comments etc.

3 years agoStable version; still WIP; looking good, rather.
stassa [Mon, 7 Sep 2015 07:55:15 +0000]
Stable version; still WIP; looking good, rather.
* Still left-recursive and I do get some fragments but generally I like
  it. I'll need some feedback obviously.

3 years agoGoing on with simplified version: makes nice handsim rules.
stassa [Mon, 7 Sep 2015 03:07:02 +0000]
Going on with simplified version: makes nice handsim rules.
* Not sure if it looks as nice with longer examples though. See notes from
  today.

3 years agoChanged checks for atomic/nonatomic augmentation tokens.
stassa [Sat, 5 Sep 2015 14:55:30 +0000]
Changed checks for atomic/nonatomic augmentation tokens.
* Previously used atomic(H) to decide whether a token passed to
  augmented_node_head_production/3 is a terminal or not but that misses
  cases like 'and/or' (as in "target ... and/or target ... "). Changed
  that to use \+ is_list(H). It's just a signal really. Oh btw alg was
  going infinite before it with the short-destroy dataset (because it had
  cases like this and failed forever). It's OK now.

3 years agoSquished bug with beheaded_node_corpus/2 binding empty examples to output.
stassa [Sat, 5 Sep 2015 14:44:56 +0000]
Squished bug with beheaded_node_corpus/2 binding empty examples to output.

3 years agoKeeping WIP version that works ish (only for small handsim corpus)
stassa [Fri, 4 Sep 2015 16:27:13 +0000]
Keeping WIP version that works ish (only for small handsim corpus)
* If you uncomment the longer stem-y example, it fails :/ Need to
  understand why but this is a simple version (including all the commented
  out clauses in derived_productions/5 that I need to work up from).
* Btw, added some stuff in loader module to load v.1 correctly though I
  noticed it gets weird results that mean the stable version is somewhere
  in the past- need to find and restore it probably.

3 years agoTweaks to deal with empty node-heads.
stassa [Thu, 3 Sep 2015 13:00:29 +0000]
Tweaks to deal with empty node-heads.
* Tweaks in beheaded_node_corpus/2 and node_heads/2.

3 years agoAnother WIP version.
stassa [Thu, 3 Sep 2015 12:55:25 +0000]
Another WIP version.
* Still branching incorrectly- the handsim "exile target creature" branch
  (the one with the single example) gets all fragmented unlike what I
  expected.

3 years agoSaving working but WIP version.
stassa [Thu, 3 Sep 2015 12:34:10 +0000]
Saving working but WIP version.
* Working in that a run goes all the way to producing rules, though not
  all the rules I expected.

3 years agoWorking on version 3.0; saving working v.1, v.2 for archiving itch.
stassa [Thu, 3 Sep 2015 11:27:17 +0000]
Working on version 3.0; saving working v.1, v.2 for archiving itch.
* Version 3.0 (unnumbered production_induction.pl source file) is a big
  WIP- currently working on production-composition rules and would like to
  keep a so-far copy handy.

3 years agoNot sure what I did here exactly.
stassa [Mon, 31 Aug 2015 17:56:19 +0000]
Not sure what I did here exactly.
* Seems I tweaked the logic around clauses of branch-composition rules in
  branch_productions/8 to add the branch-head production to the
  productions set in second clause (for leaf productions) and to behead an
  example in the third clause.
* Also the usual config changes and a longer example to see what happens
  with stem nodes; mostly, they make a long string of terminals, which I
  guess is OK.

3 years agoAdded some comments and stuff.
stassa [Tue, 25 Aug 2015 22:53:36 +0000]
Added some comments and stuff.

3 years agoSquished a bug; changed configs.
stassa [Tue, 25 Aug 2015 19:45:47 +0000]
Squished a bug; changed configs.
* Bug was around treatment of examples with a single token left. Note: not
  leaf nodes, which are corpora with a single single-token example left.
  Anyway, fixed by adding relevan clause to beheaded_example/2.

3 years agoMissed a spot last commit.
stassa [Tue, 25 Aug 2015 18:30:33 +0000]
Missed a spot last commit.

3 years agoAdded proper configs; also, printing to listener, file.
stassa [Tue, 25 Aug 2015 18:28:00 +0000]
Added proper configs; also, printing to listener, file.
* Language and example files are copy/pasta'ed from production_learning
  directory; I'll need to move them all to directories under the project
  root directory. Until then, leave other examples and languages in this
  directory uncommitted so as to minimise duplication eh.

3 years agoUnconfused branch head and body/leaf productions.
stassa [Mon, 24 Aug 2015 09:37:59 +0000]
Unconfused branch head and body/leaf productions.
* Will need some more logic to figure out at which point on a branch we
  are and create/augment rules accordingly.

3 years agoTrying to unsnaffu non utf-8 chars in source file.
stassa [Mon, 24 Aug 2015 09:36:13 +0000]
Trying to unsnaffu non utf-8 chars in source file.

3 years agoContinued with disjunctions experiments; actually, went off to v 3.0 now.
stassa [Mon, 24 Aug 2015 09:29:14 +0000]
Continued with disjunctions experiments; actually, went off to v 3.0 now.

3 years agoGot a firts draft of v 2.0 working; weird bug with lopsided branch.
stassa [Sun, 23 Aug 2015 20:24:11 +0000]
Got a firts draft of v 2.0 working; weird bug with lopsided branch.
* Well, not a bug as such- there's a node that should be expanding to a
  nonterminal but stays as a terminal. Uh oh.

3 years agoRenamed experiments directory to Experiments; duh.
stassa [Thu, 13 Aug 2015 21:41:33 +0000]
Renamed experiments directory to Experiments; duh.
* Also added experiment with disjunction augmentations.
* Plus some config changes.

3 years agoForgot this- it's a grammar made up of compressed examples.
stassa [Thu, 13 Aug 2015 19:28:49 +0000]
Forgot this- it's a grammar made up of compressed examples.
* Though it's a one-to-one mapping between an example and a rule it's
  actually useable. Just a bit meh.

3 years agoFixed couple of bugs; added test files and ran experiments.
stassa [Thu, 13 Aug 2015 19:21:47 +0000]
Fixed couple of bugs; added test files and ran experiments.
* Please refer to your notes for details on experiments. And don't ask me
  why.
* Why not?
* Don't ask me why not either.
* Fixed bug in given_productions/1; it was not actually finding given
  productions because it expected them to be asserted by
  assert_given_productions/0, which expected to get them from
  given_productions/1. Ha ha. No, not funny.
* After fixing this, the compression grammar started failing because
  nonterminal references appeared in the right-hand side of nonterminal//1
  clauses (inside the compression grammar file) as ordinary nonterminal
  references. They need to be wrapped in nonterminal//1 terms because they
  are not declared as DCG clauses in the compression grammar source file.
  Added compression_nonterminal/2 to deal with that. Might take a bit of
  renaming.

3 years agoAdded some debugging to scoring rules.
spatsant [Wed, 12 Aug 2015 18:13:18 +0000]
Added some debugging to scoring rules.

3 years agoMore WIP'ery: continuing with printing compressed corpus.
stassa.patsantzis [Wed, 12 Aug 2015 16:17:24 +0000]
More WIP'ery: continuing with printing compressed corpus.
* Printing compressed corpus OK and then learning on it, but I'm not
  getting the results I thought. There's still production fragments and I
  don't get the complete grammar I was expecting. Cause seems to be in
  scoring with strategy set to mode; when learning on the compressed
  corpus this should keep rules that fully explain a single example but it
  seems to be scoring some of them with 0.75, instead of 1. Which means
  they're dropped. That needs fixin'.
* Otherwise, it looks good. As in, it looks like a bloody old mess and I
  need to refactor the hell out of it.

3 years agoBig big hacky WIP. Printing compression grammar module.
stassa.patsantzis [Wed, 12 Aug 2015 14:31:57 +0000]
Big big hacky WIP. Printing compression grammar module.
* It being a bunch of DCG rules that parse a list of tokens to a rule
  name, so we get the compressed tokens in the output (bound to the first
  argument of compression_grammar/1).

3 years agoAdded corpus compression & compressed corpus printing.
stassa.patsantzis [Wed, 12 Aug 2015 12:32:37 +0000]
Added corpus compression & compressed corpus printing.
* This turned up a few bugs here and there, particularly in the way
  second order grammars are printed (best to use write_term/3 than
  format/3, to allow for predicate names that need quoting, particularly
  ones with escaped ''s). Fixed those where I found them.
* There's a pair of new config options in configuration module; that's in
  preparation to moving the directive calling register_world/2 out of this
  module and just leaving clear config options in there. Will probably
  have to move output_stream/1 and the new
  compressed_corpus_output_stream/1 also.
* Btw, compression is borked now- terminals are added to the compressed
  examples unbracketed, so when we try to parse we treat them as
  nonterminals and fail with errors. Will fix.

* Amending to add that I also added a bit to
  production_compressed_string/4 to make sure that we can tell fully
  unparsed strings apart from everything else.

3 years agoRefactored production_compressed_string/4.
stassa.patsantzis [Wed, 12 Aug 2015 10:48:54 +0000]
Refactored production_compressed_string/4.
* Removed third clause - the one that was specific to a single token being
  left in the uncompressed string. This doesn't seem to be necessary; the
  second clause will deal with it anyway. compressed_string/4 was now also
  redundant so that's gone also.

3 years agoAdded productions_compressed_strings/3 to duh.
stassa.patsantzis [Wed, 12 Aug 2015 10:48:23 +0000]
Added productions_compressed_strings/3 to duh.

3 years agoBig pile o' WIP, but printing out first & second order grammar pair.
stassa.patsantzis [Tue, 11 Aug 2015 16:41:25 +0000]
Big pile o' WIP, but printing out first & second order grammar pair.
* Added bunch of configuration options; config is now getting nicely
  overcomplicated and hard to read. Aaaw. It's just like web dev :D
* Added two clauses to print_grammar/3 for each of first and second order
  grammar files in the output. Second order one is rather a mess, due to
  the two big chunks of spaghetti used to print out first_order_phrase/3
  and second_order_phrase/2 (the phrase/[2,3] extentions for those
  grammars). These will need new predicates. In fact, the whole
  print_grammar/3 stuff should go to its own module. I guess.
* Och aye: there's still a bug in production_induction module, where it
  keeps terminal//0 terms from previous runs -and so prints them in the
  grammar output file. Need to fix that.

3 years agoSome notes on where to go next with the new print_grammar/4 clauses.
stassa.patsantzis [Mon, 10 Aug 2015 17:53:27 +0000]
Some notes on where to go next with the new print_grammar/4 clauses.

3 years agoExperimenting with a couple of higher-order grammar formalisms.
stassa.patsantzis [Mon, 10 Aug 2015 14:27:41 +0000]
Experimenting with a couple of higher-order grammar formalisms.
* Ala kai formalisms.

3 years agoAdded Create-DirectoryStructure script to duh; some housekeeping.
stassa.patsantzis [Mon, 10 Aug 2015 12:18:19 +0000]
Added Create-DirectoryStructure script to duh; some housekeeping.

3 years agoAdded a file search path pointing to learning_productions dir.
stassa [Sun, 9 Aug 2015 16:44:34 +0000]
Added a file search path pointing to learning_productions dir.

3 years agoStarted working on producing a second-order grammar.
stassa [Sun, 9 Aug 2015 16:42:14 +0000]
Started working on producing a second-order grammar.
* A.k.a. a grammar learned from a compressed corpus. Added a new clause to
  print_grammar/3, copy-pasta'ed from the current one that outputs a
  grammar; WIP and neds lotsa P. No, W.
* Also added configuration options to guide the production of that sort of
  higher-order grammar (maybe now it is a supergrammar?).
* Made an example corpus with strings replaced by production fragments;
  also a couple of examples of the kind of output file I want to produce
  along with predicates that use them to parse - and one version actually
  parses into bracketed trees, showing the structure of a phrase :D A
  trick that I may be able to exploit in different situations maybe.

3 years agoMoved some stuff around, renamed etc.
stassa [Sat, 8 Aug 2015 15:01:04 +0000]
Moved some stuff around, renamed etc.
* Mostly to bring supergrammar sub-project to the modern era like, but
  also to try and come up with a more sub-project aware naming scheme and
  all. At some point I'll have to unify the configuration files for
  example- or rather have one project-wide config file and any number of
  sub-project ones.

3 years agoSupergrammar source from supergrammar branch; will need updating.
stassa [Sat, 8 Aug 2015 13:48:05 +0000]
Supergrammar source from supergrammar branch; will need updating.

3 years agoMassive rename of stochastic_supergrammar stuff.
stassa [Sat, 8 Aug 2015 13:46:18 +0000]
Massive rename of stochastic_supergrammar stuff.
* Because it's not really learning a supergrammar any more and I'd now
  want to keep the supergrammar branch as a separate directory. So now
  stochastic_supergrammar directory is called learning_productions and
  stochastic_supergrammar module is called
  production_induction_ha_ha_see_what_I_did_there.

3 years agoSome housekeeping, mostly.
stassa.patsantzis [Fri, 7 Aug 2015 18:26:30 +0000]
Some housekeeping, mostly.

3 years agoAdded source_file_of/4 to get productions actually given in source files.
stassa.patsantzis [Fri, 7 Aug 2015 17:02:41 +0000]
Added source_file_of/4 to get productions actually given in source files.
* Also added new clause to given_productions/1 to use this to get those
  productions. It's not working yet.
* Also also added new query_database debug class
* Btw, found that I get errors if I declare nonterminals in a language
  module before running- will probably cause problems down the line.
  There's no complaints if they're declared as local to the module but
  then nonterminal//0 needs to be declared dynamic in that module and I
  reckon that is just a result of the whole thing behing totally messed up
  and that it's going to come back and bite me in the behind very soon.

3 years agoRefined logging of prune-corpus step.
stassa.patsantzis [Fri, 7 Aug 2015 16:52:02 +0000]
Refined logging of prune-corpus step.

3 years agoRefined retracting of derived & given productions; also, housekeeping.
stassa.patsantzis [Fri, 7 Aug 2015 16:37:01 +0000]
Refined retracting of derived & given productions; also, housekeeping.
* Given and derived productions are now removed one-by-one using retract/1
  inside a forall/2 loop, rather than retractall/2. That's to allow more
  fine-grained logging, particularly to get the names of rules and
  productions actually retracted.
* Also added some comments and so on.

3 years agoMoved highlight patterns around to try and match order of appearance.
stassa.patsantzis [Fri, 7 Aug 2015 16:29:21 +0000]
Moved highlight patterns around to try and match order of appearance.

3 years agoAdded new scoring production: mean.
stassa [Thu, 6 Aug 2015 19:00:21 +0000]
Added new scoring production: mean.
* All these scoring predicates are hopelessly slow and inefficient and
  need a lot of refactoring.

3 years agoAdded config logging and clarified names of scoring strategies.
stassa [Thu, 6 Aug 2015 18:51:37 +0000]
Added config logging and clarified names of scoring strategies.

3 years agoHouskeeping
stassa [Thu, 6 Aug 2015 17:03:14 +0000]
Houskeeping
* Moved debug/2 call to production_score/3 from business end clauses.

3 years agoChanged temp production name to p (from ypsilon) which makes more sense.
stassa [Thu, 6 Aug 2015 16:20:11 +0000]
Changed temp production name to p (from ypsilon) which makes more sense.

3 years agoFixed bug with logging of best_scored_production/3.
stassa [Thu, 6 Aug 2015 15:52:05 +0000]
Fixed bug with logging of best_scored_production/3.
* This was just a bit of bracketfuck, this time involving the ()'s around
  the score part of a production. As part of fixing that I moved the
  debug/3 call to best_scored_production/3 where it belongs.
* However, this turned up some missing tests around augmented_production/3
  that I will have to write. Made a note about that.
* Also added some more logging highlight rules since I got more logging
  now.

3 years agoCorrected comment in pruned_corpus/3
stassa.patsantzis [Tue, 4 Aug 2015 17:43:13 +0000]
Corrected comment in pruned_corpus/3

3 years agoSome more example files, all based on destroy effects.
stassa [Sun, 2 Aug 2015 15:59:19 +0000]
Some more example files, all based on destroy effects.

3 years agoAdded option to control retract_given_productions behaviour.
stassa [Sun, 2 Aug 2015 15:57:12 +0000]
Added option to control retract_given_productions behaviour.
* Basically a dogfooding switch: if true, productions (and their Prolog
  forms) learned in previous runs are not cleared from the database and
  subsequent runs identify them as given productions. Else etc.

3 years agoAdded two new production scoring strategies and assorted configs.
stassa [Sun, 2 Aug 2015 15:36:10 +0000]
Added two new production scoring strategies and assorted configs.
* We can now choose the strategy to use to score productions as a
  configuration option. Hurray.
* Also slight change to basic vim log highlight script.

3 years agoFixed bug in tokenizer; added prolog output clause; made tokeniser script.
stassa [Sun, 2 Aug 2015 10:55:44 +0000]
Fixed bug in tokenizer; added prolog output clause; made tokeniser script.
* Bug from confusing the order of arguments in a call to readln module
  predicates; was passing stop chars-list as word-chars and that's why
  neither type of character set worked as I expected it. Word-chars still
  don't work as expected. I really need to take a knife to that old
  module.
* Also added clause to write_tokenized/3 to print out readable Prolog.
* Examples tokenised using the new clause still need to be what-I-call
  post-processed, so there's a new script, cleanup_examples.vim to do
  that. Well OK- but longer term I'll need to fix that damn tokeniser.
* Also placed this and moved previous vim scripts to their own directory.

* Amended to include deletion/renaming of scripts.

3 years agoMade new highlight script for when I forget colours csv at work :P
stassa [Sat, 1 Aug 2015 13:07:22 +0000]
Made new highlight script for when I forget colours csv at work :P
* This uses the basic colours csv in the script page, so should be
  "portable", like.

3 years agodded new_terminals/1, listing_grammar_knowledge/0; more logging.
stassa.patsantzis [Fri, 31 Jul 2015 18:55:25 +0000]
dded new_terminals/1, listing_grammar_knowledge/0; more logging.
* new_terminal/1 adds new tokens from an example to the set of terminals,
  which is something I stupidly missed despite all my design and
  simulation.
* listing_grammar_knowledge/0 lists the terms we've written to the
  database, since the last run, or loading the language module, basically.
* Also moved out database cleanups from at-make directives to
  initialisation/1 and changed retract_derived_productions/0 to only
  retract clauses of derived_productions/0 (and leave rules and references
  untouched). This last bit is a big WIP- I need to figure out how to do
  the dogfooding stuff correctly. I fervently hope the WIPiness is not
  going to mess everything up.

3 years agoMoved initialisation/0 before complete_grammar/0
stassa.patsantzis [Fri, 31 Jul 2015 17:35:47 +0000]
Moved initialisation/0 before complete_grammar/0
* Because I keep losing it.

3 years agoIncreased logging. MOAR LOGGGING!!!!
stassa.patsantzis [Fri, 31 Jul 2015 17:34:08 +0000]
Increased logging. MOAR LOGGGING!!!!

3 years agoMissed a bit.
stassa.patsantzis [Tue, 28 Jul 2015 16:28:09 +0000]
Missed a bit.

3 years agoMade it so language modules can declare their own start symbols.
stassa.patsantzis [Tue, 28 Jul 2015 16:02:25 +0000]
Made it so language modules can declare their own start symbols.
* This is typical convoluted OOP-likeness. Basically, the "root" language
  module declares start//0 that points to start_symbol//0, which is
  declared module transparent. "Inheriting" language modules (ie modules
  that add the module language to their import list using
  add_import_module/3) can declare start_symbol//0 locally, which will
  then  "override" the start symbol in the root language module by being
  called in the context of the inheriting module. Like I say, a bit
  convoluted.
* Important thing is that now you can have start//0 declared in the root
  language module and only have start_symbol//0 in the "child" modules.
* Note that the output module doesn't actually declare this
  start_symbol//0. Dear lord but it is a mess. The alternative was a
  warning that start//0 was overriden as a weak import. Maybe I should
  have just stopped the warning?
* Anyway it's like that now.

3 years agoCorrected the format of the output grammar file.
stassa.patsantzis [Tue, 28 Jul 2015 15:09:40 +0000]
Corrected the format of the output grammar file.
* In short, terminal//0 tokens need to be double-bracketed and
  nonterminal//0 tokens need to be single-bracketed, because we don't want
  to use those for parsing; they're just a grammar erm, specification.
  Baxically it's the remnants of the supergrammar idea/logic. But don't
  let that deter you.
* The other stuff needs to be connected to the start symbol directly, ie
  without non/terminals//0. That's actually the easiest way to parse and
  generate sentences using the grammar, even though a) they'll be all
  fragmented at first (until I can make dogfooding work) and b) there's
  going to be too many of them at first (again, until dogfooding works).
* Also made the choice to keep pre-terminals as separate productions
  (despite the fact that terminals are already in the terminal//0 set)
  because um, well, at this point it's easier to do that and also because
  I hope I'll be able to capture actual generalisations in that way.
* Ah crap. See notes from today.
* Next thing to do: need to decide the interface of language module etc.

3 years agoPrinting to self-contained module file; still not dogfooding. super_language
stassa.patsantzis [Mon, 27 Jul 2015 17:58:08 +0000]
Printing to self-contained module file; still not dogfooding.

3 years agoMerge branch 'master' into super_language
stassa.patsantzis [Mon, 27 Jul 2015 15:02:05 +0000]
Merge branch 'master' into super_language

Conflicts:
supergrammar/stochastic_supergrammar.pl

3 years agoFixed bug with retract_derived_productions/0.
stassa.patsantzis [Mon, 27 Jul 2015 14:49:52 +0000]
Fixed bug with retract_derived_productions/0.
* After not adding a score to rules to assert as derived_production/2
  clauses, I could not more find those clauses in
  retract_derived_productions/0 using a scored rule pattern:
  derived_production(N, (N, _S --> Ts)),
* Fixed that.

3 years agoNew branch to work on language super-module.
stassa.patsantzis [Mon, 27 Jul 2015 14:29:57 +0000]
New branch to work on language super-module.
* The idea is to allow each language module to inherit from that
  super-language module, so that I don't have to duplicate all the
  terminal//0, nonterminal//0 etc stuff in each and every language module.
* The tiny little problem is that because, eg. nonterminal//0 is declared
  in language module and each rule for a nonterminal connected to
  nonterminal//0 is asserted in each specific language module, it's a bit
  of a web-developy mess that gest hard to clear at the start of each
  run. So I might yet drop the whole scheme.

3 years agoNew super-language module to act as root of language modules hierarchy.
stassa.patsantzis [Mon, 27 Jul 2015 13:15:08 +0000]
New super-language module to act as root of language modules hierarchy.
* Amending to point out that this will go infinite:
  ?- phrase(language:start_symbol, [a]).

* And that's because specifying a DCG epsilon --> [] makes a Prolog rule:
  epsilon(A, A).

* Which, invevitably, binds to everything recursively for ever. But that
  shouldn't be a problem because as soon as you add any terminals or
  nonterminals, there should be somthing to fail binding against.

* A mending again because I stupidly commited everything with 'commit'
  when I only wanted to keep the language module. Anyway the rest is OK,
  but there's a stub in stochastic_supergrammar module that has some free
  variables and raises a warning.

3 years agoFirst attempt at lexicalised productions; ends in ignominy :D
stassa [Sun, 26 Jul 2015 13:51:45 +0000]
First attempt at lexicalised productions; ends in ignominy :D
* Keeping simple language file and reference in configuration.
* Also see notes from today, under lexicalised_productions

3 years agoImplemented production name optimisation.
stassa.patsantzis [Fri, 24 Jul 2015 17:26:58 +0000]
Implemented production name optimisation.
* Rules now get a configurable dummy name in empty_production/1, then when
  we know a rule is a keep, it gets a name that's a concatenation of all
  its constituents. That's a lot faster than using rule_name/1 to make
  sure we get a unique name. The uniqueness of the name is (or should be)
  guaranteed by the algorithm.

3 years agoTweaked empty examples optimisation; removed redundand main loop clause.
stassa.patsantzis [Fri, 24 Jul 2015 15:17:19 +0000]
Tweaked empty examples optimisation; removed redundand main loop clause.
* It's quicker to drop empty examples when pruning the corpus (the
  earliest point at whicn we know an example is empty) than having to go
  through all examples and drop empty ones in the main loop. So did that.
* It turns out that after doing that, the last clause in the main loop is
  not accessed anymore. This was only called when an empty example
  resulted in an empty augset that in turn resulted in a derived
  production bound to the atom ypsilon, which updated_grammar/3 can't deal
  with. I think I just added that clause when I was a bit confused about
  whether the main loop would terminate if I kept re-visiting the same
  example until it was empty; basically I wasn't sure if I would
  eventually end up with an empty example in every case.
* Well anyway, it's gone now. I don't think...
* Yeah, no, don't say that.
* Also did some minor houskeeping, added comments, stuff.

3 years agoImplemented optimisation (dropping empty examples); updated logging.
stassa.patsantzis [Fri, 24 Jul 2015 14:09:18 +0000]
Implemented optimisation (dropping empty examples); updated logging.

3 years agoFixed bracketfuck causing exit with failure; added more logging.
stassa.patsantzis [Fri, 24 Jul 2015 13:21:53 +0000]
Fixed bracketfuck causing exit with failure; added more logging.
* Bracketfuck in updated_grammar/3 caused the algorithm to exit once it
  derived a production with no terminals in the right hand side. That's
  part of the continued pain in unbracketing terminals etc. Will need to
  think about this carefully.
* Also added more log colours :D And debug directives of course.

3 years agoCut nondeterminism; fixed db cleaing at make; refactored logging.
stassa.patsantzis [Fri, 24 Jul 2015 12:21:05 +0000]
Cut nondeterminism; fixed db cleaing at make; refactored logging.
* Adding appropriate cuts stopped the algorithm going infinite, so now it
  just fails when it can't derive any new rules. That's OK, or at least
  it's better than going infinite, but I still need to understand under
  what conditions it fails to learn new rules and what to do with it.
* Make cleaning: previously, I was cleaning up and then re-assserting
  given productions, collecting derivations of nonterminal//0 to find the
  given productions. The problem with that is that in each new run I'm
  connecting _derived_ productions to nonterminal//0, as I should- but
  then, I wasn't clearing those before collecting given productions. In
  short, given and derived productions got mixed up. So that's fixed now
  but I should probbly think about not calling the cleanup predicates on
  make- rather, leave it up to initialisation to cleanup.
* Btw, just to put dogfooding here so I can find it when grepping, the
  make snaffu effectively ended up implementing dogfooding to some extent
  so it's not all bad, it seems to work to some extent.
* Logging: It seems, if I want to have logging both echoed to the listener
  and written to a file I need two directives per debug subject, one for
  each target stream. Maybe it can work with more even.
* Ah- also removed a clause that was not according to design in
  complete_grammar/4 (the one that declares a boundary condition when the
  current example is empty).

3 years agoFixed mistake in implementation of augmentation set; vim log script.
stassa [Thu, 23 Jul 2015 23:13:09 +0000]
Fixed mistake in implementation of augmentation set; vim log script.
* That was a mistake relative to the algorithm design: I was sorting the
  augmentation set, so I was losing the ability to generate rules to cover
  at least specific examples.
* Also added a vim script to help highlight debug logs.
* Also config swaps.

3 years agoBORKEN: goes infinite, don't know why; WIP.
stassa [Tue, 21 Jul 2015 22:05:55 +0000]
BORKEN: goes infinite, don't know why; WIP.
* Got some ideas, see notes from today.

3 years agoSome cleanups of unused dynamic preds; note we're now going infinite.
stassa [Tue, 21 Jul 2015 21:30:37 +0000]
Some cleanups of unused dynamic preds; note we're now going infinite.

3 years agoFixing scored_production/3, best_scored_production/3. Hit 100 tests :D
stassa [Tue, 21 Jul 2015 21:22:53 +0000]
Fixing scored_production/3, best_scored_production/3. Hit 100 tests :D

3 years agoWIP- trying to squish that bug with the duplicate rule names.
stassa.patsantzis [Tue, 21 Jul 2015 17:17:51 +0000]
WIP- trying to squish that bug with the duplicate rule names.
* Clarified production_structure/3 and added tests.
* Added some comments etc.

3 years agoConnected nonterminal//0 to newly derived productions.
stassa.patsantzis [Tue, 21 Jul 2015 15:16:23 +0000]
Connected nonterminal//0 to newly derived productions.
* Also some cleanups.
* And also started with clearing up the use of -->/2 - which should now
  only be used and only make any difference during scoring, since I
  decided it's not much use as a probability score. I'll have to calculate
  those separately- then I can add them back.

3 years agoHousekeeping.
stassa.patsantzis [Tue, 21 Jul 2015 14:04:40 +0000]
Housekeeping.

3 years agoHousekeeping and output printing.
stassa.patsantzis [Tue, 21 Jul 2015 13:44:30 +0000]
Housekeeping and output printing.
* Added some configuraiton options to control the printing of terms and to
  get the extensions of files etc from configs.
* Also moved stuff around the config module a bit.
* Also refactored print_grammar/3 and helpers and so on.

3 years agoRefactored to get the name of output file fro configuration.
stassa.patsantzis [Tue, 21 Jul 2015 12:40:19 +0000]
Refactored to get the name of output file fro configuration.

3 years agoMoved outputs to own directory
stassa.patsantzis [Tue, 21 Jul 2015 12:30:02 +0000]
Moved outputs to own directory

3 years agoFixed what I thought was a bug in erasing nonterminal//0 clauses.
stassa.patsantzis [Tue, 21 Jul 2015 12:12:34 +0000]
Fixed what I thought was a bug in erasing nonterminal//0 clauses.

3 years agoMore housekeeping; more like spring cleaning.
stassa.patsantzis [Tue, 21 Jul 2015 11:10:01 +0000]
More housekeeping; more like spring cleaning.
* Moved examples and language files to own directory.
* Added file search path for that directory and also for example files
  (which can possibly be read directly from text at some point).
* Sorted out file search paths in configuration module.
* Added directives to edit the currently configured examples and language
  files. That's so cool ^_^

3 years agoHouskeeping modules' export lists etc.
stassa.patsantzis [Tue, 21 Jul 2015 10:31:22 +0000]
Houskeeping modules' export lists etc.

3 years agoAdd logging; output to file; relevant configse & load directives.
stassa.patsantzis [Mon, 20 Jul 2015 18:04:11 +0000]
Add logging; output to file; relevant configse & load directives.

3 years agoAdded all "destroy" effects to experiment with something meatier.
stassa.patsantzis [Mon, 20 Jul 2015 16:48:38 +0000]
Added all "destroy" effects to experiment with something meatier.
* Tried it already- it does produce nonterminal//0 clauses but it goes on
  for a bit and I can't tell what it's doing. Need to add some debugging.

3 years agoCleared first level :D (current version matches hand simulation).
stassa.patsantzis [Mon, 20 Jul 2015 16:46:31 +0000]
Cleared first level :D (current version matches hand simulation).
* In fact the current version does a little better than the handsim
  probably because of a more favourably ordering thanks to the use of
  ordered sets in augmentation_set/3 rather than simple appens.
* But, hey. Works. It's better than the previous one. So far, so nice.

3 years agoFleshed out adding and clearing of new productions to the database.
stassa.patsantzis [Mon, 20 Jul 2015 14:58:47 +0000]
Fleshed out adding and clearing of new productions to the database.
* Quite a few catches in this and also a little squishy bug in Swi, from
  what I can tell (around clause/3 and having to do with the ordering of
  clauses in the database).
* Alo, because of this probably-bug I had to use asserta/1 instead of
  assert/1 in update_grammar/2 (but then that's OK- assert/1 is
  deprecated).
* In any case, read inline notes and [PROLOG] notes in project notes file
  for today.

3 years agoRefactored grammar_nonterminals/productions; fixed a test.
stassa.patsantzis [Mon, 20 Jul 2015 11:46:49 +0000]
Refactored grammar_nonterminals/productions; fixed a test.
* Test was breaking after the changes to production naming (because of the
  call to empty_production/1 in augmented_production/3).
* grammar_nonterminals etc predicates also need to be able to get derived
  nonterminals and productions. I'm a bit worried that this is the case- I
  thought those three grammar_* predicates were only called by grammar/4
  and that this was only called once at the start of the main loop? Need
  to verify.

3 years agoFixed bug with rule naming; started writing derived productions to db.
stassa.patsantzis [Mon, 20 Jul 2015 09:46:22 +0000]
Fixed bug with rule naming; started writing derived productions to db.
* I'm getting a sense of deja vu. Again.

3 years agoRemoved background rules from simple language.
stassa [Sun, 19 Jul 2015 18:13:10 +0000]
Removed background rules from simple language.
* 'Cause I want to see how it does without any.

3 years agoHacky fix ish of snaffu around use of Score.
stassa [Sun, 19 Jul 2015 18:08:35 +0000]
Hacky fix ish of snaffu around use of Score.
* Basically, I tried to avoid using Score to create rules from productions
  with dcg_translate_rule/2 when possible but this of course messes things
  up because it creates ambiguity that has to be micromanaged and yeah,
  hacky. Anyway, works but is rickety.
* By "works" I mean it runs- the results are not what I wanted. Needs
  refactoring then.
* Btw, an important change is that complete_grammar/4 now takes corpus
  pruning into account, using the pruned corpus in each iteration (rather
  than the unpruned one as before). In earlier versions, doing this caused
  it to go infinite, but now it's not. Need to figure out why :)

3 years agoCleaned language & examples modules for hand-simulation mtg example.
stassa [Sun, 19 Jul 2015 17:22:22 +0000]
Cleaned language & examples modules for hand-simulation mtg example.

3 years agoFixed ish little issue with empty nonterminals in examples.
stassa [Sun, 19 Jul 2015 17:18:46 +0000]
Fixed ish little issue with empty nonterminals in examples.
* Just a case of bracketfuck; attempting to un-bracket a nonterminal in
  a call to phrase/2, as in phrase(nonterminal, [N]) will fail if there
  are no known nonterminals. So we need to work around that. Basically, I
  should add special interface predicates to get nonterminals etc, but not
  now.
* Also refactored some examples etc, but those are for the next commit.

3 years agoStarted with actual that_algorithm iteration.
stassa [Sun, 19 Jul 2015 16:26:41 +0000]
Started with actual that_algorithm iteration.
* Added some new predicates and refactored existing ones along the way.
* Added production_structure/4 to separate a production into its Name,
  Score and Body terms, which I can do with uneev also, but this also
  deals with productions with and without a Score gracefully. But maybe it
  just masks the confusion, so I should possibly just rethink that.
* Added best_scored_production/4 (new version thereof).
* Cleared up comments, changed names and so on housekeeping stuff.

3 years agoUpdated production scoring to use temp parsing; cleaned up.
stassa [Sun, 19 Jul 2015 11:41:32 +0000]
Updated production scoring to use temp parsing; cleaned up.

3 years agoFleshed out corpus pruning; some faffing about with backtracking and cuts.
stassa [Sun, 19 Jul 2015 11:08:23 +0000]
Fleshed out corpus pruning; some faffing about with backtracking and cuts.

3 years agoStarted with corpus pruning; also, some cleanups and so on.
stassa [Sat, 18 Jul 2015 16:55:07 +0000]
Started with corpus pruning; also, some cleanups and so on.

3 years agoRefactored symbols//2 and grammar/ grammar update predicates.
stassa [Sat, 18 Jul 2015 10:09:36 +0000]
Refactored symbols//2 and grammar/ grammar update predicates.
* symbols//2 was dumbly made to bind a free variable in its second
  argument- fixed it. Just realised I don't need two separate clauses for
  the end of the recusion there: symbols(_, []) --> []. will do. Maybe do
  that?
* In any case, now I can refactor calls to diff_list/3 where I make use of
  the second argument of symbols//2 so I went some way towards doing that.
* Also re-introduced the non-diff list version of updated_grammar/3, after
  figuring out the diff-listing adds unnecessary expenses particularly
  since I want to order the elements of the various sets anyway and
  appending with an ord_union/3 call is apparently cheaper than an
  append/3. I tried some time/1'd calls and I can see that, indeed, all
  the diff-listing takes a toll, so that it doesn't make any sense to do
  it just to do a diff_append/3- it ends up being much more expensive
  overall. I'll need to refactor other places where I'm doing the same
  pointless thing probably.
* Also refactored grammar/3 to sort the set of Productions using setof/3
  instead of findall/3. Why? Why not? Well, mostly because I needed to add
  an existential qualifier (^/2) to the find-all operation else I just
  backtracked for more - so even if I don't use setof/3 I'll need to use
  bagof/3 (since findall/3 doesn't accept ^/2 and it does backtrack). I
  don't reckon the sorting is that expensive though.
* I'll need to do more refactoring to fix symbols//2 fallout and also add
  some tests for updated_grammar(_s)/3. Laters.

3 years agoRemoved some WIP stuff.
stassa.patsantzis [Fri, 17 Jul 2015 18:51:29 +0000]
Removed some WIP stuff.

3 years agoPossibly fixed updated_grammar/3; added grammar_s/4
stassa.patsantzis [Fri, 17 Jul 2015 18:48:29 +0000]
Possibly fixed updated_grammar/3; added grammar_s/4
* grammar_s/4 is an ordered-set and difference-list version of grammar/4,
  for easy appending. I'm sure it makes sense to keep calling diff_list/3
  at O(N) cost to do diff_append/3's at O(1) cost.
* Oh, absolutely.
* Yeah, need to see about all that...