Note: working on Quine-McClusky now.
Always wanted a high speed lib for logic reductions ...
Been trying this out, so many questions...
1) logred_set_scanf(a, "a00 + a00");
logred_set_reduce(a);
logred_set_printf(a);
Shouldn't that always produce 0? for me it outputs a00
Nope. A or A == A. A or !A == 1 and A!A = 0
2) Similarly I would expect (a + !a) = 1
logred_set_scanf(a, "a00");
logred_set_not(b, a);
logred_set_xor(c, a, b);
= crash
a = "a00"
b = "!a00"
c = "a00" ^ "!a00"
= a00!(!a00) + !(a00)!a00
= a00 + !a00
= 1
Yup, it crashes. Comments out "logred_set_reduce_4_A_nAB_n(src)" in "logred_set_reduce()" to fix this.
It doesn't resolve down to "1" yet. soon.
3) Haven't debugged enough, but part 2 could be related to this?:
logred_set_scanf(a, "!a00!b00"); = works
logred_set_scanf(a, "!a00"); = crash
Version I'm working on doesn't crash on this.
4) Actually, is there support for numeric literals (0, 1)? c = a+b is purely symbolic, but during SHA256 you add in those K-Constants which can sometimes help reduce things further.
Humm, good point. Will not be ready for this release. Soon.
4) x64 only? This is giving me heap problems:
#define VAR_T size_t
#define VAR_T_SIZE_BITS ( 8 * sizeof(VAR_T) )
#define VAR_A_BITS 256
#define VAR_A_LEN 4L
(worked around setting VAR_A_BITS = 128... maybe this is the source of all my problems?
)
The code should be x32/x64 agnostic. logred_v6.zip is a snapshot of what I have so far. Ignore the logred_set_reduce_5_Quine_McCluskey() functions.
The Makefile now lets you define a bunch of flags like VAR_A_BITS. But it should work for values up to 960. It may work beyond that with some tweeks to the variable string lenghts ("a960" and "a1024" are different lengths).
Cheers.