Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - harold

Pages: 1 ... 7 8 [9] 10 11 ... 16
121
Miscellaneous / Re: Language Construction!
« on: May 17, 2013, 04:06:48 am »
Hey BB84, could you make a pdf version of that document?

122
Miscellaneous / Re: Language Construction!
« on: May 16, 2013, 12:25:40 pm »
I've never constructed a language that wasn't a programming language. (as for programming languages, I did a small tutorial on compiler construction here)

Maybe I'll make a spoken language someday, because I'm annoyed at the limited expressiveness of existing ones. Everyone seems to agree that language should be a one-dimensional string of either sound of text with perhaps the occasional back-reference, but I don't particularly agree with that - I certainly don't think that way. Of course sound that has more than one dimension is sort of tricky ;)
But I'll work around that somehow.

123
Miscellaneous / Good books, reading lists
« on: May 16, 2013, 12:11:49 pm »
Here's a list of books that are good enough that I remember having read them. I'll probably add more later.

Fantasy
  • The Saga of Recluce
  • Memory, Sorrow, and Thorn
  • The Belgariad and The Malloreon
  • Artemis Fowl
These all happen to be series, so that's actually a LOT of reading material.

Other Fiction
  • The Bourne Identity, The Bourne Supremacy and The Bourne Ultimatum
  • The Dirty Streets of Heaven

Nonfiction/technical
  • Hacker's Delight
  • The Art of Computer Programming, particularly volume 4
  • The Rocks Don't Lie
  • Periodic Tales: A Cultural History of the Elements, from Arsenic to Zinc
  • At Home: A Short History of Private Life

124
Computer Projects and Ideas / Re: haroldbot (theorem prover / solver)
« on: April 28, 2013, 03:22:45 pm »
Update: added abs, changed >> to signed, added >>> as unsigned shift, solved a big bug in quantified solve mode
This new version is now online.

125
Computer Usage and Setup Help / Re: Planned Computer Configuration
« on: April 20, 2013, 05:50:51 am »
Oh, didn't know it had its own subforum. It should probably be moved then.

126
Computer Usage and Setup Help / Re: Planned Computer Configuration
« on: April 20, 2013, 05:44:13 am »
Indeed. White is a little cheaper, so there's that :)
But I prefer black. And at this price point, there difference isn't significant anyway.

127
Computer Usage and Setup Help / Re: Planned Computer Configuration
« on: April 19, 2013, 02:14:09 pm »
Black, how about you?

128
Computer Usage and Setup Help / Planned Computer Configuration
« on: April 19, 2013, 12:36:32 pm »
So, I need a new computer. Here's what I have in mind now and why.

- Intel 4770K. Approx €350. I know an Ivy or SB-E would get better perf/price, but I really want AVX2. As an asm optimizer, I will actually use it, too.
- Mobo: dunno, they don't seem to be here yet. Probably a reasonably high end ASUS, but not the Insane Top Model. €200-250ish?
- 16GB DDR3, Corsair Vengeance PC3-15000 CL9 €130 ("but 4770K doesn't support that speed!", I know)
- Corsair H100i €100 (obviously there will be some OCing (CPU ends in a K so yea), which is also why the memory is slightly faster than standard)
- Corsair SP120's (Quiet Edition), because an H100i really needs pressure optimized fans, and the stock fans make a ridiculous amount of noise (hey Corsair, wtf?). €25 for 2.
- Corsair AF120's (Quiet Edition), case fans. €25 for 2. (I actually research and buy fans, I'm crazy like that)
- Corsair C70, one of the not that many cases that will fit an H100i, and pretty nice. €100
- OCZ ZT Series OCZ-ZT750W €100 (fully modular, plenty of power, ships with nice cables)
- Samsung 840 pro 256GB. €200. Neither best perf/price nor best capacity/price, but good balance.
- HD6970, €0 because I already have it. I know it's a noob thing. I'll upgrade it later.

Total: €1280?! Damn.
What it will cost me: €280, because 1k from my grandparents. Jelly?

129
Computer Projects and Ideas / Re: haroldbot (theorem prover / solver)
« on: April 08, 2013, 01:25:36 am »
Actually, for the first couple of hours, it only worked with OmnomIRC :)

130
Computer Projects and Ideas / Re: haroldbot (theorem prover / solver)
« on: April 07, 2013, 12:28:33 pm »
Wait, in the future? Isn't that possible right now?

131
Computer Projects and Ideas / Re: haroldbot (theorem prover / solver)
« on: April 07, 2013, 11:16:22 am »
I added showing up to 4 results to "solve" mode, as well as showing the total number of solutions.

132
Other / Re: What do you think of this configuration ?
« on: April 06, 2013, 05:25:43 am »
Very good, but personally I'd throw in an SSD (even if just for the OS), they're expensive but really worth it IMO. And I really like the Corsair Hydro series coolers, but the one you selected is good too.

133
Computer Projects and Ideas / Re: Hellninjas Stuff n' Junk
« on: April 06, 2013, 03:08:41 am »
DarkBASIC actually. Also, "C:\Users\Sparkling Princ"

134
Computer Projects and Ideas / Re: haroldbot (theorem prover / solver)
« on: April 05, 2013, 01:28:51 pm »
haroldbot now also accepts a single = for equality.

135
Computer Projects and Ideas / haroldbot (theorem prover / solver)
« on: April 05, 2013, 12:40:19 pm »
haroldbot (development name: TheoremBot) was an IRC bot (now only a website) that proves theorems, solves equations, and can even calculate. All in the 32-bit bitvector domain (if that means nothing to you, take that to mean "it calculates with unsigned ints, not natural numbers or real numbers or anything like that).

Warning: the interpretation of >> has changed between versions, it is and was an unsigned shift in the current and the first version, but a signed shift in some versions in between.
Warning: the interpretation of >>> has changed between versions, it is now a rotate.
Warning: in version 5d, theorem proving mode has become much more sensitive to divisions by zero, so sensitive that if there's any possibility of division by zero it will freak out. I'll try to do something about that at some point.

How to use it
There are three basic modes.
  • The "solve" mode. Just type in any boolean expression. haroldbot will try to solve it, and give (if applicable) cases of inputs that make it true, false, or result in a divby0. If an expression is always true, haroldbot will search for a proof. Example: "x * 3 == 1" or "x + y == y + x"
  • The calculation/simplification mode. Used for any non-boolean expression. You can make any expression non-boolean by surrounding it with parentheses. For non-constant results, only some inputs result in anything interesting (if the resulting BDD can be matched against a known pattern). Example: "1+2+3+4^15" or "a | a"
note: haroldbot tries to answer you regardless of what else you put in a message as long as it has the string haroldbot: in it. If it doesn't answer, usually that means you asked something it didn't like.
note: sometime it will say something like "time-out while counting solutions". That means the BDD approach didn't work out and it had to switch to the SAT solver - don't worry if you don't know what that means, it's the implication of that that's important: it will not find try to find "nice" results, it will find just any old result. Quantified mode does not fall back to the SAT solver (yet?).

Signedness
Values in haroldbot have no signedness, instead the operations have signedness. All operators and functions are unsigned by default, append s (operators) or _s (functions) to get the signed version, if there is one.

Expression syntax
Operator precedence and associativity are almost the same as in C, but not quite. Notably the comparisons have a lower precedence than bitwise operations (but still higher than boolean operations). Here is a list of available operators and their gotcha's, in order of precedence (groups of equal precedence not shown)
  • ~ bitwise NOT, aka 1's complement.
  • - unary minus, aka 2's complement.
  • * multiplication. haroldbot doesn't really like multiplication, especially not if neither of the two operands is a constant. Computation tends to be slow (using the SAT solver fallback) or even time out and give no result.
  • /, /u, /s division. The warning about multiplication also applies to division. Note that "0x80000000 / -1" in signed mode doesn't "error", as it usually would.
  • %, %u, %s remainder, aka modulo (in the unsigned case). Signed remainder has the sign of the dividend. The warning about multiplication also applies to remainder.
  • + addition.
  • - subtraction.
  • << left shift. haroldbot doesn't like shifts where the right operand isn't a constant, but you can sometimes get away with it. It's not as bad as multiplication.
  • >>, >>u, >>s signed right shift in signed mode, unsigned right shift in unsigned mode. The warning about shifts also applies to signed right shift.
  • & bitwise AND.
  • ^ bitwise XOR.
  • | bitwise OR.
  • ==, !=, <, <u, <s, >, >u, >s, <=, <=u, <=s, >=, >=u, >=s signed or unsigned comparisons. '=' is not a comparison. Comparisons give a mask of all 1's or all 0's instead of being a boolean true or false.
  • => implies. implemented as (~a | b) == -1.
  • && boolean AND.
  • || boolean OR.
  • ?: actually a bitwise mux, acts like the usual ternary operator if the condition can only be 0 or -1 (for example, if the condition is a boolean expression).
  • let name = expression in expression used to give names to things. Useful to factor out common sub-expressions. For example: "haroldbot: let m = x >> 31 in abs(x) == (x + m) ^ m"
Built-in functions:
  • min(a, b) takes the signed or unsigned minimum of a and b.
  • min_s(a, b) takes the signed minimum of a and b.
  • min_u(a, b) takes the unsigned minimum of a and b.
  • max(a, b) takes the signed or unsigned maximum of a and b.
  • max_s(a, b) takes the signed maximum of a and b.
  • max_u(a, b) takes the unsigned maximum of a and b.
  • popcnt(a) the population count aka hamming weight (number of 1 bits) of a.
  • nlz(a) number of leading 0's in a.
  • ntz(a) number of trailing 0's in a.
  • reverse(a) reverses the bits in a.
  • abs(a) takes the absolute value of a where a is interpreted as signed (otherwise it would do nothing).

How it works
It builds an array of 32 binary decision diagram's of the input (one for each bit), and does some fairly standard operations on them (quantified solve mode uses universal quantification over all the variables that you didn't mention, which is a bit rare). There's no magic. If you want to learn more about BDD's, you can read the draft of Knuth's Chapter 7.1.4.
When that fails (that is, there are more than about a hundred thousand nodes in the BDD), it switches to a SAT solver. It switches when the BDDs get too big to fit in their pre-allocated array, the time that takes depends on the speed of the client.

The proofs it finds (if any), are made using the fairly brute-force approach of taking both "ends" of the proof and applying rewrite rules until they meet in the middle. This process is guided somewhat by selecting candidate expressions to rewrite based on their "weight", the weight is a combination of how many steps away it is from the original expression and, crucially, how complicated the expression is. It's an empirical observation that it's usually not necessary to have expressions in a proof that are a lot more complicated than the most complicated "end" of the proof. Of course this does not always hold, so this optimization makes it slower to find some proofs, while making it faster to find typical proofs. A second important component is two forms of hashing. One form that helps to match expressions that are overall structurally equal (all explored expressions are put into hash sets using this type of hash, to make it fast to detect when the two expanding clouds of expressions meet). That hash the usual "combination of hashes of child nodes and this node". The other hash is one that helps to match rewrite rules to expressions, it considers only a node and its immediate children. Rewrite rules are put in bins according to which hashes they would match onto, when rewriting this is used to only attempt to match a rule pattern to an expression if it has a decent chance of actually matching.


I'm open to requests, but BDDs are no silver bullet and will not solve everything, and the SAT solver fallback tends to be really slow (through no fault of its own, it's just that it automatically only gets to deal with hard problems - everything easy is solved by the BDDs). For example multiplication, division and remainder, are just fundamentally hard to deal with. It's also not really a good framework for simplification, but you can use theorem proving mode to test if your own simplification is correct.

Pages: 1 ... 7 8 [9] 10 11 ... 16