at_grammar_induction.git
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...

3 years agoFixed (mostly) a_production/3; broke updated_grammar/3
stassa.patsantzis [Fri, 17 Jul 2015 17:56:56 +0000]
Fixed (mostly) a_production/3; broke updated_grammar/3
* a_production/3 is now production_constituents/5; updated_grammar/3 is
  now borked/0.

3 years agoFleshed out asserting of given productions to database.
stassa.patsantzis [Fri, 17 Jul 2015 16:46:38 +0000]
Fleshed out asserting of given productions to database.

3 years agoReconfigured configuration. Er. NPI.
stassa.patsantzis [Fri, 17 Jul 2015 15:45:01 +0000]
Reconfigured configuration. Er. NPI.
* There's now two configuration modules, one called load_configuration and
  one called configuration.
* load_configuration declares the predicates needed to manage the
  reexporting of predicates from language and examples modules into
  stochastic_supergrammar (the target module).
* configuration only declares any configuration predicates needed by
  the target module (eg, rule_complexity/1 and initial_score/1) and then
  calls register_world/3 from load_configuration to reexport the language
  and examples modules predicates needed by the latter.
* In order for configuration module to be able to access register_world/3,
  load_configuration module is used in load_supergrammar module, which
  adds its exported predicates to the global module user.
* Finally, for the circle to close, stochastic_supergrammar module uses
  configuration module, thus importing the predicates the latter reexports
  from the congifgured language and examples module.
* Note that for the target module to make use of the predicates exported
  from the configured examples and language modules, it has to refer to
  them via configuration module, eg:
    configuration:examples_string(S)
* It can also refer to them using the specific module name but that would
  make all this rather pointless, no?

Rationale for these nice little changes
---------------------------------------
* Did you notice it took five bleeping paragraphs to explain them?
* This will look very familiar if you've done any web development. It has
  exactly the same potential for hours of staring at closely coupled code
  that purports to do exactly the opposite than what it does, ie decouple
  itself to make your life easier. To clarify, what it does is make your
  life hell.
* Anyway the idea was to separate the actual configuration from the
  machinery that makes it possible. load_configuration module kept growing
  and the directive call to register_world/3 was pushed further and
  further down, so it got a bit difficult to see what exactly was being
  done. At least the way it works now you don't have to look into
  load_configuration to see what's configured.
* Anyway, I _know_ I'm going to be staring at this long and hard and
  scratching my head very, very confused in years to come, so I've added
  this bit here and also a note in mtg_cnl_grammar_induction_notes.txt.
* And if nothing else works, I can only say this: enjoy.

3 years agoStill fiddling around with given_production/2 etc.
stassa.patsantzis [Fri, 17 Jul 2015 12:14:59 +0000]
Still fiddling around with given_production/2 etc.

3 years agoPicked at prolog_dcg/2; failed ignominuously to generalise well.
stassa.patsantzis [Fri, 17 Jul 2015 11:27:24 +0000]
Picked at prolog_dcg/2; failed ignominuously to generalise well.
* Also picked at assert_given_productions/0 and noticed how it only
  manages rules with arity 0 (because it gets them from nonterminal//0).
  That won't do very well. Oh and btw that's all because of how
  prolog_dcg/2 only deals with rules that have arity 0. I seriously need
  to rework that.
* Also added some start//0 terms to some language modules and reexported
  from configuration module and so on.

3 years agoFixing (completing) prolog_dcg/2; big, big WIP.
stassa [Thu, 16 Jul 2015 23:12:18 +0000]
Fixing (completing) prolog_dcg/2; big, big WIP.
* Complete with inline TODOs and undocumented predicates, hurray! :D

3 years agoMoved prolog_dcg/2 to utilities module; moved examples modules around.
stassa [Thu, 16 Jul 2015 15:36:29 +0000]
Moved prolog_dcg/2 to utilities module; moved examples modules around.
* Specifically, examples modules are now split in two, as examples_simple
  showed, with examples and background productions in different modules.
  The idea is that this might allow for the same examples to be used by
  different grammars and also facilititilateate keeping track of given and
  derived productions using dynamic terms.

3 years agoAdded some comments to prolog_dcg/2.
stassa [Tue, 14 Jul 2015 19:57:58 +0000]
Added some comments to prolog_dcg/2.
* Also, forgot to mention: last time I added some dummy predicates to
  stochastic_supergrammar module to silence missing predicate warnings.
  I'll have to implement them at some point. Or drop their calls -they're
  in the remnants of the original (un-strict) implementatoin of
  that_algorithm, around the current version of generate_and_test/0. So
  they'll probably go yeah.

3 years agoMostly completed prolog_dcg/2 and added tests.
stassa [Tue, 14 Jul 2015 19:47:05 +0000]
Mostly completed prolog_dcg/2 and added tests.
* Should cover at least non-corner cases and mostly not break on ordinary
  dcg rules. For a while anyway.

3 years agoFleshed out prolog_dcg/2; now thinking about flexibilising.
stassa [Tue, 14 Jul 2015 12:09:50 +0000]
Fleshed out prolog_dcg/2; now thinking about flexibilising.
* Make it flexible by allowing it to deal with productions that don't
  adhere to the nonterminals - then - terminals restriction.

3 years agoBig overhaul of examples modules and configuration; very, very WIP.
spatsant [Tue, 14 Jul 2015 11:12:01 +0000]
Big overhaul of examples modules and configuration; very, very WIP.

3 years agoBranched supergrammar out of this branch; keeping stochastic stuff.
spatsant [Mon, 13 Jul 2015 15:04:16 +0000]
Branched supergrammar out of this branch; keeping stochastic stuff.
* Also in the process of establishing a better concept of what is a
  language, productions, examples etc, mainly by putting stuff in separate
  modules.

3 years agoSome WIP as the thumb is healing (cure iatrogenic wounds, lvl 1)
stassa [Sun, 12 Jul 2015 19:07:55 +0000]
Some WIP as the thumb is healing (cure iatrogenic wounds, lvl 1)
* Added a start//0 rule to some examples (simple, hand-simulation) to
  model the grammar start symbol. I should reexport this in configuration
  module, making it an error for example modules not to declare it.
* Started implementing a more strict version of that_algorithm. Various
  bits of it in stochastic_supergrammar module: production_score/2
  (reworked), updated_grammar/3, grammar/4, updated_augmentation/2, stuff.
* Also started reworking the adding/clearing of grammar rules to the
  database and adding/clearing terms that keep track of given/ derived
  productions. Still a bit of a pain, much more than it should (oh,
  Prolog...)
* Added all_slices_of/2 and helpers to utilities module, to support
  that_other_algorithm.

3 years agoNew, simple mtg example for that algorithm
stassa [Thu, 2 Jul 2015 20:44:14 +0000]
New, simple mtg example for that algorithm
* This is basically the hand-simulation example from my notes in the hopes
  it will make it easier to figure out what is going on (since I know what
  the results of steps should be) (well ish but).

3 years agoCaught and squished bug in augmented_production/3; added tests.
stassa [Thu, 2 Jul 2015 20:14:44 +0000]
Caught and squished bug in augmented_production/3; added tests.
* There was no test for the case of tt+ --> n | t, so there was no
  augmented_production/3 clause to account for this. The result was that
  an empty variable (for a nonterminal) was added before the terminals
  list. This caused trouble in production_score/2, not to mention that
  it's an illegal augmentation, violating clause"n* t+ --> t".

3 years agoWorking on the main generate_and_test/3 loop; still a WIP
spatsant [Thu, 2 Jul 2015 08:46:37 +0000]
Working on the main generate_and_test/3 loop; still a WIP

3 years agoStarted working on main generate_and_test/0 loop.
spatsant [Tue, 30 Jun 2015 17:41:58 +0000]
Started working on main generate_and_test/0 loop.
* Switched examples to examples_mtg, because it's a bit hard to judge the
  output of the abc language actually? Anyway this is still WIP and will
  need some doing.
* Note I changed derived_production/2 to have it call phrase/3 rather than
  phrase/2 so that it can match rules with a Score variable in a pushback
  list.

3 years agoStarted on the main generate-and-test cycle loop.
stassa [Mon, 29 Jun 2015 21:33:28 +0000]
Started on the main generate-and-test cycle loop.

3 years agoRefactored augmented_production/5 (reordered arguments).
spatsant [Mon, 29 Jun 2015 17:08:12 +0000]
Refactored augmented_production/5 (reordered arguments).

3 years agoPut tests in own file; generated about twice as many as before :D
spatsant [Mon, 29 Jun 2015 17:04:35 +0000]
Put tests in own file; generated about twice as many as before :D
* Removed a redundant clause of augmented_production/5 flagged up by tests
  showing nondeterminism. Power of TDD innit.

3 years agoMade more augmented_production/3 tests pass.
spatsant [Mon, 29 Jun 2015 16:00:34 +0000]
Made more augmented_production/3 tests pass.
* Only tests for verification/ ancestry are left now and I guess those
  will not be easy to implement for most cases but the empty production.

3 years agoRefactored (to simplify) tree_list/2.
spatsant [Mon, 29 Jun 2015 13:38:14 +0000]
Refactored (to simplify) tree_list/2.

3 years agoAdded TODO note to remind myself to do some refactoring.
stassa [Sun, 28 Jun 2015 20:50:25 +0000]
Added TODO note to remind myself to do some refactoring.
* That's in augment_production/3, always.

3 years agoPassed last legal augmentation test; added a rule.
stassa [Sun, 28 Jun 2015 20:47:59 +0000]
Passed last legal augmentation test; added a rule.
* All in augment_production/3. I'll stop here now and continue tomorrow.

3 years agoWoudl you believe I'm still fiddling with stochastic_supergrammar?
stassa [Sun, 28 Jun 2015 20:28:37 +0000]
Woudl you believe I'm still fiddling with stochastic_supergrammar?
* But I cleaned up the logic quite a bit: current productions are now
  passed as terms DCG notation, eg: (a0,[-1] -->g1,g2,[a,b,c]) - and new
  productions are also bound to the output in the same format. Predicates
  further down the pipeline can make sure to call dcg_translate_rule/2 and
  assert the new term. This will probably speed things up also, since I
  avoid calling dcg_translate_rule/2 everytime I augment a production. It
  also saves me a lot of trouble from trying to pick apart and put
  together new rules.
* Also added bunch of tests. Er. Some are actually failing (particularly
  the ones that test for adding terminals to rules without any
  nonterminals.
* Some tests are blocked: those that must fail when a violation of the
  production augmentation logic is caught. Well they are blocked because
  currently nothing tries to catch that sort of thing :D
* Also added tree_list/2 to convert the other way 'round than list_tree/2.
* Also also tried to add a new diff_list/3 predicate to do the thing by
  hand, but it turns out the dcg compiler is faster by a bit (but it could
  be plenty). Whoodathunk it? I need to understand how it works innit.

3 years agoAdded a couple more test cases for augmented_production/3
stassa [Sun, 28 Jun 2015 10:21:37 +0000]
Added a couple more test cases for augmented_production/3
* These are still not totally secure: because I use pushback lists to
  store probabilities ish, it's possible to push just about anything to
  the right side of a rule. Which makes it possible to partially match
  rules (as produced from dcg_translate_rule/2) that aren't quite what I
  meant the augmented production to be. So some nuance is lost there that
  might come back and bite me in the bahoogies at some point.

3 years agoI think I got augmented_production/6 (now) down pat; with tests.
stassa [Sat, 27 Jun 2015 23:32:31 +0000]
I think I got augmented_production/6 (now) down pat; with tests.
* See notes from today. I was doing it wrong (or much more complicated
  than it needed to be anyway).

3 years agoRefactoring augmented_production/3; cleaned up a bit; still a WIP.
stassa [Sat, 27 Jun 2015 12:52:14 +0000]
Refactoring augmented_production/3; cleaned up a bit; still a WIP.

* Also refactored empty_production/2 to bind a [] to the first argument of
  the head of the empty production; that's both to make it explicit that
  it's an empty production and also to avoid issues with unification of
  that argument. More specifically, in clauses of augment_production/3
  that try to call diff_list/3 with this variable to ground it (assuming
  it's a cyclic list) there are Ogres.

3 years agoStruggling with augmented_production/3; added diff_append/3 etc.
spatsant [Fri, 26 Jun 2015 17:50:12 +0000]
Struggling with augmented_production/3; added diff_append/3 etc.

3 years agoRefactored augmented_production/3 (now); still a wip.
stassa [Thu, 25 Jun 2015 20:48:52 +0000]
Refactored augmented_production/3 (now); still a wip.

3 years agoFixed a slight error in augmented_production/4.
stassa [Thu, 25 Jun 2015 16:48:40 +0000]
Fixed a slight error in augmented_production/4.

3 years agoSlight refactorings etc.
stassa [Thu, 25 Jun 2015 15:40:24 +0000]
Slight refactorings etc.

3 years agoAdded pdcg_parse/[2,3] to do duh; also example stochastic dcg.
stassa [Thu, 25 Jun 2015 15:36:40 +0000]
Added pdcg_parse/[2,3] to do duh; also example stochastic dcg.

3 years agoStarted with stochastic version of supergrammar.
stassa.patsantzis [Wed, 24 Jun 2015 17:57:07 +0000]
Started with stochastic version of supergrammar.
* Exported some predicates that will be useful in stochastic_supergrammar
  (from supergrammar).
* And added the new module to the load file.

3 years agoConfiguration changes.
stassa.patsantzis [Wed, 24 Jun 2015 17:18:16 +0000]
Configuration changes.

3 years agoWent back to examples_mtg.pl to experiment with fewer nonterminals.
stassa.patsantzis [Tue, 23 Jun 2015 17:18:12 +0000]
Went back to examples_mtg.pl to experiment with fewer nonterminals.
* Added termianls (but not nonterminals) for destroy, exile and return
  effects.
* Made sure to export nonterminals//0 and terminals//0. Note however that
  this now exports burn//0, cardname//0 and others that will clash with
  exports from examples_mtg_lexicalized and there's nothing I can do about
  it except reexport those in configuration module, which will just kill
  example modules that don't export burn//0 etc. So just restart Prolog
  when you need to change between examples_mtg and
  examples_mtg_lexicalized :)
* Also added a few new examples, for destroy, exile, bounce.
* Ran a bunch of experiments: see notes from today, running for 1_000_000
  inferences nets me lots of productions that parse the same derivations
  over and over. I get lots of burn, not enough bounce etc although those
  effects seem to build up slowly but steadily (eg, I get "return, target,
  creature"... but also "target,player" etc, inevitably). I'll need to add
  an option to add_new_production/3 to keep it from adding a new
  production if it derives the same parses as an existing one- so
  strengthen the semantics of "unique production" really.
* I know you'll forget to change run_demo. before running it when you go
  home. It's currently set to stop at 1,500,000 inferences. Have fun :D

3 years agoAdded option to derivation/4 (now) to control grounding of rule bodies.
stassa.patsantzis [Tue, 23 Jun 2015 14:34:30 +0000]
Added option to derivation/4 (now) to control grounding of rule bodies.

3 years agoRenamed new_rule to new_production etc.
stassa.patsantzis [Tue, 23 Jun 2015 14:04:23 +0000]
Renamed new_rule to new_production etc.

3 years agoRefined names of options for new_rule/4 and bounded_derivation/5.
stassa.patsantzis [Tue, 23 Jun 2015 13:59:11 +0000]
Refined names of options for new_rule/4 and bounded_derivation/5.

3 years agoTokenised corpus slice for effect "destroyed".
stassa [Tue, 23 Jun 2015 00:06:34 +0000]
Tokenised corpus slice for effect "destroyed".

3 years agoSome cleanups; start of stochastic grammar.
stassa.patsantzis [Mon, 22 Jun 2015 18:55:16 +0000]
Some cleanups; start of stochastic grammar.

3 years agoFirst commit after moving out of Experiments; v. alpha I guess :D
spatsant [Mon, 22 Jun 2015 15:55:21 +0000]
First commit after moving out of Experiments; v. alpha I guess :D