summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/turnstile/turnstile-pt/turnstile-pt.dtx
blob: 07253bf95cf3b64421f3bd0a66f1aca16b335c31 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
% \iffalse meta-comment

% Este arquivo pode ser distribuído e/ou modificado sob as condições da Licença Pública do Projeto LaTeX, tanto a versão 1.2 desta licença ou (por sua opção) qualquer versão anterior.
%
% A derradeira versão desta licença está em:

%    http://www.latex-project.org/lppl.txt

% e a versão 1.2 ou anterior é parte de todas as distribuições do LaTeX, versão de 1/12/1999 ou anterior.

% \fi

% \iffalse
%<*driver>
\ProvidesFile{turnstile-pt.dtx}
%</driver>
%<package>\ProvidesPackage{turnstile}
%<*package>
    [2007/06/23 v1.0 turnstile file]
%</package>
%
%<*driver>
\documentclass{ltxdoc}
\usepackage{ifthen}
\usepackage[english,brazil]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}

\EnableCrossrefs
\CodelineIndex
\RecordChanges

\begin{document}
  \DocInput{turnstile-pt.dtx}
  \PrintChanges
  \PrintIndex
\end{document}

%</driver>
% \fi
%
% \CheckSum{0}
%
%
% \changes{v1.0}{2007/06/23}{Initial version}
%
% \GetFileInfo{turnstile-pt.dtx}
%
% \DoNotIndex{\if}
%
%
% \title{O pacote \textsf{turnstile}}
% \author{%
%  Arthur Buchsbaum\\
%  Francisco Reinaldo\\
%  \texttt{arthur@inf.ufsc.br, reinaldo.opus@gmail.com}}
% \date{\filedate\qquad\fileversion}
%
% \maketitle
%
% \begin{abstract}
% \noindent\textsf{turnstile} é uma classe baseada em \texttt{article.cls}, utilizada para a composição de artigos. Entre outras utilizações, a barra de Frege é usada para denotar a relação de conseqüência, com respeito a uma dada lógica, entre coleções de fórmulas e fórmulas. Este pacote foi feito para desenhar a barra de Frege em várias formas, e para colocar dados abaixo e acima deste símbolo.

% \end{abstract}
%
% \tableofcontents
%
% \section{Introdução}
%
% Neste pacote são dadas rotinas para o desenho da barra de Frege\footnote{Gottlob Frege (1848--1925) é considerado por muitos o pai da lógica quantificacional e da moderna filosofia da linguagem, e adotou em sua obra o símbolo que é o tema deste pacote.}, em quase todas as formas em que esta pode ser utilizada, desde as relações de conseqüência sintáticas e semânticas, até o forcing. Uma barra de Frege é constituída usualmente de duas linhas, uma vertical e uma horizontal. Cada uma delas pode ser simples, dupla ou tripla, dependendo do tipo de relação de conseqüência que se queira representar.

% \section{Macros do Usuário}
%
% Abaixo da barra de Frege é muitas vezes colocado o nome de uma dada lógica, enquanto que, às vezes, alguma informação complementar acima desta. O tamanho das expressões colocadas abaixo ou acima deste símbolo determina a sua largura, e daí também a largura de sua linha horizontal.
%
% \section{Código}
%
% Identificação e uso do pacote \textsf{ifthen}.
%    \begin{macrocode}
\RequirePackage{ifthen}
%    \end{macrocode}
%
% \subsection{Macro: $\backslash$newlength}
%
% \DescribeMacro{\newlength} A macro |\newlength{|\meta{command}|}| pode ser usada para especificar um parâmetro para comprimento.
%
% \subsubsection{Comandos Internos}
%
% \DescribeMacro{\firstwidth} A largura da expressão a ser colocada abaixo da barra de Frege.
%    \begin{macrocode}
\newlength{\firstwidth}
%    \end{macrocode}
%
% \DescribeMacro{\secondwidth} A largura da expressão a ser colocada acima da barra de Frege.
%    \begin{macrocode}
\newlength{\secondwidth}
%    \end{macrocode}

% \DescribeMacro{\extrawidth} O comprimento extra da linha horizontal a ser colocado antes e depois da expressão mais larga.
%    \begin{macrocode}
\newlength{\extrawidth}
%    \end{macrocode}

% \DescribeMacro{\leasturnstilewidth} O comprimento da linha horizontal quando nenhuma expressão é colocada abaixo ou acima.
%    \begin{macrocode}
\newlength{\leasturnstilewidth}
%    \end{macrocode}

% \DescribeMacro{\turnstilewidth} O comprimento da linha horizontal.
%    \begin{macrocode}
\newlength{\turnstilewidth}
%    \end{macrocode}

% \DescribeMacro{\turnstileheight} O comprimento da linha vertical.
%    \begin{macrocode}
\newlength{\turnstileheight}
%    \end{macrocode}

% \DescribeMacro{\dashthickness} A grossura dos traços que compõem as linhas da barra de Frege.
%    \begin{macrocode}
\newlength{\dashthickness}
%    \end{macrocode}

% \DescribeMacro{\ddashthickness} A distância padrão entre dois traços de uma linha dupla ou tripla.
%    \begin{macrocode}
\newlength{\ddashthickness}
%    \end{macrocode}


% \DescribeMacro{\raiseup} A distância vertical pela qual a expressão a ser colocada acima da barra de Frege é deslocada.
%    \begin{macrocode}
\newlength{\raiseup}
%    \end{macrocode}

% \DescribeMacro{\raisedown} A distância vertical pela qual a expressão a ser colocada abaixo da barra de Frege é deslocada.
%    \begin{macrocode}
\newlength{\raisedown}
%    \end{macrocode}

% \DescribeMacro{\tinyverdistance} A pequena distância adicional para deslocar uma expressão para cima ou para baixo, dependendo se a linha horizontal é simples, dupla ou tripla, e da grossura do traço usado para a composição de qualquer linha da barra de Frege.
%    \begin{macrocode}
\newlength{\tinyverdistance}
%    \end{macrocode}

% \DescribeMacro{\verdistance} A distância entre a expressão acima ou abaixo e a linha horizontal.
%    \begin{macrocode}
\newlength{\verdistance}
%    \end{macrocode}

% \DescribeMacro{\lift} A distância vertical pela qual a composição final da barra de Frege deve ser alçada.
%    \begin{macrocode}
\newlength{\lift}
%    \end{macrocode}

% \DescribeMacro{\lengthvar}  Esta é somente uma variável de comprimento auxiliar.
%    \begin{macrocode}
\newlength{\lengthvar}
%    \end{macrocode}
%
% \subsection{Macro: $\backslash$newsavebox}
%
% \DescribeMacro{\newsavebox} |\newsavebox{|\meta{command}|}| é usado para armazenar qualquer expressão que compõe a barra de Frege, incluindo a composição completa deste sinal juntamente com as expressões que o acompanham eventualmente.
%
% \subsubsection{Comandos Internos}
%
% \DescribeMacro{\first} Contém a expressão a ser colocada abaixo da barra de Frege.
%    \begin{macrocode}
\newsavebox{\first}
%    \end{macrocode}

% \DescribeMacro{\second} Contém a expressão a ser colocada acima da barra de Frege.
%    \begin{macrocode}
\newsavebox{\second}
%    \end{macrocode}

% \DescribeMacro{\turnstilebox}  Contém a composição final da barra de Frege, eventualmente antes da colocação de espaços antes e depois desta, dependendo se esta será usada ou não como uma relação binária.

%    \begin{macrocode}
\newsavebox{\turnstilebox}
%    \end{macrocode}
%
% \subsection{Macro: $\backslash$makever}
%
% \DescribeMacro{\makever} |\makever{|\meta{command}|}[|\meta{params}|]| |\makever| é uma rotina usada pelo comando |\turnstile|, a qual compõe uma linha vertical para a barra de Frege (algumas versões deste símbolo têm duas linhas verticais: uma antes e uma depois da linha horizontal). Usa quatro argumentos. O primeiro informa o tipo da linha, ``n'' quando não há nenhum traço, ``s'' para uma linha simples, ``d'' para uma linha dupla, e ``t'' para uma linha tripla; o segundo informa a grossura de cada traço; o terceiro o comprimento da linha vertical; e finalmente o quarto a distância entre dois traços adjacentes. Naturalmente, |\makever| não desenha nada se o primeiro argumento for ``n''.

%    \begin{macrocode}
\newcommand{\makever}[4]
           {\ifthenelse{\equal{#1}{s}}{\rule[-0.5#3]{#2}{#3}}{}
            \ifthenelse{\equal{#1}{d}}{\rule[-0.5#3]{#2}{#3}
                                       \hspace{#4}
                                       \rule[-0.5#3]{#2}{#3}}{}
            \ifthenelse{\equal{#1}{t}}{\rule[-0.5#3]{#2}{#3}
                                       \hspace{#4}
                                       \rule[-0.5#3]{#2}{#3}
                                       \hspace{#4}
                                       \rule[-0.5#3]{#2}{#3}}{}}
%    \end{macrocode}
%
% \subsection{Macro: $\backslash$makehor}
%
% \DescribeMacro{\makehor} |\makehor{|\meta{command}|}[|\meta{params}|]| |\makehor| também é uma rotina para o comando |\turnstile|, a qual compõe uma linha horizontal para a barra de Frege. Usa quatro argumentos. O primeiro dá o tipo da linha, ``n'' quando não há nenhum traço, ``s'' para uma linha simples, ``d'' para uma linha dupla, e ``t'' para uma linha tripla; o segundo informa a grossura de cada traço; o terceiro o comprimento da linha horizontal; e finalmente o quarto a distância entre dois traços adjacentes. |\makehor| somente avança um espaço horizontal para a direita de |\turnstilewidth| se o primeiro argumento for igual a ``n'', para pelo menos dar espaço para as duas expressões a serem colocadas abaixo e acima da barra de Frege.

%    \begin{macrocode}
\newcommand{\makehor}[4]
    {\ifthenelse{\equal{#1}{n}}{\hspace{#3}}{}
     \ifthenelse{\equal{#1}{s}}{\rule[-0.5#2]{#3}{#2}}{}
     \ifthenelse{\equal{#1}{d}}{\setlength{\lengthvar}{#2}
            \addtolength{\lengthvar}{0.5#4}
            \rule[-\lengthvar]{#3}{#2}
            \hspace{-#3}
            \rule[0.5#4]{#3}{#2}}{}
    \ifthenelse{\equal{#1}{t}}{\setlength{\lengthvar}{1.5#2}
        \addtolength{\lengthvar}{#4}
        \rule[-\lengthvar]{#3}{#2}
        \hspace{-#3}
        \rule[-0.5#2]{#3}{#2}
        \hspace{-#3}
        \setlength{\lengthvar}{0.5#2}
        \addtolength{\lengthvar}{#4}
        \rule[\lengthvar]{#3}{#2}}{}}
%    \end{macrocode}

% \subsection{Macro: $\backslash$turnstile}
%
% \DescribeMacro{\turnstile} |\turnstile{|\meta{6}|}[|\meta{params}|]| |\turnstile| compõe uma barra de Frege, juntamente com as expressões internas que eventualmente a acompanham.
%
% O primeiro argumento é opcional, este informa o tamanho no qual as expressões internas devem ser exibidas, ``d'' para expressões (normalmente) em linhas exclusivas, ``t'' para expressões (normalmente) inseridas no texto corrente, ``s'' para expressões subscritas ou sobrescritas, e ``ss'' para expressões ainda menores, subscritas ou sobrescritas com respeito às do tipo anterior. O valor predeterminado é ``s''. O resultado de aplicar ``d'' ou ``t'' é o mesmo, a não ser que haja um sinal matemático no segundo ou terceiro argumento exibido de formas distintas, dependendo se este está em expressões (normalmente) de linhas exclusivas, ou em expressões (normalmente) inseridas no texto corrente.

% O segundo argumento informa o tipo da linha vertical que precede a linha horizontal, ``s'' para uma linha simples de um só traço, ``d'' para uma linha dupla, ``t'' para uma linha tripla e ``n'' quando nenhuma linha é desenhada antes da linha horizontal.

% O terceiro argumento dá o tipo da linha vertical, de uma forma análoga.

% O quarto e quinto argumentos dão respectivamente as expressões a serem colocadas abaixo e acima da barra de Frege, onde ambas são convertidas para o tamanho especificado pelo primeiro argumento.

% Finalmente, o sexto argumento dá o tipo da segunda linha vertical, se esta existir, também de uma forma análoga à feita para o segundo e terceiro argumentos.

%    \begin{macrocode}
\newcommand{\turnstile}[6][s]
    {\ifthenelse{\equal{#1}{d}}
        {\sbox{\first}{$\displaystyle{#4}$}
        \sbox{\second}{$\displaystyle{#5}$}}{}
    \ifthenelse{\equal{#1}{t}}
        {\sbox{\first}{$\textstyle{#4}$}
        \sbox{\second}{$\textstyle{#5}$}}{}
    \ifthenelse{\equal{#1}{s}}
        {\sbox{\first}{$\scriptstyle{#4}$}
        \sbox{\second}{$\scriptstyle{#5}$}}{}
    \ifthenelse{\equal{#1}{ss}}
        {\sbox{\first}{$\scriptscriptstyle{#4}$}
        \sbox{\second}{$\scriptscriptstyle{#5}$}}{}
    \setlength{\dashthickness}{0.111ex}
    \setlength{\ddashthickness}{0.35ex}
    \setlength{\leasturnstilewidth}{0.8em}
    \setlength{\extrawidth}{0.2em}
    \ifthenelse{%
      \equal{#3}{n}}{\setlength{\tinyverdistance}{0ex}}{}
    \ifthenelse{%
      \equal{#3}{s}}{\setlength{\tinyverdistance}{0.5\dashthickness}}{}
    \ifthenelse{%
      \equal{#3}{d}}{\setlength{\tinyverdistance}{0.5\ddashthickness}
        \addtolength{\tinyverdistance}{\dashthickness}}{}
    \ifthenelse{%
      \equal{#3}{t}}{\setlength{\tinyverdistance}{1.5\dashthickness}
        \addtolength{\tinyverdistance}{\ddashthickness}}{}
        \setlength{\verdistance}{0.4ex}
        \settoheight{\lengthvar}{\usebox{\first}}
        \setlength{\raisedown}{-\lengthvar}
        \addtolength{\raisedown}{-\tinyverdistance}
        \addtolength{\raisedown}{-\verdistance}
        \settodepth{\raiseup}{\usebox{\second}}
        \addtolength{\raiseup}{\tinyverdistance}
        \addtolength{\raiseup}{\verdistance}
        \setlength{\lift}{0.8ex}
        \settowidth{\firstwidth}{\usebox{\first}}
        \settowidth{\secondwidth}{\usebox{\second}}
        \ifthenelse{\lengthtest{\firstwidth = 0ex}
            \and
            \lengthtest{\secondwidth = 0ex}}
                {\setlength{\turnstilewidth}{\leasturnstilewidth}}
                {\setlength{\turnstilewidth}{2\extrawidth}
        \ifthenelse{\lengthtest{\firstwidth < \secondwidth}}
            {\addtolength{\turnstilewidth}{\secondwidth}}
            {\addtolength{\turnstilewidth}{\firstwidth}}}
    \setlength{\turnstileheight}{3ex}
    \sbox{\turnstilebox}
    {\raisebox{\lift}{\ensuremath{
        \makever{#2}{\dashthickness}{\turnstileheight}{\ddashthickness}
        \makehor{#3}{\dashthickness}{\turnstilewidth}{\ddashthickness}
        \hspace{-\turnstilewidth}
        \raisebox{\raisedown}
        {\makebox[\turnstilewidth]{\usebox{\first}}}
            \hspace{-\turnstilewidth}
            \raisebox{\raiseup}
            {\makebox[\turnstilewidth]{\usebox{\second}}}
        \makever{#6}{\dashthickness}{\turnstileheight}{\ddashthickness}}}}
        \mathrel{\usebox{\turnstilebox}}}
%    \end{macrocode}
%
% \subsection{Macro: $\backslash$??tstile , $\backslash$???tstile}
%
% \DescribeMacro{\??tstile}
% \DescribeMacro{\???tstile}
% A seguir são dados mais alguns comandos feitos para facilitar a chamada do comando |\turnstile|. Antes da samblagem ``tstile'', presente no nome de todos estes comandos, é colocada uma outra samblagem de duas ou três letras. Estas letras indicam o tipo das linhas a serem desenhadas sucessivamente; elas podem ser ``n'', ``s'', ``d'' ou ``t''. A letra ``n'' informa que a linha correspondente é vazia, a letra ``s'' que a linha é simples, a letra ``d'' que é dupla, e finalmente a letra ``t'' que é tripla.

% Os comandos correspondentes às samblagens de duas letras resultam nas barras de Frege mais utilizadas, nas quais não é desenhada uma segunda linha vertical seguindo a linha horizontal. A primeira letra destas samblagens indica o tipo da linha vertical, enquanto que a segunda o tipo da linha horizontal a ser desenhada após a linha vertical. As samblagens de três letras podem conter qualquer uma das letras ``n'', ``s'', ``d'' ou ``t'', com a restrição de que a derradeira letra seja distinta de ``n'', porque o caso no qual a terceira linha é vazia já foi tratado pelos comandos com samblagens de duas letras precedendo ``tstile''. A primeira letra informa o tipo da primeira linha vertical, a segunda o tipo da linha horizontal e, finalmente, a terceira o tipo da segunda linha vertical.

% Abaixo são dados os comandos compondo barras de Frege com uma linha vertical seguida de uma linha horizontal, onde qualquer uma destas linhas pode ser vazia, e os comandos compondo barras de Frege com uma segunda linha vertical, além da primeira, onde as duas primeiras linhas podem ser vazias, mas não a segunda linha vertical.

% Todos estes comandos têm três argumentos, onde o primeiro é opcional.

% O primeiro argumento é opcional, este informa o tamanho em que as expressões internas na barra de Frege devem ser exibidas, ``d'' para expressões (normalmente) em linhas exclusivas, ``t'' para expressões (normalmente) inseridas no texto corrente, ``s'' para expressões subscritas ou sobrescritas, e ``ss'' para expressões ainda menores, subscritas ou sobrescritas com respeito às do tipo anterior. O valor predeterminado é ``s''. O resultado de aplicar ``d'' ou ``t'' é o mesmo, a não ser que haja um sinal matemático no segundo ou terceiro argumento exibido de formas distintas, dependendo se este está em expressões (normalmente) de linhas exclusivas, ou em expressões (normalmente) inseridas no texto corrente.

% O segundo e terceiro argumentos dão respectivamente as expressões a serem colocadas abaixo e acima da barra de Frege, onde ambas são convertidas ao tamanho especificado no primeiro argumento.

%    \begin{macrocode}
\newcommand{\nntstile}[3][s]{\turnstile[#1]{n}{n}{#2}{#3}{n}}
\newcommand{\nststile}[3][s]{\turnstile[#1]{n}{s}{#2}{#3}{n}}
\newcommand{\ndtstile}[3][s]{\turnstile[#1]{n}{d}{#2}{#3}{n}}
\newcommand{\nttstile}[3][s]{\turnstile[#1]{n}{t}{#2}{#3}{n}}

\newcommand{\sntstile}[3][s]{\turnstile[#1]{s}{n}{#2}{#3}{n}}
\newcommand{\sststile}[3][s]{\turnstile[#1]{s}{s}{#2}{#3}{n}}
\newcommand{\sdtstile}[3][s]{\turnstile[#1]{s}{d}{#2}{#3}{n}}
\newcommand{\sttstile}[3][s]{\turnstile[#1]{s}{t}{#2}{#3}{n}}

\newcommand{\dntstile}[3][s]{\turnstile[#1]{d}{n}{#2}{#3}{n}}
\newcommand{\dststile}[3][s]{\turnstile[#1]{d}{s}{#2}{#3}{n}}
\newcommand{\ddtstile}[3][s]{\turnstile[#1]{d}{d}{#2}{#3}{n}}
\newcommand{\dttstile}[3][s]{\turnstile[#1]{d}{t}{#2}{#3}{n}}

\newcommand{\tntstile}[3][s]{\turnstile[#1]{t}{n}{#2}{#3}{n}}
\newcommand{\tststile}[3][s]{\turnstile[#1]{t}{s}{#2}{#3}{n}}
\newcommand{\tdtstile}[3][s]{\turnstile[#1]{t}{d}{#2}{#3}{n}}
\newcommand{\tttstile}[3][s]{\turnstile[#1]{t}{t}{#2}{#3}{n}}

\newcommand{\nnststile}[3][s]{\turnstile[#1]{n}{n}{#2}{#3}{s}}
\newcommand{\nsststile}[3][s]{\turnstile[#1]{n}{s}{#2}{#3}{s}}
\newcommand{\ndststile}[3][s]{\turnstile[#1]{n}{d}{#2}{#3}{s}}
\newcommand{\ntststile}[3][s]{\turnstile[#1]{n}{t}{#2}{#3}{s}}

\newcommand{\nndtstile}[3][s]{\turnstile[#1]{n}{n}{#2}{#3}{d}}
\newcommand{\nsdtstile}[3][s]{\turnstile[#1]{n}{s}{#2}{#3}{d}}
\newcommand{\nddtstile}[3][s]{\turnstile[#1]{n}{d}{#2}{#3}{d}}
\newcommand{\ntdtstile}[3][s]{\turnstile[#1]{n}{t}{#2}{#3}{d}}

\newcommand{\nnttstile}[3][s]{\turnstile[#1]{n}{n}{#2}{#3}{t}}
\newcommand{\nsttstile}[3][s]{\turnstile[#1]{n}{s}{#2}{#3}{t}}
\newcommand{\ndttstile}[3][s]{\turnstile[#1]{n}{d}{#2}{#3}{t}}
\newcommand{\ntttstile}[3][s]{\turnstile[#1]{n}{t}{#2}{#3}{t}}

\newcommand{\snststile}[3][s]{\turnstile[#1]{s}{n}{#2}{#3}{s}}
\newcommand{\ssststile}[3][s]{\turnstile[#1]{s}{s}{#2}{#3}{s}}
\newcommand{\sdststile}[3][s]{\turnstile[#1]{s}{d}{#2}{#3}{s}}
\newcommand{\stststile}[3][s]{\turnstile[#1]{s}{t}{#2}{#3}{s}}

\newcommand{\sndtstile}[3][s]{\turnstile[#1]{s}{n}{#2}{#3}{d}}
\newcommand{\ssdtstile}[3][s]{\turnstile[#1]{s}{s}{#2}{#3}{d}}
\newcommand{\sddtstile}[3][s]{\turnstile[#1]{s}{d}{#2}{#3}{d}}
\newcommand{\stdtstile}[3][s]{\turnstile[#1]{s}{t}{#2}{#3}{d}}

\newcommand{\snttstile}[3][s]{\turnstile[#1]{s}{n}{#2}{#3}{t}}
\newcommand{\ssttstile}[3][s]{\turnstile[#1]{s}{s}{#2}{#3}{t}}
\newcommand{\sdttstile}[3][s]{\turnstile[#1]{s}{d}{#2}{#3}{t}}
\newcommand{\stttstile}[3][s]{\turnstile[#1]{s}{t}{#2}{#3}{t}}

\newcommand{\dnststile}[3][s]{\turnstile[#1]{d}{n}{#2}{#3}{s}}
\newcommand{\dsststile}[3][s]{\turnstile[#1]{d}{s}{#2}{#3}{s}}
\newcommand{\ddststile}[3][s]{\turnstile[#1]{d}{d}{#2}{#3}{s}}
\newcommand{\dtststile}[3][s]{\turnstile[#1]{d}{t}{#2}{#3}{s}}

\newcommand{\dndtstile}[3][s]{\turnstile[#1]{d}{n}{#2}{#3}{d}}
\newcommand{\dsdtstile}[3][s]{\turnstile[#1]{d}{s}{#2}{#3}{d}}
\newcommand{\dddtstile}[3][s]{\turnstile[#1]{d}{d}{#2}{#3}{d}}
\newcommand{\dtdtstile}[3][s]{\turnstile[#1]{d}{t}{#2}{#3}{d}}

\newcommand{\dnttstile}[3][s]{\turnstile[#1]{d}{n}{#2}{#3}{t}}
\newcommand{\dsttstile}[3][s]{\turnstile[#1]{d}{s}{#2}{#3}{t}}
\newcommand{\ddttstile}[3][s]{\turnstile[#1]{d}{d}{#2}{#3}{t}}
\newcommand{\dtttstile}[3][s]{\turnstile[#1]{d}{t}{#2}{#3}{t}}

\newcommand{\tnststile}[3][s]{\turnstile[#1]{t}{n}{#2}{#3}{s}}
\newcommand{\tsststile}[3][s]{\turnstile[#1]{t}{s}{#2}{#3}{s}}
\newcommand{\tdststile}[3][s]{\turnstile[#1]{t}{d}{#2}{#3}{s}}
\newcommand{\ttststile}[3][s]{\turnstile[#1]{t}{t}{#2}{#3}{s}}

\newcommand{\tndtstile}[3][s]{\turnstile[#1]{t}{n}{#2}{#3}{d}}
\newcommand{\tsdtstile}[3][s]{\turnstile[#1]{t}{s}{#2}{#3}{d}}
\newcommand{\tddtstile}[3][s]{\turnstile[#1]{t}{d}{#2}{#3}{d}}
\newcommand{\ttdtstile}[3][s]{\turnstile[#1]{t}{t}{#2}{#3}{d}}

\newcommand{\tnttstile}[3][s]{\turnstile[#1]{t}{n}{#2}{#3}{t}}
\newcommand{\tsttstile}[3][s]{\turnstile[#1]{t}{s}{#2}{#3}{t}}
\newcommand{\tdttstile}[3][s]{\turnstile[#1]{t}{d}{#2}{#3}{t}}
\newcommand{\ttttstile}[3][s]{\turnstile[#1]{t}{t}{#2}{#3}{t}}
%    \end{macrocode}
%
% Bem, esperamos que você tenha compreendido tudo. Aprecie usar \texttt{turnstile}!



% \CharacterTable
%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%   Digits        \0\1\2\3\4\5\6\7\8\9
%   Exclamation   \!     Double quote  \"     Hash (number) \#
%   Dollar        \$     Percent       \%     Ampersand     \&
%   Acute accent  \'     Left paren    \(     Right paren   \)
%   Asterisk      \*     Plus          \+     Comma         \,
%   Minus         \-     Point         \.     Solidus       \/
%   Colon         \:     Semicolon     \;     Less than     \<
%   Equals        \=     Greater than  \>     Question mark \?
%   Commercial at \@     Left bracket  \[     Backslash     \\
%   Right bracket \]     Circumflex    \^     Underscore    \_
%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%   Right brace   \}     Tilde         \~}
%
%
% \Finale
\endinput