The Logiweb sequent calculus

Klaus Grue^{1}

Department of Computer Science, University of Copenhagen (DIKU)

Abstract. The ‘Logiweb sequent calculus’ is suited for terse, human readable formulation of axioms, inference rules, theories, lemmas, and proofs. It supports different styles of theories like equational theories and FOL based theories. It permits to express arbitrary side conditions in the ‘Logiweb programming language’. As an example of use, the calculus allows to express the deduction rule as an inference rule which makes it easy to get started using a theory. The calculus has operations for ‘dereferencing’ and ‘referencing’ which allow to convert e.g. the name of a lemma into the contents of the lemma and vice versa. The calculus interacts smoothly with fully automatic tactics as well as proofs in which part of the work is done by a human author and part is done by proof tactics.

1 Introduction

Logiweb [Gru04, Gru05a, Gru05b] is a system for electronic publication of logic. It allows authors different places in the world to define theories, state and prove lemmas, and to publish Logiweb pages that contain the results. The present paper is an example of a Logiweb page, and the present paper is correct in the sense that it has been verified by Logiweb. Core Logiweb allows users to program proof systems in the Logiweb programming language and to publish the proof system. Users who use the same proof system and the same axiomatic theory may benefit from the results of each other in that a proof written by one author may make references across the internet to lemmas proved by another author. Cross theory cooperation (e.g. use of ZFC results in NBG) could be more cumbersome and cross proof system cooperation even more so, depending on the theories and systems involved. The present paper introduces Logiweb sequent calculus which allows users to express arbitrary axiomatic theories on the same footing. That calculus supports arbitrary styles of logic (e.g. FOL or equational) equally well. The calculus is machine friendly in that proofs are easy to generate, verify, store, and transmit and it is general so that users of Logiweb are not tempted to make a proof system each. User friendliness in the sense that theories, lemmas, and proofs should be easy to read and write is taken care of by Logiwebs rendering and Turing complete macro expansion facilities combined with the support for proof tactics in the implementation of the calculus in [Gru05b]. The present paper gives an overview. Details are in a web appendix [Gru06].

2 Logiweb sequent calculus

Let \underline{v} and \underline{t} denote the syntax classes of metavariables and object terms, respectively. The format \underline{s} of Logiweb statements is \underline{s} ::= \underline{v} | \underline{t} | \underline{s} ⊢ \underline{s} | \underline{t} ⊢⊢ \underline{s} | ∀\underline{v}: \underline{s} | ⊥ ⊥ | \underline{s} ⊕ \underline{s}. As an example of use, consider the following:

Let A denote ∀\underline{a}: \underline{a} + 0 = \underline{a}.
Let R denote ∀\underline{a}: ∀\underline{b}: ∀\underline{c}: \underline{a} = \underline{b} ⊢ \underline{a} = \underline{c} ⊢ \underline{b} = \underline{c}.
Let C denote 0 = 1 ⊢ ⊥ ⊥.
Let T denote R ⊕ C ⊕ A.
Let L denote T ⊢ ∀\underline{a}: \underline{a} = \underline{a}.

The construct ∀\underline{x}: \underline{a} states that \underline{a} is provable for all object terms \underline{x}. Hence, A above is an axiom scheme which says that \underline{a} + 0 = \underline{a} for all object terms \underline{a}. The construct \underline{a} ⊢ \underline{b} states that if \underline{a} is provable then \underline{b} is provable. \underline{a} ⊢ \underline{b} is right associative and has higher priority than ∀\underline{x}: \underline{a}, so R above means ∀\underline{a}: ∀\underline{b}: ∀\underline{c}: \underline{a} = \underline{b} ⊢ \underline{a} = \underline{c} ⊢ \underline{b} = \underline{c}. Hence, R is the inference rule which states that \underline{a} = \underline{b} and \underline{a} = \underline{c} infer \underline{b} = \underline{c}. The macro that expands ∀\underline{a}: ∀\underline{b}: ∀\underline{c}: \underline{d} into ∀\underline{a}: ∀\underline{b}: ∀\underline{c}: \underline{d} is defined in [Gru06]. The construct ⊥ ⊥ denotes absurdity, i.e. meta-falsehood (we reserve F and ⊥ to denote falsehood and infinite looping, respectively, at the object level). Hence, C above states that 0 = 1 is an absurdity. The construct \underline{a} ⊕ \underline{b} states that both \underline{a} and \underline{b} are provable. Hence, T above is the axiomatic theory which comprises the axiom scheme A, the inference rule R, and the statement that 0 = 1 is an absurdity. The lemma L above says that \underline{a} = \underline{a} is provable in the theory T. The construct \underline{a} ⊢⊢ \underline{b} states that if computation of \underline{a} yields T then \underline{b} is provable. \underline{a} must be expressed in the Logiweb programming language (c.f. [Gru05b]). T denotes truth in the Logiweb programming language. If \underline{a} ⊢⊢ \underline{b} then we shall say that \underline{a} endorses \underline{b}. The endorsement operator allows to express side conditions as we shall see later. A Logiweb sequent is a triple p : : s : : c : : T where c is a Logiweb statement and p and s are finite sets of Logiweb statements. The sequent {p_{1}, …, p_{m}} : : {s_{1}, …, s_{n}} : : c : : T represents p_{1} ⊢ … ⊢ p_{m} ⊢ s_{1} ⊢⊢ … ⊢⊢ s_{n} ⊢⊢ c. The operations of Logiweb sequent calculus are:

a^{I} → ∅, ∅, a ⊢ a : : T  p : : s : : ∀x: c : : T @ a → p : : s : : ⟨c |x:= a⟩ : : T^{1}
a ⊢ p : : s : : c : : T → p\{a}, s, a ⊢ c : : T  p, s, a ⊢⊢ b : : T^{V} → p : : s : : b : : T^{2}
a ⊢⊢ p : : s : : c : : T → p, s\{a}, a ⊢⊢ c : : T  p, s, a ⊢ b ⊢ c : : T^{+} → p, s, a ⊕ b ⊢ c : : T
∀x: p : : s : : c : : T → p : : s : : ∀x: c : : T^{3}  p, s, a ⊕ b ⊢ c : : T^{−} → p, s, a ⊢ b ⊢ c : : T
p, s, a ⊢ c : : T^{⊳} → p ∪ {a} : : s : : c : : T  p : : s : : c : : T i.e. n → p : : s : : n : : T^{4}
p, s, a ⊢⊢ c : : T^{⊳} → p : : s ∪ {a} : : c : : T  p : : s : : n : : T^{∗} → p : : s : : c : : T^{4}
p_{1} : : s_{1} : : c_{1} : : T; p_{2} : : s_{2} : : c_{2} : : T → p_{1} ∪ p_{2}\{c_{1}} : : s_{1} ∪ s_{2} : : c_{2} : : T

Evaluation of a sequent operation gives a sequent or an exception. Exceptional cases are omitted above. Now let A′ denote T ⊢ ∀\underline{a}: \underline{a} + 0 = \underline{a}. We have

T ⊢ T^{I}^{⊳} ^{∗}; R ⊕ C ⊢ L^{I}^{+}^{∗} i.e. A′  →
T ⊢ ∅, ∅, T ⊢ T : : T^{⊳} ^{∗}; R ⊕ C ⊢ ∅, ∅, A ⊢ A : : T^{+}^{∗} i.e. A′  →
T ⊢ {T} : : ∅ : : T : : T^{∗}; ∅, ∅, R ⊕ C ⊢ A ⊢ A : : T^{+}^{∗} i.e. A′  →
T ⊢ {T}, ∅, R ⊕ C ⊕ A : : T; ∅, ∅, R ⊕ C ⊕ A ⊢ A : : T^{∗} i.e. A′  →
T ⊢ {T}, ∅, R ⊕ C ⊕ A : : T; {R ⊕ C ⊕ A} : : ∅ : : A : : T^{∗} i.e. A′  →
T ⊢ \{T\} : : ∅ : : L : : T^{∗} i.e. A′ → T ⊢ \{T\} : : ∅ : : ∀\underline{a}: \underline{a} + 0 = \underline{a} : : T i.e. A′ →

∅, ∅, T ⊢ ∀\underline{a}: \underline{a} + 0 = \underline{a} : : T i.e. A′ → ∅ : : ∅ : : A′ : : T

which proves A′. The syntax of Logiweb sequent terms reads \underline{q} ::= \underline{s}^{I} | \underline{s} ⊢ \underline{q} | \underline{s} ⊢⊢ \underline{q} | ∀\underline{v}: \underline{q} | \underline{q}^{⊳} | \underline{q} @ \underline{s} | \underline{q}^{V} | \underline{q}^{+} | \underline{q}^{−} | \underline{q} i.e. \underline{s} | \underline{q}^{∗} | \underline{q}; \underline{q}. A sequent term q is said to prove the statement c if q evaluates to ∅ : : ∅ : : c : : T ([Gru05b] allows q to evaluate to p : : ∅ : : c : : T provided all elements of p are names of previously proved lemmas).

3 Object theories

Logiweb sequent calculus is like assembly language: general and machine friendly, but it needs syntactic sugar. The user friendliness of the combined system of Logiweb, Logiweb sequent calculus, and syntactic sugar has been tested during a course in logic in which ten students wrote Logiweb pages that proved \overline{x} + \overline{y} = \overline{y} + \overline{x} from the raw axioms of Mendelsons system S (Peano arithmetic) [Men87]. It was found that the students could prove commutativity, get the proof verified, and write a report on that in less than three weeks, starting with little experience in Logiweb, mechanical proof checking, and logic in general. For links to the reports, consult http://yoa.dk/. While proving \overline{x} + \overline{y} = \overline{y} + \overline{x} from the raw axioms may be a good student exercise, it was found that the deduction theorem and parallel instantiation of object variables was badly needed. Versions of theorems that used inference ⊢ and meta variables were easier to use than theorems using implication ⇒ and object variables, but the axiom of induction forced implication and object variables upon the students. Instantiation of object variables is cumbersome because axiom A4 in [Men87] only allows to instantiate one variable at a time whereas the students needed parallel instantiation, e.g. when swapping two object variables. And hypothetical reasoning either required manual unfolding of the deduction theorem or programming of a proof tactic that could cost a lot of CPU-time for large developments.

1 if a is free for x in c 2 if computation of a yields T in the Logiweb programming language 3 if x is not free in any member of p or s 4 if n is defined to denote c

An inference rule of deduction would eliminate these problems. If, however, ∀_{obj}\overline{x}: ∀_{obj}\overline{y}: \overline{x} = \overline{y} ⇒ \overline{y} = \overline{x} is an object statement and ∀\underline{a}: ∀\underline{b}: \underline{a} = \underline{b} ⊢ \underline{b} = \underline{a} is a meta statement, then the deduction rule is a meta meta statement. We do not want to introduce a meta meta level above the Logiweb sequent calculus just to express deduction so we shall express deduction using the side condition machinery of the sequent calculus.

3.1 Peano arithmetic

A modified version of Mendelsons system S (Peano arithmetic) [Men87] may be formulated thus:

[S →^{stmt} ∀\underline{a}: ∀\underline{b}: \underline{a} + \underline{b}′ = \underline{a} + \underline{b}′ ⊕ ∀\underline{a}: ∀\underline{b}: \underline{a} ⇒ \underline{b} ⊢ \underline{a} ⊢ \underline{b} ⊕ ∀\underline{a}: ∀\underline{b}: \underline{a} = \underline{b} ⊢ \underline{a}′ = \underline{b}′ ⊕ ∀\underline{a}: ∀\underline{b}: \underline{a}′ = \underline{b}′ ⊢ \underline{a} = \underline{b} ⊕ ∀\underline{a}: ∀\underline{b}: λx.Ded_{0}(⌈\underline{a}⌉, ⌈\underline{b}⌉) ⊢⊢ \underline{a} ⊢ \underline{b} ⊕ ∀\underline{a}: ∀\underline{b}: \underline{a} · \underline{b}′ = \underline{a} · \underline{b} + \underline{a} ⊕ ∀\underline{a}: \underline{a} + 0 = \underline{a} ⊕ ∀\underline{a}: ¬¬\underline{a} ⊢ \underline{a} ⊕ ∀\underline{a}: ∀\underline{b}: ∀\underline{c}: \underline{a} = \underline{b} ⊢ \underline{a} = \underline{c} ⊢ \underline{b} = \underline{c} ⊕ ∀\underline{x}: ∀\underline{a}: ∀\underline{b}: ∀\underline{c}: ⟨⌈\underline{b}⌉≡^{0}⌈\underline{a}⌉|⌈\underline{x}⌉:=⌈0⌉⟩ ⊢⊢ ⟨⌈\underline{c}⌉≡^{0}⌈\underline{a}⌉|⌈\underline{x}⌉:=⌈\underline{x}′⌉⟩ ⊢⊢ \underline{b} ⊢ \underline{a} ⇒ \underline{c} ⊢ \underline{a} ⊕ ∀\underline{a}: ¬0 = \underline{a}′ ⊕ ∀\underline{x}: ∀\underline{a}: \underline{a} ⊢ ∀_{obj}\underline{x}: \underline{a} ⊕ ∀\underline{a}: \underline{a} · 0 = 0] [MP →^{stmt} S ⊢ ∀\underline{a}: ∀\underline{b}: \underline{a} ⇒ \underline{b} ⊢ \underline{a} ⊢ \underline{b}][MP →^{proof}

Rule tactic]

[Gen →^{stmt} S ⊢ ∀\underline{x}: ∀\underline{a}: \underline{a} ⊢ ∀_{obj}\underline{x}: \underline{a}][Gen →^{proof} Rule tactic] [Ded →^{stmt} S ⊢ ∀\underline{a}: ∀\underline{b}: λx.Ded_{0}(⌈\underline{a}⌉, ⌈\underline{b}⌉) ⊢⊢

\underline{a} ⊢ \underline{b}][Ded →^{proof} Rule tactic]

[Neg →^{stmt} S ⊢ ∀\underline{a}: ¬¬\underline{a} ⊢ \underline{a}][Neg →^{proof} Rule tactic] [S2 →^{stmt} S ⊢ ∀\underline{a}: ∀\underline{b}: \underline{a} = \underline{b} ⊢ \underline{a}′ = \underline{b}′][S2 →^{proof}

Rule tactic]

[S3 →^{stmt} S ⊢ ∀\underline{a}: ¬0 = \underline{a}′][S3 →^{proof} Rule tactic] [S4 →^{stmt} S ⊢ ∀\underline{a}: ∀\underline{b}: \underline{a}′ = \underline{b}′ ⊢ \underline{a} = \underline{b}][S4 →^{proof}

Rule tactic]

[S5 →^{stmt} S ⊢ ∀\underline{a}: \underline{a} + 0 = \underline{a}][S5 →^{proof} Rule tactic] [S6 →^{stmt} S ⊢ ∀\underline{a}: ∀\underline{b}: \underline{a} + \underline{b}′ = \underline{a} + \underline{b}′][S6 →^{proof}

Rule tactic]

[S7 →^{stmt} S ⊢ ∀\underline{a}: \underline{a} · 0 = 0][S7 →^{proof} Rule tactic] [S8 →^{stmt} S ⊢ ∀\underline{a}: ∀\underline{b}: \underline{a} · \underline{b}′ = \underline{a} · \underline{b} + \underline{a}][S8 →^{proof}

Rule tactic]

[S1 →^{stmt} S ⊢ ∀\underline{a}: ∀\underline{b}: ∀\underline{c}: \underline{a} = \underline{b} ⊢ \underline{a} = \underline{c} ⊢ \underline{b} = \underline{c}][S1 →^{proof} Rule tactic]

[S9 →^{stmt} S ⊢ ∀\underline{x}: ∀\underline{a}: ∀\underline{b}: ∀\underline{c}: ⟨⌈\underline{b}⌉≡^{0}⌈\underline{a}⌉|⌈\underline{x}⌉:=⌈0⌉⟩ ⊢⊢ ⟨⌈\underline{c}⌉≡^{0}⌈\underline{a}⌉|⌈\underline{x}⌉:=⌈\underline{x}′⌉⟩ ⊢⊢ \underline{b} ⊢

\underline{a} ⇒ \underline{c} ⊢ \underline{a}][S9 →^{proof} Rule tactic]^{5}

As defined in [Gru05b], [S5 →^{stmt} S ⊢ ∀\underline{a}: \underline{a} + 0 = \underline{a}][S5 →^{proof} Rule tactic] macro expands into a lemma and a proof where the lemma says S ⊢ ∀\underline{a}: \underline{a} + 0 = \underline{a} and the proof is a proof of that lemma. [S →^{stmt} ∀\underline{a}: ∀\underline{b}: \underline{a} + \underline{b}′ = \underline{a} + \underline{b}′ ⊕ ∀\underline{a}: ∀\underline{b}: \underline{a} ⇒ \underline{b} ⊢ \underline{a} ⊢ \underline{b} ⊕ ∀\underline{a}: ∀\underline{b}: \underline{a} = \underline{b} ⊢ \underline{a}′ = \underline{b}′ ⊕ ∀\underline{a}: ∀\underline{b}: \underline{a}′ = \underline{b}′ ⊢ \underline{a} = \underline{b} ⊕ ∀\underline{a}: ∀\underline{b}: λx.Ded_{0}(⌈\underline{a}⌉, ⌈\underline{b}⌉) ⊢⊢ \underline{a} ⊢ \underline{b} ⊕ ∀\underline{a}: ∀\underline{b}: \underline{a} · \underline{b}′ = \underline{a} · \underline{b} + \underline{a} ⊕ ∀\underline{a}: \underline{a} + 0 = \underline{a} ⊕ ∀\underline{a}: ¬¬\underline{a} ⊢ \underline{a} ⊕ ∀\underline{a}: ∀\underline{b}: ∀\underline{c}: \underline{a} = \underline{b} ⊢ \underline{a} = \underline{c} ⊢ \underline{b} = \underline{c} ⊕ ∀\underline{x}: ∀\underline{a}: ∀\underline{b}: ∀\underline{c}: ⟨⌈\underline{b}⌉≡^{0}⌈\underline{a}⌉|⌈\underline{x}⌉:=⌈0⌉⟩ ⊢⊢ ⟨⌈\underline{c}⌉≡^{0}⌈\underline{a}⌉|⌈\underline{x}⌉:=⌈\underline{x}′⌉⟩ ⊢⊢ \underline{b} ⊢ \underline{a} ⇒ \underline{c} ⊢ \underline{a} ⊕ ∀\underline{a}: ¬0 = \underline{a}′ ⊕ ∀\underline{x}: ∀\underline{a}: \underline{a} ⊢ ∀_{obj}\underline{x}: \underline{a} ⊕ ∀\underline{a}: \underline{a} · 0 = 0] macro expands into a definition which defines S as the conjunction of ∀\underline{a}: \underline{a} + 0 = \underline{a} and all the other rules attributed to S. The [X →^{stmt} x] macro is somewhat complex since it has to scan the entire page to find all rules related to the theory being defined. The benefit of collecting rules from the entire page is that it gives authors the freedom to introduce axioms one by one.

5 ⟨⌈\underline{a}⌉≡^{0}⌈\underline{b}⌉|⌈\underline{x}⌉:=⌈\underline{c}⌉⟩ says ‘the object term \underline{b} where the object variable \underline{x} is replaced by the object term \underline{c} is alpha equivalent to the object term \underline{a}, c.f. [Gru06]

The deduction rule Ded is such that e.g. ∀\underline{a}: ∀\underline{b}: \underline{a} = \underline{b} ⊢ \underline{b} = \underline{a} allows to conclude \underline{a} = \underline{b} ⇒ \underline{b} = \underline{a} and \overline{x} + \overline{y} = \overline{y} + \overline{x} allows to conclude \underline{a} + \underline{b} = \underline{b} + \underline{a} so Ded implements both deduction and parallel instantiation. All complexity is hidden in the side condition which is defined in [Gru06]. Having the deduction rule, axioms A1, A2, A4, and A5 in [Men87] become superfluous. For proofs of those axioms based on deduction, see [Gru06]. As an example of a development, [Gru06] proves the following lemmas from [Men87] in system S:

[Prop 3.2a →^{stmt} S ⊢ ∀\underline{a}: \underline{a} = \underline{a}] [Prop 3.2b →^{stmt} S ⊢ ∀\underline{a}: ∀\underline{b}: \underline{a} = \underline{b} ⊢ \underline{b} = \underline{a}] [Prop 3.2c →^{stmt} S ⊢ ∀\underline{a}: ∀\underline{b}: ∀\underline{c}: \underline{a} = \underline{b} ⊢ \underline{b} = \underline{c} ⊢ \underline{a} = \underline{c}] [Prop 3.2d →^{stmt} S ⊢ ∀\underline{a}: ∀\underline{b}: ∀\underline{c}: \underline{a} = \underline{c} ⊢ \underline{b} = \underline{c} ⊢ \underline{a} = \underline{b}] [Prop 3.2e →^{stmt} S ⊢ ∀\underline{a}: ∀\underline{b}: ∀\underline{c}: \underline{a} = \underline{b} ⊢ \underline{a} + \underline{c} = \underline{b} + \underline{c}] [Prop 3.2f →^{stmt} S ⊢ ∀\underline{a}: \underline{a} = 0 + \underline{a}] [Prop 3.2g →^{stmt} S ⊢ ∀\underline{a}: ∀\underline{b}: \underline{a}′ + \underline{b} = \underline{a} + \underline{b}′] [Prop 3.2h →^{stmt} S ⊢ ∀\underline{a}: ∀\underline{b}: \underline{a} + \underline{b} = \underline{b} + \underline{a}]

In the present paper we merely show the proof of an auxiliary lemma which proves the induction step of Prop 3.2f:

[Prop 3.2f_{2} →^{stmt} S ⊢ ∀\underline{a}: \underline{a} = 0 + \underline{a} ⇒ \underline{a}′ = 0 + \underline{a}′]

[Prop 3.2f_{2} →^{proof} λc.λx.P(⌈S ⊢ ∀\underline{a}: ∀\underline{a}: \underline{a} = 0 + \underline{a} ⊢ S2 ⊳ \underline{a} = 0 + \underline{a} ≫ \underline{a}′ = 0 + \underline{a}′; S6 ≫ 0 + \underline{a}′ = 0 + \underline{a}′; Prop 3.2d ⊳ \underline{a}′ = 0 + \underline{a}′ ⊳ 0 + \underline{a}′ = 0 + \underline{a}′ ≫ \underline{a}′ = 0 + \underline{a}′; Ded ⊳ ∀\underline{a}: \underline{a} = 0 + \underline{a} ⊢ \underline{a}′ = 0 + \underline{a}′ ≫ \underline{a} = 0 + \underline{a} ⇒ \underline{a}′ = 0 + \underline{a}′⌉, p_{0}, c)]

As defined in [Gru05b], ∀\underline{a}: \underline{b} macro expands into ∀\underline{a}: \underline{b}. S2 ⊳ L04 ≫ \underline{a}′ = 0 + \underline{a}′; \underline{b} macro expands into a local macro definition and a call to a proof tactic. The local macro definition defines L05 as shorthand for \underline{a}′ = 0 + \underline{a}′ and the proof tactic expands the line into S2^{I}^{⊳} ^{∗}^{⊳} @ \underline{a} @ 0 + \underline{a}; \underline{b} using unification. For more details see [Gru06].

4 Conclusion and further work

Logiweb sequent calculus with examples from traditional Peano arithmetic has been presented. For further examples, click ‘Map Theory’ at http://yoa.dk/. Map theory is an equational theory. In that theory, all definitions present on a lemmas home page become axioms according to an ‘axiom of definition’ which is expressible by a side condition in the Logiweb sequent calculus. The traditional deduction theorem requires that no application of Gen is made to variables free in the premise. The side condition of the deduction rule above is quite different. Proving the consistency of the deduction rule is work of the future but is expected to be straightforward since, in the standard model, a statement holds for all natural numbers if and only if it holds for all terms.

References

[Gru04] K. Grue. Logiweb. In Fairouz Kamareddine, editor, Mathematical Knowledge Management Symposium 2003, volume 93 of Electronic Notes in Theoretical Computer Science, pages 70–101. Elsevier, 2004.

[Gru05a] K. Grue. The implementation of logiweb. In Bernd Fischer, Stephan Schulz, and Geoff Sutcliffe, editors, Empirically Successful Classical Automated Reasoning (ESCAR), 2005.

[Gru05b] K. Grue. A logiweb base page. Technical report, Logiweb, 2005. http://www.diku.dk/cgi−bin/cginetd/grue/relay/go/018040352BB22FB1B6

433E6EBEAC52191C8D2C270588A4F6A5EEDBA00806/2/.

[Gru06] K. Grue. Logiweb sequent calculus, appendix. Technical report, Logiweb, 2006. http://www.diku.dk/cgi−bin/cginetd/grue/relay/go/01827245F0F1

67F3F10B82632D74D1466DB6371642ECC689ADACF5A00806/2/body/tex/

appendix.pdf.

[Men87] E. Mendelson. Introduction to Mathematical Logic. Wadsworth and Brooks, 3. edition, 1987.

This article was processed using the L^{A}TEX macro package with LLNCS style