My Academia.edu Page w/ Publications

15 Aug 2018

Priest (16.4) An Introduction to Non-Classical Logic, ‘Rigid and Non-rigid Designators,’ summary

 

by Corry Shores

 

[Search Blog Here. Index-tags are found on the bottom of the left column.]

 

[Central Entry Directory]

[Logic and Semantics, entry directory]

[Graham Priest, entry directory]

[Priest, Introduction to Non-Classical Logic, entry directory]

 

[The following is summary of Priest’s text, which is already written with maximum efficiency. Bracketed commentary and boldface are my own, unless otherwise noted. I do not have specialized training in this field, so please trust the original text over my summarization. I apologize for my typos and other unfortunate mistakes, because I have not finished proofreading, and I also have not finished learning all the basics of these logics.]

 

 

 

 

Summary of

 

Graham Priest

 

An Introduction to Non-Classical Logic: From If to Is

 

Part II:

Quantification and Identity

 

16.

Necessary Identity in Modal Logic

 

16.4

Rigid and Non-rigid Designators

 

 

 

 

Brief summary:

(16.4.1) There is a standard objection to quantified modal logic, namely, that it leads to claims of necessity regarding matters that are really contingent, on account of the workings of necessary identity. For example, “Beethoven wrote nine symphonies. Therefore 9 = β, where β is ‘the number of symphonies that Beethoven wrote’. Given NI, ∀xy(x = y ⊃ □x = y), it follows that □9 = β; that is, necessarily the number of Beethoven symphonies is nine – which is false, since Beethoven could have died immediately after writing the eighth” (354). (16.4.2) The negativity constraint will not prevent this problem; for, even under the constraint, a = b ⊃ □(ℭa ⊃ a = b) is still valid, and so we must draw the same conclusion: “Since 9 = β, it still follows that □(ℭ9 ⊃ 9 = β), and so □ ℭ9 ⊃ □9 = β” (354). (16.4.3) Priest diagnoses the problem in the following way: “What has gone wrong with the argument is, in fact, that the noun phrase β, ‘the number of symphonies written by Beethoven’ is a noun phrase that may change its denotation from world to world. In some worlds, Beethoven wrote eight symphonies, in some two, in some 147” (354). (16.4.4) When we consider a constant as having world-invariant denotation (like β,  ‘the number of symphonies written by Beethoven’, being understood as being 9 in all worlds), it is a rigid designator, and we write it under the form: v(c). However, constants that do vary with the world are called non-rigid designators (like β,  ‘the number of symphonies written by Beethoven’, being understood as potentially taking a different value in different worlds, like 2, 9, or 147), and we write them accordingly under the form vw(c). (“Compare predicates, where extensions may change from world to world, and we write vw(P), not v(P))” (354-355). (16.4.5) We then “augment the language with a collection of new constants: α0, α1, α2, . . . and call these descriptor constants, or just descriptors. I will use α, β, γ , . . . for arbitrary descriptors. I will call our old constants rigid constants. The terms of the language now comprise descriptors, rigid constants and variables” (355). (16.4.6) Priest next gives the truth-conditions for our semantics.

vwA) = 1 if vw(A) = 0, and 0 otherwise.

vw(AB) = 1 if vw(A) = vw (B) = 1, and 0 otherwise.

vw(AB) = 1 if vw(A) = 1 or vw (B) = 1, and 0 otherwise.

[…]

vw(◊A) = 1 if, for some w′W such that wRw′, vw′(A) = 1; and 0 otherwise.

vw(□A) = 1 if, for all w′ ∈ W such that wRw′, vw′(A) = 1; and 0 otherwise.

(pp.21-22, sections 2.3.4, 2.3.5)

vw(∃xA) = 1 iff for some dDw, vw(Ax(kd)) = 1

vw(∀xA) = 1 iff for all dDw, vw(Ax(kd)) = 1

(p.331, section 15.3.2)

vw(Pt1 . . . tn) = 1 iff ⟨vw(t1), . . . , vw(tn)⟩ ∈ vw(p)

(355)

(16.4.7) Priest then explains how we modify the tableau rules to accommodate descriptors: {1} “the IIR applies only if both terms are rigid constants”; {2} “the rules of universal and particular instantiation (and the NCR if it is present) apply only to rigid constants”; and {3} there is a new identity rule.

 

Constant-Descriptor Identity (CDI,D)

.

c = α,i

 

(c is a constant new to the branch. This rule is applied to every descriptor, α, on the branch, and every i on the branch, for which there is not already a line of this form.)

(355, with names and additional text at the bottom made by me. The name is my own fabrication and probably needs correction.)

 

(16.4.8) Priest then gives an example tableau for a valid inference in CK(NI) with designators. (16.4.9) Then Priest gives an example tableau for an invalid formula. (16.4.10) “We read off a counter-model from an open branch of a tableau as before. In addition, if there is a line of the form c=β,i on the tableau, we set vwi (β) to v(c). (Note that if we have lines of the form c1=β,i and c2=β,i, then we have a line of the form c1=c2,i, by SI, so v(c1) = v(c2).)” (356). (16.4.11) Priest then gives an example counter-model. (16.4.12) “Note that various quantifier inferences that hold for rigid constants may fail for descriptors. Thus, □Pα ⊬CKxPx” (357). (16.4.13) These tableaux are sound and complete.

 

 

 

 

 

Contents

 

16.4.1

[Objection to Quantified Modal Logic: Necessary Identity Leads to False Claims of Necessity]

 

16.4.2

[The Failure of the Negativity Constraint to Solve the Problem]

 

16.4.3

[The Problem as Resulting from the Implementation of a Noun Phrase Whose Denotation May Change Between Worlds]

 

16.4.4

[Rigid and Non-Rigid Designators]

 

16.4.5

[Rigid Designators as “Rigid Constants” and Non-Rigid Designators as “Descriptor Constants” or as “Descriptors”]

 

16.4.6

[The Truth-Conditions]

 

16.4.7

[Tableau Rules]

 

16.4.8

[Example Tableau 1]

 

16.4.9

[Example Tableau 2]

 

16.4.10

[Counter-Models]

 

16.4.11

[Example Counter-Model 1]

 

16.4.12

[Failing Quantifier Inferences Under Descriptors That Would Have Held for Rigid Constants. Example Counter-Model 2]

 

16.4.13

[The Soundness and Completeness of the Tableaux]

 

 

 

 

 

 

 

Summary

 

16.4.1

[Objection to Quantified Modal Logic: Necessary Identity Leads to False Claims of Necessity]

 

[There is a standard objection to quantified modal logic, namely, that it leads to claims of necessity regarding matters that are really contingent, on account of the workings of necessary identity. For example, “Beethoven wrote nine symphonies. Therefore 9 = β, where β is ‘the number of symphonies that Beethoven wrote’. Given NI, ∀xy(x = y ⊃ □x = y), it follows that □9 = β; that is, necessarily the number of Beethoven symphonies is nine – which is false, since Beethoven could have died immediately after writing the eighth” (354).]

 

[We have been looking at quantified modal logics (see section 14 and section 15 and our current section 16.) Priest will now discuss a standard objection to it. He gives the following illustration. We begin by noting that Beethoven wrote nine symphonies. We write “the number of symphonies that Beethoven wrote” as “β”. So 9=β. Now recall necessary identity from section 16.2.4. It expresses the notion that identity will remain the same across all worlds, and it is formulated in the following way:

we will call the formula ∀xy(x = y ⊃ □x = y) NI (Necessary Identity)

(p.351, section 16.2.4)

I may get this wrong, but I am guessing we are dealing with the following reasoning. 9=β is an identity that holds between 9 and β. If identity is necessary and it holds in some case, then it holds in all worlds. That means that it is necessary that the number of symphonies Beethoven wrote is 9. But that is not a logical necessity. Beethoven could have died before writing the ninth one. So this is the objection to quantified modal logic, namely, that it leads to claims of necessity that are really contingent.]

Let us now consider a standard objection to quantified modal logic. Beethoven wrote nine symphonies. Therefore 9 = β, where β is ‘the number of symphonies that Beethoven wrote’. Given NI, ∀xy(x = y ⊃ □x = y), it follows that □9 = β; that is, necessarily the number of Beethoven symphonies is nine – which is false, since Beethoven could have died immediately after writing the eighth.

(354)

[contents]

 

 

 

 

 

 

16.4.2

[The Failure of the Negativity Constraint to Solve the Problem]

 

[The negativity constraint will not prevent this problem; for, even under the constraint, a = b ⊃ □(ℭa ⊃ a = b) is still valid, and so we must draw the same conclusion: “Since 9 = β, it still follows that □(ℭ9 ⊃ 9 = β), and so □ ℭ9 ⊃ □9 = β” (354).]

 

[Priest’s next point is that the Negativity Constraint will not solve this problem. Recall this tableau from section 16.3.4:

 

VK(NI) a = b ⊃ □(ℭa ⊃ a = b)

1.

.

2.

.

3.

.

4.

.

5.

.

6.

.

7.

.

8.

.

9.

.

10.

.

11.

.

12.

.

13.

¬(a = b ⊃ □(ℭa ⊃ a = b)),0

a = b,0

¬□(ℭa ⊃ a = b),0

ℭa,0

ℭb,0

◊¬(ℭa ⊃ a = b),0

0r1

¬(ℭa ⊃ a = b),1

ℭa,1

¬a = b,1

0r1

¬a = b,1

a = b,1

×

                    

P

.

1¬⊃

.

1¬⊃

.

2NCR

.

2NCR

.

3¬

.

6◊r

.

6◊r

.

8¬⊃

.

8¬⊃

.

10◊r

.

10◊r

.

2,7IRR

(13×12)

valid

(p.353, section 16.3.4, enumeration and step accounting are my own and are probably mistaken)

 

Here we are restricted by the negativity constraint, but nonetheless, on account of a = b ⊃ □(ℭa ⊃ a = b) being valid, we will need to draw the same conclusion: “Since 9 = β, it still follows that □(ℭ9 ⊃ 9 = β), and so □ ℭ9 ⊃ □9 = β” (354).]

It might be suggested that the failure of NI in necessary identity systems with the Negativity Constraint provides an answer to the problem, but it does not. As we saw in 16.3.4, even with the Negativity Constraint, a = b ⊃ □(ℭa ⊃ a = b). Since 9 = β, it still follows that □(ℭ9 ⊃ 9 = β), and so □ ℭ9 ⊃ □9 = β. But a Platonist about numbers ought to be able to hold that 9 is a necessary existent, without being driven into this absurd conclusion.

(354)

[contents]

 

 

 

 

 

 

16.4.3

[The Problem as Resulting from the Implementation of a Noun Phrase Whose Denotation May Change Between Worlds]

 

[Priest diagnoses the problem in the following way: “What has gone wrong with the argument is, in fact, that the noun phrase β, ‘the number of symphonies written by Beethoven’ is a noun phrase that may change its denotation from world to world. In some worlds, Beethoven wrote eight symphonies, in some two, in some 147” (354).]

 

[(ditto)]

What has gone wrong with the argument is, in fact, that the noun phrase β, ‘the number of symphonies written by Beethoven’ is a noun phrase that may change its denotation from world to world. In some worlds, Beethoven wrote eight symphonies, in some two, in some 147.

(354)

[contents]

 

 

 

 

 

 

16.4.4

[Rigid and Non-Rigid Designators]

 

[When we consider a constant as having world-invariant denotation (like β,  ‘the number of symphonies written by Beethoven’, being understood as being 9 in all worlds), it is a rigid designator, and we write it under the form: v(c). However, constants that do vary with the world are called non-rigid designators (like β,  ‘the number of symphonies written by Beethoven’, being understood as potentially taking a different value in different worlds, like 2, 9, or 147), and we write them accordingly under the form vw(c). (“Compare predicates, where extensions may change from world to world, and we write vw(P), not v(P))” (354-355).]

 

[As we saw in 16.4.3 above, we had a constant, β, with the sense, ‘the number of symphonies written by Beethoven’, but with a denotation that varies with the world in question, (being 9 in our world, but 2 in another, 147 in another, etc.) However, when we try to fix its designation for all worlds, we draw the false conclusion that it is necessary that nine be the number of symphonies Beethoven wrote. When we consider a constant as having world-invariant denotation (like β,  ‘the number of symphonies written by Beethoven’, being understood as being 9 in all worlds), it is a rigid designator, and we write it under the form: v(c). However, constants that do vary with the world are called non-rigid designators (like β,  ‘the number of symphonies written by Beethoven’, being understood as potentially taking a different value in different worlds, like 2, 9, or 147), and we write them accordingly under the form vw(c). (“Compare predicates, where extensions may change from world to world, and we write vw(P), not v(P))” (354-355).]

The constants we have been using so far all have a world-invariant denotation. (Thus, we write v(c), not vw(c). Compare predicates, where | extensions may change from world to world, and we write vw(P), not v(P).) Constants of this kind are called rigid designators. Constants like β are, by contrast, non-rigid designators. How do such constants behave logically?

(354-355)

[contents]

 

 

 

 

 

 

16.4.5

[Rigid Designators as “Rigid Constants” and Non-Rigid Designators as “Descriptor Constants” or as “Descriptors”]

 

[We then “augment the language with a collection of new constants: α0, α1, α2, . . . and call these descriptor constants, or just descriptors. I will use α, β, γ , . . . for arbitrary descriptors. I will call our old constants rigid constants. The terms of the language now comprise descriptors, rigid constants and variables” (355).]

 

[(ditto). (I am not certain yet, but the descriptor constants or descriptors seem to be non-rigid designators, since they seem to be distinguished from rigid constants.)]

Let us augment the language with a collection of new constants: α0, α1, α2, . . . and call these descriptor constants, or just descriptors. I will use α, β, γ , . . . for arbitrary descriptors. I will call our old constants rigid constants. The terms of the language now comprise descriptors, rigid constants and variables.

(355)

[contents]

 

 

 

 

 

 

16.4.6

[The Truth-Conditions]

 

[Priest next gives the truth-conditions for our semantics (see below).]

 

[Priest next gives the truth-conditions for our semantics. We first note that “In an interpretation, v assigns each descriptor a denotation, vw(α), at each world w” Priest says that the semantics are the same except for how closed atomic sentences are evaluated. I am not certain what the semantics are the same as, but for now I will provide what we listed in section 15.3.2, and I will add the new condition mentioned now:

vwA) = 1 if vw(A) = 0, and 0 otherwise.

vw(AB) = 1 if vw(A) = vw (B) = 1, and 0 otherwise.

vw(AB) = 1 if vw(A) = 1 or vw (B) = 1, and 0 otherwise.

[…]

vw(◊A) = 1 if, for some w′W such that wRw′, vw′(A) = 1; and 0 otherwise.

vw(□A) = 1 if, for all w′ ∈ W such that wRw′, vw′(A) = 1; and 0 otherwise.

(pp.21-22, sections 2.3.4, 2.3.5)

vw(∃xA) = 1 iff for some dDw, vw(Ax(kd)) = 1

vw(∀xA) = 1 iff for all dDw, vw(Ax(kd)) = 1

(p.331, section 15.3.2)

vw(Pt1 . . . tn) = 1 iff ⟨vw(t1), . . . , vw(tn)⟩ ∈ vw(p)

(355)

]

In an interpretation, v assigns each descriptor a denotation, vw(α), at each world w. If we define vw(a) to be v(a) for all rigid constants, a, we can write the truth conditions of closed atomic sentences uniformly as:

vw(Pt1 . . . tn) = 1 iff ⟨vw(t1), . . . , vw(tn)⟩ ∈ vw(p)

In all other ways, the semantics remain the same. In particular, the truth conditions of the quantifiers are still given in terms of the canonical constants, kd, which are rigid.

(355)

[contents]

 

 

 

 

 

 

16.4.7

[Tableau Rules]

 

[Priest then explains how we modify the tableau rules to accommodate descriptors: {1} “the IIR applies only if both terms are rigid constants”; {2} “the rules of universal and particular instantiation (and the NCR if it is present) apply only to rigid constants”; and {3} there is a new identity rule (see below).]

 

[The tableau rules will vary according to the system and constraints we are employing. But we note three important things about the rules, whatever they be. {1} “the IIR applies only if both terms are rigid constants”; {2} “the rules of universal and particular instantiation (and the NCR if it is present) apply only to rigid constants”; and {3} there is a new identity rule:

 

Constant-Descriptor Identity (CDI,D)

.

c = α,i

 

(c is a constant new to the branch. This rule is applied to every descriptor, α, on the branch, and every i on the branch, for which there is not already a line of this form.)

(355, with names and additional text at the bottom made by me. The name is my own fabrication and probably needs correction.)

]

To obtain tableaux for the extended language, the identity rules (whatever they are) are extended to include all closed terms, descriptors or rigid constants, except that the IIR applies only if both terms are rigid constants. All of the other rules remain the same. In particular, the rules of universal and particular instantiation (and the NCR if it is present) apply only to rigid constants. There is, in addition, one further rule:

 

Constant-Descriptor Identity (CDI,D)

.

c = α,i

 

(c is a constant new to the branch. This rule is applied to every descriptor, α, on the branch, and every i on the branch, for which there is not already a line of this form.)

(355, with names and additional text at the bottom made by me. The name is my own fabrication and probably needs correction.)

 

c is a constant new to the branch. The rule is applied to every descriptor, α, on the branch, and every i on the branch, for which there is not already a line of this form.3

(355)

3. The effect of applying the other rules to descriptors, where this is legitimate, is obtained by applying this rule. Thus, consider UI, for example. Given ∀xPx, i, we have a line of the form c = α, i, so we can infer Pc, i by UI, and Pα, i by SI.

(355)

[contents]

 

 

 

 

 

 

16.4.8

[Example Tableau 1]

 

[Priest then gives an example tableau for a valid inference in CK(NI) with designators.]

 

[Priest will now give an example tableau in CK(NI). I am going to guess that the rules will be the following, but likely I have this wrong:

 

 Double Negation

Development (¬¬D)

¬¬A,i

A,i

 

Conjunction

Development (D)

A ∧ B,i

A,i

B,i

 

 Negated Conjunction

Development (¬D)

¬(A ∧ B),i

¬A ¬B,i

 

 Disjunction

Development (∨D)

A ∨ B,i

↙   ↘

A,i      B,i

 

 Negated Disjunction

Development (¬D)

¬(A ∨ B),i

¬A,i

¬B,i

 

 Conditional

Development (⊃D)

A ⊃ B,i

↙    

¬A,i        B,i

 

Negated Conditional

Development (¬⊃D)

¬(A ⊃ B),i

A,i

¬B,i

 

Negated Necessity

Development (¬□D)

¬A,i

¬A,i

 

Negated Possibility

Development D)

¬A,i

¬A,i

 

Relative Necessity

Development (□rD)

A,i

irj

A,j

(both A,i and irj must occur somewhere on the same branch, but in any order or location)

 

Relative Possibility

Development (rD)

A,i

irj

A,j

(j must be new: it cannot occur anywhere above on the branch)

(p.24, section 2.4.4)

 

 Negated Existential

Development (¬∃D)

¬∃xA

x¬A

 

 Negated Universal

Development (¬∀D)

¬xA

x¬A

(p.266, section 12.4.1)

 

 Universal Instantiation

Development (UI,D)

xA,i

Ax(a),i

 

where a is any rigid constant on the branch, (if there are not any, we select one at will).

 

 Particular Instantiation

Development (PI,D)

xA,i

Ax(c),i

 

where c is any rigid constant that does not occur so far on the branch.

(p.331, section 15.4.1)

 

Principle of Identity

Development (=D)

.

a = a,i

 

(You can always add a line of the form a = a,i)

 

Substitutivity of Identicals (SI,D)

a = b,i

Ax(a),i

Ax(b),i

 

(where A is any atomic sentence distinct from a = b.)

(Note: the world index on every line is the same, so substitution is licensed only within a world.)

 

Identity Invariance Rule (IIR,D)

a = b,i

a = b,j

 

(where j is any world parameter on the branch distinct from i, and both a and b are rigid constants)

(350, with names and additional text at the bottom made by me. See section 16.2.5.)

 

Constant-Descriptor Identity (CDI,D)

.

c = α,i

 

(c is a constant new to the branch. This rule is applied to every descriptor, α, on the branch, and every i on the branch, for which there is not already a line of this form.)

(355, with names and additional text at the bottom made by me. The name is my own fabrication and probably needs correction.)

]

Here is a tableau to show that ∀xPx ⊢ □Pα in CK(NI).

 

∀x□Px CK(NI) □Pα

1.

.

2.

.

3.

.

4.

.

5.

.

6.

.

7.

.

8.

.

9.

.

10.

.

 

∀x□Px,0

¬□Pα,0

◊¬Pα,0

0r1

¬Pα,1

a = α,o

b = α,1

□Pb,0

Pb,1

Pα,1

×

P

.

P

.

2¬

.

3◊r

.

3◊r

.

4,5CDI

.

4,5CDI

.

1,7UI

.

8,4□r

.

7,9SI

(10×5)

valid

(enumeration and step accounting are my own and are probably mistaken)

 

Lines six and seven apply the new rule, and the last line is obtained by SI from line seven.

(356)

[contents]

 

 

 

 

 

 

 

16.4.9

[Example Tableau 2]

 

[Then Priest gives an example tableau for an invalid formula.]

 

[(ditto) (See section 16.4.8 above for the rules we will apply below.)]

Here is a tableau to show that ⊬ a = α ⊃ □a = α in the same system.

 

CK(NI) a = α ⊃ □a = α

1.

.

2.

.

3.

.

4.

.

5.

.

6.

.

7.

 

¬(a = α ⊃ □a = α),0

a = α,0

¬□a = α,0

◊¬a = α,0

0r1

¬a = α,0

b = α,1

P

.

1¬

.

1¬

.

3¬□

.

4◊r

.

4◊r

.

5,6CDI

(open)

invalid

(enumeration and step accounting are my own and are probably mistaken)

The last line is provided by the new rule, but its addition has no further consequences.

(356)

[contents]

 

 

 

 

 

 

16.4.10

[Counter-Models]

 

[“We read off a counter-model from an open branch of a tableau as before. In addition, if there is a line of the form c=β,i on the tableau, we set vwi (β) to v(c). (Note that if we have lines of the form c1=β,i and c2=β,i, then we have a line of the form c1=c2,i, by SI, so v(c1) = v(c2).)” (356).]

 

[(ditto)]

We read off a counter-model from an open branch of a tableau as before. In addition, if there is a line of the form c=β,i on the tableau, we set vwi (β) to v(c). (Note that if we have lines of the form c1=β,i and c2=β,i, then we have a line of the form c1=c2,i, by SI, so v(c1) = v(c2).)

(356)

[contents]

 

 

 

 

 

 

16.4.11

[Example Counter-Model 1]

 

[Priest then gives an example counter-model.]

 

[(ditto)]

Thus, in the counter-model given by the tableau of 16.4.9, W = {w0,w1}, D = {∂a, ∂b}, w0R w1, v(a) = ∂a, v(b) = ∂b, vw0 (α) = ∂a, vw1(α) = ∂b. | That is:

 

+--------+xxw0x→xw1xx+--------+
|xαxxxxxx|xxw0x→xw1xx|xxxxxxαx|
|x∂axx∂bx|xxw0xxw1xx|x∂axx∂bx|
+--------+xxw0x→xw1xx+--------+

 

The descriptor is written above the object that it denotes at each world. vw0(a) = v(a) = ∂a = vw0(α). Hence, a = α is true at w0. But vw1(a) = v(a) = ∂a = ∂b = v(b) = vw1(α). Hence, a = α is false at w1, so □a = α is false at w0.

(356-357)

[contents]

 

 

 

 

 

 

16.4.12

[Failing Quantifier Inferences Under Descriptors That Would Have Held for Rigid Constants. Example Counter-Model 2.]

 

[“Note that various quantifier inferences that hold for rigid constants may fail for descriptors. Thus, □Pα ⊬CKxPx” (357).]

 

[(ditto)]

Note that various quantifier inferences that hold for rigid constants may fail for descriptors. Thus, □Pα ⊬CKxPx. The tableau for this is infinite. Here is a finite counter-model:

+---------+xxw0x→xw1xx+---------+
|xxαxxxxxx|xxxx→xw1xx|xxxxxxαxx|
|xx∂axx∂bx|xxw0xxw1xx|xx∂axx∂bx|
|Pxxxx×xx|xxw0x→xw1xx|Px×xxxxx|
+---------+xxw0x→xw1xx+---------+

 

I leave it as an exercise to check that this works.

(357)

[contents]

 

 

 

 

 

16.4.13

[The Soundness and Completeness of the Tableaux]

 

[These tableaux are sound and complete.]

 

[(ditto)]

All the tableau systems described in this chapter are sound and complete with respect to the appropriate semantics. This is proved in 16.6 and 16.7.

(357)

[contents]

 

 

 

 

 

 

 

From:

 

Priest, Graham. 2008 [2001]. An Introduction to Non-Classical Logic: From If to Is, 2nd edn. Cambridge: Cambridge University.

 

 

 

 

No comments:

Post a Comment