siddhartha-gadgil / provingground Goto Github PK
View Code? Open in Web Editor NEWProving Ground: Tools for Automated Mathematics
Home Page: http://siddhartha-gadgil.github.io/ProvingGround/
License: MIT License
Proving Ground: Tools for Automated Mathematics
Home Page: http://siddhartha-gadgil.github.io/ProvingGround/
License: MIT License
I've noticed that the evolve function slows down for larger arguments. Is the pruning not yet implemented, because if it is, then the evolve function should take roughly a constant time to run.
Word(List(1,2,3,5)).maxgen should return 4. However it returns 5. Is this intended behaviour, or is it a bug?
What was the next thing we are supposed to do after we have a function from (M, FD[V]) -> FD[V]?
There are still many hash collision happening, either because of poor hashing, or too many objects. In the case of hash collisions, toSet and distinct are faster on parallel collections than serial; we should try changing things to parallel and see if they work better.
It is semantically better to use classes, not case classes, for extractors, as we do not generally consider their equality. It also avoids collision of the unapply method of case classes with that of extractors.
One can then create instances using objects extending the class.
Need: A type family mere proposition (in terms of HoTT, but a separate object) and an axiomatic function propositional truncation
Should generate static web page, save to file and view in browser. Also log in memory for many stages.
ACevolution.evolve isn't evolving the finite distribution as expected. It's just creating a uniform distribution on the atomic moves and never evolving it. Is this expected behavior?
Weights are freshly computed for each gradient term, needed quadratically many equality checks. Should memoize weights as lazy map.
Creation of a single finite distribution with size of pmf around 30000 is taking about half a minute at runtime. The pmf itself is created instantly. Should probably use value classes.
Presently various "extras", not important enough to be in the core but not yet exiled to digressions, lie in the jvm project. The jvm project should only contain play, akka and web lookups using play. This should eventually open up the option of using something more lightweight like akka-http, especially if akka-js becomes a reality.
Requirements:
We need to determine whether:
As far I have understood, each vertex in the finite distribution for andrewscurtis will contain presentation and a sequence of moves. But the moves have been implemented as methods of the case class rather than functions in the companion object. If they were implemented as functions in the companion object, we could have represented a presentation and the associated moves in this manner
(Presentation(2, "a!ba", "b!ab"), List[Presentation => Presentation](<a list of moves>))
That way, to get the resultant presentation from the original, we just compose the functions in list of moves, and apply it on the original presentation. But if the moves are implemented as methods, this kind of representation might not be possible.
For different applications, representations other than a set are useful.
There are moves such as Lft(0, 0) - a relation cannot be multiplied by itself.
I will correct this.
This may mean finite distributions are not considered equal, even if they should be. Sets may be better (but have their own dangers).
To incorporate an understanding of associations, we must associate to each term a vector with (a function of the) norm giving the probability of choosing the vector. The probability of choosing a pair for a combination becomes (a function of the) inner product.
This is particularly important for external mining from Wikipedia etc
The present collection of weights does not make much sense for fixed size presentations.
Instead of parser combinators, we use Li Haoyi's FastParser, which has a flatMap method. In particular,
At present we can re-spawn actors given a directory, but the states are not recorded to restart. Easiest way to run over a network is transmit files. Os one should be able to
Consider the presentation
To be more specific, how are we defining addition and scalar multiplication in a probability distribution, or more specifically, a finite distribution?
Could either be an accidental change of behaviour in the actor runs or a consequence of weights dropping fast. Strangely the inverses of relations do not appear in the list sorted by entropy.
At present the whole run history is pickled and saved. Loading this, generating theorems, and saving this as csv takes far too long.
Instead, one should in parallel:
Indeed the save function should have these as boolean options.
At present, the hack is to look for the text content of a particular element by id, and then run a corresponding script. A cleaner way would be to:
(1) Have a class "js-div", with all elements of this class having a corresponding div appended to their children.
(2) Which div is appended is determined by a "data-script" attribute, which can be obtained by _.getAttribute("data-script")
Instead of having ad hoc saving, tuning etc, make a learning system a source, and a sink for tuning etc.
In the present approach, as in the core, the recursion function for an inductive type has been defined, but not the induction function.
Normalize so identity moves always come last.
In Andrews-Curtis, action of each element in genCollection(allMoves(2)) maps any finite distribution to one with weights 0. This may be a bug in moveFn
Currently, the words describing the relators of a presentation are stored in a List, which makes the order important, hence Presentation(List(a,b), 2) is not the same as Presentation(List(b,a), 2), but both actually are the same presentation. I suggest replacing the List here with a multiset, so the order does not matter, only the multiplicities.
In addition to mongo storage, especially for batch jobs, one should store snapshots with a fast and efficient format, probably the binary format of scala pickle.
I noticed a test was failing, one which compared two finite distributions for equality. How is equality of finite distributions checked now, if it is checked at all?
Ideally, applying the reduce function on Word(List(1,2,-2,-1)) should return the empty word, but what it returns is the word a.a!. I'll fix this bug and send a pull request.
It is unnatural to have rank supplied while parsing etc. It is better to store this in an actor: more generally, * store parameters specific to the system.
I implemented the method to apply a single move M to FD[V] and that works just fine. However, if we want to implement the apply method also for FD[Presentation], then we will have problems because of type erasure. The compiler will think both the apply methods have the same type signature and throw an error because of the double definition. One way to get around this could be to wrap the FD[V] and FD[Pres] in different case classes, but that's not very elegant. What do you think I should do?
All presentations and Moves should be stored along with actor and number of loops in MongoDB collections. This allows one to directly see the history of a presentation, for example.
Running is absurdly slow, even when the population size is a few thousand.
This is caused by a combination of
val f = ...
val a : DiffbleFunction...
def m = movefn(f)
val b = vsum(a, m)
Using repeated summing for a bigsum of differentiable functions is needlessly inefficient. There should just be a big sum case class.
It would be nice to have a unit testing framework in place. This will make sure that any modification to stable running code does not break stuff. Perhaps, we could use ScalaTest (http://scalatest.org/user_guide).
Required for both case classes and parser constructors. As a bonus can be used for pattern matching after wrapping in Try.
The feedback for presentations is calculated correctly, but pulls back to the trivial one.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.