Tuesday, 15 July 2014

functional programming - Is there an efficient algorithm to find which composition of boolean functions will match the output of a given boolean function? -



functional programming - Is there an efficient algorithm to find which composition of boolean functions will match the output of a given boolean function? -

suppose have next boolean functions.

def bottom(): homecoming false def implies(var1, var2): if var1 == true , var2 == false: homecoming false homecoming true def land(var1, var2): homecoming var1 == true , var2 == true.

is there efficient algorithm take these 3 functions input, , determine (possibly multiple-application) functional composition of first 2 functions match output of 3rd function every boolean (t,f) input 3rd function?

i using python write illustration in, not restricting solutions python or programming language matter. in fact not looking code, more of description of algorithm or explanation why 1 not exist.

as side note, motivation trying find algorithm because asked show functional completeness of particular set of logical connectives, , showing 1 logical connective can emulated set of others. logic, have utilize little bit of guess , check, not figure out way capture in programme without linear search on big space of possibilities.

if you're looking @ boolean functions of 2 arguments, simple brute-force technique work. extended ternary logic, or ternary functions, or both, exponential can't force far. here's boolean version; hope it's obvious how extend it.

1) binary boolean function relation {false, true} x {false, true} -> {false, true}. there 16 of these. note these include various functions independent of 1 or both of inputs. let's create set 𝓕 consisting of these 16 functions, , note every boolean function has corresponding higher-order function 𝓕 x 𝓕 -> 𝓕.

2) now, start boolean functions take first , take second, , build closure using hofs corresponding "given functions". if target function in closure, it's achievable combination of given functions. more generally, if every element in 𝓕 in closure, given function(s) universal.

so, let's apply example. i'm going write elements of 𝓕 four-tuple corresponding inputs (f,f) (f,t) (t,f) (t,t) in order, , i'm going write hofs in bold. bottom ffff , implies ttft. bottom(a, b) ffff (a,b).

take first fftt , take second ftft, that's our starting set. can utilize bottom add together ffff, no farther applications of bottom going add together anything.

so have 9 possible pairs of functions can apply implies. here go:

implies(fftt, fftt) == tttt (new)

implies(fftt, ftft) == ttft (new)

implies(fftt, ffff) == ttff (new)

implies(ftft, fftt) == tftt (new)

implies(ftft, ftft) == tttt

implies(ftft, ffff) == tftf (new)

implies(ffff, fftt) == tttt

implies(ffff, ftft) == tttt

implies(ffff, ffff) == tttt

now we're 8 of 16 functions, , have bunch more pairs check. since finish set, tedious, i'll leave next step reader (or perhaps computer program).

algorithm functional-programming boolean boolean-logic

No comments:

Post a Comment