dasickis

05-10-2007, 07:55 AM

I was wondering how I should write this expression parsing function:

I'm trying to create a new operator (→) that outputs:

P Q P->Q

T T T

T F F

F T T

F F T

As you may have guessed the logic is (P==Q)||Q

Another operator I'm trying to create is (↔) that outputs

P Q P->Q

T T T

T F F

F T F

F F T

As you may have guessed the logic is (P==Q)||Q

The logic here is P==Q[/CODE]

Additionally, I need to parse logical quantifiers so that:

∃x becomes names.some(function(x){...})

∀x becomes names.every(function(x){...})

For example:

∃x Dodec(x) becomes names.some(function(x){return Dodec(x)})

∃x ∃y Smaller(x,y) becomes names.some(function(x){names.some(function(y){return Smaller(x,y)})})

∃x ∃y ∀z Between(x,y,z) becomes names.some(function(x){names.some(function(y)names.some(function(x){names.some(function(z){return Between(x,y,z)})})})

For a well formed logical statement, a person needs to properly parenthesize the statement.

Valid examples:

(Dodec(a)→Dodec(b))→Dodec(c)

∃x(Dodec(x) && ∃y Smaller(x,y))

Invalid Examples:

Dodec(a)→Dodec(b)→Dodec(c)

∃x Dodec(x) && ∃ySmaller(x,y) [Valid: ∃x Dodec(x) && ∃x∃ySmaller(x,y), the quantifier does not carry through]

For more information on logic:http://en.wikipedia.org/wiki/Predicate_logic

I'm trying to create a new operator (→) that outputs:

P Q P->Q

T T T

T F F

F T T

F F T

As you may have guessed the logic is (P==Q)||Q

Another operator I'm trying to create is (↔) that outputs

P Q P->Q

T T T

T F F

F T F

F F T

As you may have guessed the logic is (P==Q)||Q

The logic here is P==Q[/CODE]

Additionally, I need to parse logical quantifiers so that:

∃x becomes names.some(function(x){...})

∀x becomes names.every(function(x){...})

For example:

∃x Dodec(x) becomes names.some(function(x){return Dodec(x)})

∃x ∃y Smaller(x,y) becomes names.some(function(x){names.some(function(y){return Smaller(x,y)})})

∃x ∃y ∀z Between(x,y,z) becomes names.some(function(x){names.some(function(y)names.some(function(x){names.some(function(z){return Between(x,y,z)})})})

For a well formed logical statement, a person needs to properly parenthesize the statement.

Valid examples:

(Dodec(a)→Dodec(b))→Dodec(c)

∃x(Dodec(x) && ∃y Smaller(x,y))

Invalid Examples:

Dodec(a)→Dodec(b)→Dodec(c)

∃x Dodec(x) && ∃ySmaller(x,y) [Valid: ∃x Dodec(x) && ∃x∃ySmaller(x,y), the quantifier does not carry through]

For more information on logic:http://en.wikipedia.org/wiki/Predicate_logic