Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Homework Help: Can someone confirm these English to predicate logic problems for me?

  1. Jan 25, 2010 #1
    1. The problem statement, all variables and given/known data

    I actually have to problems I would just like someone to confirm for me. I have several other problems similar to these, and I don't want to waste time in case I do not understand the fundamentals. Anyway:

    a) Define suitable predicates and functions and then formalize the following sentence : A student receives a grade for every course in which he or she registers:

    b) Translate the following English statements into predicate logic : Adding two odd integers yields an even number. Use only addition and multiplication; do not use division, mod, or predicates even(x) and odd(x).

    2. Attempt at a solution

    Now here is my attempt:

    a) I defined the variables:
    - c = courses
    - s = students

    And the functions:
    - isReg(s, c)
    - getGrades(s, c)

    And then combined them into the following formal statement:

    [tex](\forall s|: (\forall c | isReg(s,c) : getsGrade(s, c)))[/tex]

    b) Now for this I simply derived the following:

    [tex](\forall x,y:Z|(\exists n:Z|:(2n+1) = x) \wedge (\exists n:Z|:(2n+1) = y):(\exists n:Z|:(2n) = (x + y)))[/tex]

    If I've gone wrong, any help at getting back onto the right track would be much appreciated.

    Thanks :)
  2. jcsd
  3. Jan 25, 2010 #2


    User Avatar
    Science Advisor

    (a) is probably right... but English can be ambiguous. When the sentence says "a student..." it could also be taken to mean that "there is a student..." which would be a quite different meaning.

    But I suspect you've given what was intended.

    I wonder a bit about your syntax for the restricted quantifiers (using "|" to restrict the range of a variable) in part a, where you have the "|" without the preceding domain. Is there a clearly defined syntax you are using?
  4. Jan 25, 2010 #3
    Ya, I was wondering that exact same thing sylas. My textbook talks a lot about how English is so ambiguous, so I'm going to assume that whether this applies to one student or all students is open to my interpretation ;).
  5. Jan 25, 2010 #4
    Oh I was led to believe that that's the equivalent to saying "over the whole domain", which is the equivalent to just putting "true" there.
  6. Jan 25, 2010 #5


    User Avatar
    Science Advisor

    It depends on what rules you've been given for syntax. Your syntax uses ":" for two different roles, which is ok. I've seen it done before. I'll use "•" for the start of the statement to which the quantified applies, just for clarity. Here's a possible grammar:
    Code (Text):

        statement ::= quantifier variable ":" range "•" statement
        range ::= setvariable
                | setvariable "|" statement
    Basically, a grammar like this requires a range for a variable, to be either just named set, or perhaps a named set with an additional constraint or restriction. That's how I have usually seen "|" used. It can be read "such that".

    The "•" can be replaced with another ":" without ambiguity, unless the first ":" becomes optional. If the first ":" is optional you might have the following rule as well:
    Code (Text):

        statement ::= quantifier variable "•" statement
    In this case there has to be some understood domain that is being used.

    What I have not seen is "|" by itself, without the first ":". It makes sense, if understood has having a ":X" implied before hand, where X is the understood domain.

    I'm just asking in case... have you been given a syntax you are expected to use? What you have is still quite comprehensible, but it you have a required syntax you might want to check.

    Cheers -- sylas
  7. Jan 25, 2010 #6
    Well, as given in our book, the syntax they want us to use is the following:

    (*x | R : P)

    R = Range, P = Body, * = operator/function, x = variable(s). The ':' is also used to represent type (i.e. x : Z = x of type integer).

    In class my professor just left out R or made it "true" when he wanted to use the whole domain.

    Here is an example he did:

    "Some integer is larger than 23" formally is [tex](\exists x:Z|:x > 23)[/tex] or [tex](\exists x:Z|true:x > 23)[/tex]

    Sorry if I've misunderstood your question. This is all new to me.
  8. Jan 25, 2010 #7


    User Avatar
    Science Advisor

    You've understood fine, and your answers seem fine and consistent with the syntax you've provided. I just wondered about the syntax, and you've explained it well.

    Cheers -- sylas
  9. Jan 25, 2010 #8
    Oh awesome :) Thank you very much for you help!
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook