OpenLLM-France/wikimedia huggingface dataset:
# Programação com OpenGL/Modern OpenGL Tutorial 02

Agora que nos temos um exemplo de trabalho que entendemos, nos poderemos adicionar novos recursos e mais robustez a ele.
Nossos shaders anteriores tinham a intenção ter um formato mínimo e mais fácil possível, mas no mundo real, usaremos mais códigos que nos auxiliarão.

## Gerenciando Shader
### Carregando os Shader

A primeiro coisa a acrescentar é uma maneira mais conveniente de carregar os shader: Seria muito mais fácil para nós carregarmos um arquivo externo( ao invés de copiarmos e colocarmos a String em C em nosso código). Além disso, eles nós permitira modificar nosso código GLSL sem precisar recompilar o código C!
Primeiro, nos adicionaremos uma função para carregar um string. é basicamente um código em C, que lera os conteúdos e alocando em buffer de tamanho no arquivo.

### Depurando os Shaders

Poderá acontecer alguns erros com nossos shader, o programa pode parar sem nenhuma explicação com alguns erros particulares. Então nós poderemos obter mais informações do OpenGL criando um infolog:

### Abstraindo as diferenças entre OpenGL e GLES2

Quando você usar somente as funções da GLES2, seu aplicativo é quase portável para desktop e dispositivos móveis. Existe ainda algumas questões para abordar:
* A GLSL #version é diferente.
* GLES2 requer alguns hints de precisão que não são compatíveis com a OpenGL 2.1
O #version precisa estar na primeira linha em alguns compiladores GLSL (por exemplo na PowerVR SGX540), assim não podemos usar a diretivas #ifdef para abstração dos shader GLSL, em vez disso, vamos preceder assim na versão em código C++:
Uma vez que usaremos esta versão em todos nossos tutoriais de GLSL, é uma uma solução simples.
Nós colocaremos #ifdef e os hints de precisão na próxima seção.

### Uma função reutilizável para criar shader

Com novas funções utilitárias e conhecimento, nos podemos fazer outra função para carregar e depurar um shader:
Agora nós podemos compilar nossos shader simplesmente usando:
bem como mostrar os erros de link-edição; as well as display link errors:

### Colocar as novas funções em um arquivo separado

Nós colocaremos as novas funções no arquivo shader_utils.cpp
Note que nossa intenção ao escreve algumas das funções possíveis: O objetivo deste livro é entender como o OpenGL trabalha, não utilizar um conjunto de ferramentas que desenvolvemos.
Vamos criar um cabeçalho, shader_utils.h:
# Matemática elementar/Exponenciais/Exercícios

A seguir são sugeridos alguns exercícios sobre exponenciais.
    Ver módulo principal: Matemática elementar/Exponenciais
* Simplifique as expressões abaixo, conforme o exercício 1:
** $5^{5}\times 5^{2}=5^{(5+2)}=5^{7}.\,$
** $2^{3}\times 2^{4}=\,$
** $3^{5}\times 3^{8}\times 3^{2}=\,$
** $2^{10}\times 6^{5}=\,$
** ${10}^{2}\times {20}^{3}=\,$
** $x^{3}\times y^{2}\times x^{2}\times z^{4}=\,$
* Simplifique as expressões abaixo:
** ${\frac {2^{3}\times 3^{2}}{2^{4}\times 3}}=\,$
** ${\frac {x^{4}\times y^{2}}{x^{3}\times y^{5}}}=\,$
** ${\frac {2\times x^{3}\times y}{6\times x\times y^{5}}}=\,$
** ${\frac {6^{5}}{5^{6}}}\times {\frac {81}{25}}=\,$
* Simplifique as expressões abaixo:
** ${(-2)}^{4}\times {(-3)}^{3}\times {(-6)}^{2}=\,$
** ${\frac {{(-3)}^{2}\times 2^{(-2)}}{3^{3}\times {(-2)}^{-3)}}}=\,$
** ${(2^{3})}^{4}\times {({(-4)}^{-2})}^{-3}=\,$
** ${\frac {(x^{3})^{2}}{(x^{2})^{5}}}=\,$
* Sendo a = 4$^3$, b = (-8)$^5$, c = (-2)$^6$ e d = (1/2)$^{-3}$, determine o valor de:
** ${\frac {a^{2}\times b^{-1}}{(-c)^{-2}\times (-d)^{-3}}}=\,$
* Escreva Verdadeiro (V) ou Falso (F), corrigindo a resposta no segundo caso:
** $a^{2}\times a^{3}=a^{2\times 3}\,$ ( )
** $b^{3}\times b^{4}=b^{3+4}\,$ ( )
** $x^{4}\times y^{4}=(x\times y)^{4}\,$ ( )
** ${\frac {x^{a}}{x^{b}}}=x^{a-b}\,$ ( )
** Se n é um número par, $(-x)^{n}=x^{n}\,$ ( )
** Se n é um número ímpar, $(-x)^{n}=-x^{n}\,$ ( )
** $(-x)^{n}\times x^{-n}=1\,$ ( )
** ${(x^{a})}^{b}=x^{(a^{b})}\,$ ( )
** ${(a^{x})}^{y}=a^{x\times y}\,$ ( )
** Se a é diferente de zero, $a^{1}=a\,$ ( )
** $a^{0}=1\,$ ( )
** $0^{1}=0\,$ ( )
** $0^{65536}=0\,$ ( )
** $0^{-5}=0\,$ ( )
** $2^{10}={10}^{2}\,$ ( )
** $1^{47}=1\,$ ( )
** $1^{-65}=1\,$ ( )
** $1^{0}=0\,$ ( )
** $0^{0}=\pi ,$ ( )
* Simplifique as expressões:
** ${\frac {{(-2)}^{3}.{(-4)}^{2}.8^{-1}}{16^{-1}.{(-4)}^{-3}.{(-2)}^{4}}}\,$
** ${\frac {6^{4}.{(-3)}^{-2}.{(-2)}^{3}}{36^{3}.4^{-2}.81}}\,$
** Sendo x > 0 e y > 0, ${\frac {x^{-2}.y^{2}.{(-x)}^{4}}{-y^{2}.x^{-2}.{(-x)}^{2}}}\,$
# Matemática elementar/Expressões algébricas/Equação biquadrada/Exercícios

    Ver módulo principal: Matemática elementar/Expressões algébricas
28x - 3x - 1 = 0
__ a = 28 __ b = 3 __ c = 1
__ Delta = ( - 3 ) - 4 * 28 ( - 1 ) __ Delta = 121 2 2
__ t = 0,25, t = ( 0,25 ) = 0,0625
__ x = \/ 0,0625
__ x = + ou - 0,5
__ 4g - 11g - 391521,4946... = 0
# Matemática elementar/Função inversa

Dada uma função $f:U\to V\,$, uma pergunta natural é, dado um valor v do contradomínio, em que condições a equação f(x) = v tem uma solução única x = u ?
Por exemplo, para funções do primeiro grau, de domínio e contra-domínios reais, f(x) = a x + b (em que a ≠ 0), a equação f(x) = v admite a única solução $x={\frac {v-b}{a}}\,$.
Por outro lado, para funções reais do segundo grau f(x) = a x$^{2+bx+c}$ (novamente, a ≠ 0), a equação f(x) = v pode possuir duas, uma ou nenhuma raiz (dependendo do valor de $\Delta =b^{2}\ -\ 4\ a\ (c-v)\,$ ser, respectivamente, positivo, zero ou negativo).
Como outro exemplo, a função f(x) = x$^2$ + 1, quando o domínio é o conjunto dos números reais positivos e o contra-domínio é o conjunto dos números reais maiores que um é tal que f(x) = v sempre admite uma única solução. Isto porque, sendo v > 1, temos que x$^2$ + 1 = v é equivalente a x$^2$ = v - 1, ou seja, a solução é a (única) raiz quadrada positiva do número positivo v - 1 dada por $x={\sqrt {v-1}}\,$.

## Conceito

Dada uma função $f:U\to V\,$, dizemos que $g:V\to U\,$ é a função inversa de f quando:
* Para todo valor $y\in V\,$, a equação f(x) = y tem uma solução
* Esta solução é única, e dada por x = g(y).

## Teoremas

* Se a função f tem uma inversa, então f é uma função bijetora.
* Se f é uma função bijetora, então f tem uma inversa, e a função inversa é bijetora
* A função inversa de uma função é única
* Se g é a função inversa de f, então f é a função inversa de g

## Definições relacionadas

Uma função que tenha inversa diz-se invertível.
A função inversa de uma função f é representada por f$^{-1}$ - note-se que esta notação deve ser usada com cuidado, pois, em alguns contextos, $f^{-1}={\frac {1}{f}}\,$.

## Ver também

Artigo na wikipedia:
* Função inversa
# Matemática elementar/Expressões algébricas/Produtos notáveis/Exercícios

    Ver módulo principal: Matemática elementar/Expressões algébricas
* Simplifique as expressões abaixo usando produtos notáveis
** $(a-2\ b)\cdot (a+2\ c)=\,$
** $(a-3)\cdot (a-2)=\,$
** $(a+b)^{2}=\,$
** $({\sqrt {3}}+1)^{2}=\,$
** $({\sqrt {5}}-1)^{2}=\,$
** $({\sqrt {7}}+2)\cdot ({\sqrt {7}}+3)=\,$
** $(x+1)\cdot (x+2)=\,$
** $(x-1)\cdot (x+3)=\,$
** $(x-3)^{2}=\,$
** $(x+4)\cdot (x-4)=\,$
** $(x-y)^{2}=\,$
** $(x+y)^{2}=\,$
** $(x-y)\cdot (x+y)=\,$
* Calcule o valor numérico das seguintes expressões, simplificando-as previamente através dos produtos notáveis
** $123456^{2}-123455^{2}=\,$
** $3450^{2}-3440^{2}=\,$
** $102^{2}=(100+2)^{2}=\,$
* Fatore as seguintes expressões
** $x^{2}-4xy+4y^{2}=\,$
** $4x^{2}-9y^{2}=\,$
** $9a^{2}+6abc+b^{2}c^{2}=\,$
* Mostre que a diferença entre o quadrado de dois números inteiros consecutivos é um número impar.
* Use os produtos notáveis estudados na seção para obter as seguinte relações... É muito simples, muitos acham que é dificil. Más se você treinar... Fica super simples !:
** $(x+y)^{2}=(x-y)^{2}+4xy\,$
** $\left({\frac {x+y}{2}}\right)^{2}\geq xy\,$
# Projetando sons no SuperCollider

Este livro tem uma coleção para a criação de versões nos formatos HTML, PDF, ODT, ZIM, ePUB ou para encomendas para a PediaPress.
Este livro é uma tradução para o português do Wikibook Designing Sound in SuperCollider, feito por Dan Stowell, que por sua vez é um projeto independente baseado no Designing Sound de Andy Farnell, sobre princípios e técnicas necessárias para projetar efeitos sonoros em síntese de tempo real. O livro original provê exemplos no PureData - aqui Dan Stowell re-criou alguns exemplos usando o SuperCollider.
O livro original incluí muito mais do que apresentamos aqui - estamos apenas recriando os exemplos e não o texto! (porém temos a intencão de criarmos códigos próprios). Parta do princípio que este não é um livro auto-contido e você irá aproveitá-lo melhor se tiver o livro original. No entanto, esperamos que os exemplos sejam auto-ilustrativos.
Quaisquer defeitos no código que apresentamos devem ser assumidos como sendo nossos erros, e não um reflexo do livro do Andy!
Também buscamos colaboradores para a tradução! ;)

## Índice
### Ferramentas & Técnicas

* 14. Reverb de Schroeder
* 17. Síntese aditiva

### Praticando: sons artificiais

* 24. Pedestres
* 25. Toques de telefone
* 26. DTMF
* 27. Alarmes
* 28. Sirenes

### Praticando: Idiofônicos

* 29. Campainha de telefone
* 30. bola que quica
* 31. Rolling can
* 32. Creaking door
* 33. Boing

### Praticando: natureza

* 34. Fire
* 35. Bubbles
* 36. Running water
* 38. Rain
Uma versão para impressão de Projetando sons no SuperCollider está disponível.
# Projeto de Amplificador Valvulado
## Índice

* Capa
* Prefácio
* Editores
* Invenção da válvula eletrônica
* História
* Recomendações de segurança
* Fonte de alimentação
* Transformador de força
* Dimensionamento
* Bibliografia
# Programação em GUI/Janelas de diálogo modal

Imagine-se a seguinte situação: o aplicativo GUI inclui um botão que tem como função apagar tudo que foi feito e reiniciar. Se um botão destes for pressionado por acidente, pode-se perder todo o trabalho feito.
Nestes casos, é comum que o aplicativo trave, e apareça em cima de tudo uma janela com a pergunta singela: Você tem certeza que quer destruir tudo?
Esta janela, muitas vezes, não pode ser fechada, e não é possível voltar ao programa sem responder ao que a janela pede.
Esta janela é uma caixa de mensagens e inclui o que se chama um diálogo modal.
Uma caixa de mensagens é uma janela que mostra uma mensagem e recebe um input (normalmente simples, como Sim/Não; mas pode também receber textos ou dados mais complexos). O diálogo é chamado de modal porque este diálogo interrompe todas as demais execuções do programa, que fica à espera da resposta do diálogo.

## Implantação

Note-se que, por violar algumas das regras da programação em interface gráfica - ou seja, ao se chamar uma janela de diálogo modal, o programa para e fica esperando sua resposta - a implantação em um programa de uma janela modal muitas vezes é mais simples do que a implantação de outras janelas.
É comum encontrar janelas de diálogo modal sendo invocadas com expressões da forma

## Exemplos

Exemplos em outras línguas
* Na linguagem Tcl, toolkit Tcl/Tk - en:Tcl Programming/Tk#Dialogs
* Em C++, toolkit wxWidgets - fr:Interfaces graphiques en C++ avec wxWidget/Dialogues
* Na linguagem C, usando o toolkit GTK+: fr:Programmation GTK+/Boîtes de dialogue
* Em Visual Basic: en:Visual Basic/Windows Dialogs
* Em Python, usando o toolkit Qt: de:Python unter Linux: Qt4 (inclui um exemplo de diálogo)
# Programação em GUI/Primeiro programa

O primeiro programa em GUI deve ser o mais simples possível: criar uma janela gráfica.
Isto parece trivial, mas por trás desta simples janela várias coisas acontecem:
* a janela deve ter uma área delimitante
* a janela deve ter um título
* a janela deve poder ser movida de um lado para outro
* a janela deve poder ser "oculta" por outras janelas, e deve voltar a aparecer quando solicitada
* deve ser possível fechar a janela, tanto pelo mouse/rato, quanto pelo teclado
* opcionalmente, a janela tem um tamanho que pode ser mudado

## Exemplos

Os exemplos incluem uma linguagem de programação e um (ou mais) toolkits. Alguns toolkits foram portados para várias linguagens diferentes.
* Na linguagem Python, exemplos mais sofisticados usando vários toolkits: Python/Programação com GUI
* Na linguagem C, usando o toolkit GTK+: GTK+/Começando
* Em Java, usando a API chamada Swing: Java/Swing/Primeiro programa
* Em C++, usando o toolkit Qt: Qt/Primeiro programa
* Em Prolog, usando a biblioteca gráfica XPCE: Prolog/Programação com GUI
* Em OpenOffice.org BASIC: OpenOffice.org/Macro/BASIC/GUI
Outros exemplos podem ser encontrados nos wikilivros em outra línguas:
* Na linguagem tcl, usando o toolkit Tk: en:Tcl Programming/Tk
* Na linguagem Ruby, usando o toolkit Tk: de:Ruby-Programmierung: GUI
* Em Fortran, usando o toolkit Tk: de:Fortran: Fortran und Tcl
* Em Common Lisp, usando o toolkit Tk: en:Common Lisp/External libraries/Ltk
* Em Perl, usando o toolkit Tk: de:Perl-Programmierung: TK
* Em Python, usando o toolkit Tk: de:Python-Programmierung: Tkinter
* Em Python, usando o toolkit Qt: de:Python unter Linux: Qt4
* Em C++, usando o toolkit wxWidgets: fr:Interfaces graphiques en C++ avec wxWidget/Premier exemple
* Na linguagem Haskell, usando o toolkit wxWidgets: en:Haskell/GUI
* Em Python, usando o toolkit wxWidgets: fi:Python/GUI
* Na linguagem C, usando o toolkit GTK+: fr:Programmation GTK+/Bonjour tout le monde
* Em C++, usando o toolkit GTK+: pl:GTK+/Szkielet programu GTK+ w języku C++
* "Hello World" em várias linguagens e vários toolkits: it:Hello world/Grafici
# Projetando sons no SuperCollider/Toques de telefone

Nos exemplos a seguir apresentaremos diferentes maneiras de se fazer a mesma coisa

## Fig 25.2: CCITT

Atente para o conceito de expansão multicanal no SC: inserindo Arrays nos UGens estaremos alocando cada elemento em canais diferentes:
# Projetando sons no SuperCollider/Reverb de Schroeder
## Fig 14.28: Recirculando Reverb de Shoroeder

Primeiro inicie o servidor, se você ainda não o fez:
Iremos precisar de alguma fonte sonora; iremos utilizar um arquivo que vem junto com o SC, e é utilizado como padrão em vários exemplos:
Abaixo é um código que cria um reverb em um simples Synth, com 4 delay-lines separados entrecruzando-se
Aqui temos uma forma alternativa de fazer a mesma coisa; dessa vez utilizaremos uma matriz para representar o entrecruzamento dos fluxos de delay. A matriz substitui todos os pontos positivos e negativos, então isso é uma forma elegante para representar a mistura - veja qual você acha mais legível.
Projetando sons no SuperCollider/thiscodeisby
# Programação em GUI/Widgets

A unidade básica de um programa com interface gráfica se chama widget, termo em inglês.
Widgets podem ser janelas, botões, menus, ícones, barras de rolagem, etc.
Um programa deve definir uma hierarquia de widgets, na qual alguns widgets estão subordinados a outros. Normalmente, todos os widgets são transitivamente subordinados a um widget principal, mas existem exceções: o programa pode gerar aplicativos separados do seu widget principal.
Trabalhar com vários widgets é a principal diferença entre um programa GUI e um programa normal. No último caso, o programador procura sempre saber qual ponto do programa está sendo executado; no programa GUI, é o sistema gerenciador de janelas que escolhe qual parte do programa (ou seja, qual parte de qual widget) está sendo rodado.
A "conversa" entre os diversos widgets usualmente é feita de forma indireta. Widgets disparam mensagens indicando as ações executadas sobre ele, e estas mensagens são recebidas pelos outros widgets para efetuar as ações desejadas.

## Exemplos

Os exemplos mostram um widget raiz, com vários widgets subordinados a ele. Normalmente, estes widgets aparecem dentro da caixa que define o widget raiz.
* Na linguagem C, usando o toolkit GTK+: GTK+/Empacotando widgets
* Em C++, usando o toolkit Qt: Qt/Widgets (ver primeira imagem à direita)
* Em Java, usando o toolkit Java/Swing: Java/Swing/Widgets (ver segunda imagem à direita)
* Em Python, usando o toolkit tkinter, baseado no Tk: Python/Tkinter/Widgets (ver terceira imagem à direita)
Exemplos em outras línguas:
* Na linguagem tcl, usando o toolkit Tk: en:Tcl Programming/Tk
* Em Common Lisp, usando o toolkit Tk: en:Common Lisp/External libraries/Ltk
* Em Python, usando o toolkit Tk: de:Python-Programmierung: Tkinter
* Em Python, usando o toolkit Qt: de:Python unter Linux: Qt4
* Em C++, usando o toolkit wxWidgets: fr:Interfaces graphiques en C++ avec wxWidget/Evenements
* Na linguagem Haskell, usando o toolkit wxWidgets: en:Haskell/GUI
* Na linguagem C, usando o toolkit GTK+: fr:Programmation GTK+/Programme de démonstration des placements

## Lista de widgets

Segue uma lista de widgets. Como a maioria das linguagens de programação usam o inglês como língua padrão, os nomes dos widgets estão listados nesta língua.
* Trabalhos com coleções, por seleção e exibição
** Button
*** Check box
*** Radio button
** Slider
** List box
** Spinner
** :en:Drop-down list
** Menu
*** Context menu
*** Pie menu
** Menu bar
** Toolbar
** Ribbon
** Combo box (text box with attached menu or List box)
** Icon
** Tree view
** Grid view
* Navigação
** Tab
** Scrollbar
* Entrada de texto
** Text box (edit field)
** Combo box (text box with attached menu)
* Saída
** Label
** Tooltip
** Balloon help
** Status bar
** Progress bar
** Infobar
* Containers (objetos que contém outros objetos)
** Window
*** Modal window
*** Dialog box
*** Palette window, also known as "Utility window"
**** Inspector window
# Projetando sons no SuperCollider/DTMF
## 26: toques DTMF

Se estiver usando linux, utilize o SwingOSC:
# Álgebra abstrata/Homomorfismo e automorfismo
## Homomorfismo

Definição 1: Sejam $(M,p,1),(M',p',1')\;$ dois monóides(ou grupos). Uma aplicação $\phi :M\mapsto M'\;$ é chamada homomorfismo se, e somente se:
    $\phi (1)=1',\phi (xy)=\phi (x)\phi (y),\;x,y\in M\;$
Definição 2: Um homomorfismo $\phi :M\mapsto M'\;$ é dito
* monomorfismo se $\phi (x)=\phi (y)\implies x=y\,$
* epimorfismo se $\forall u\in M'\exists x\in M,\phi (x)=u\,$
* isomorfismo se φ for inversível e sua inversa for um homomorfismo
Observação: no contexto da teoria dos grupos, basta mostrar:
* Seja $\phi :G\to H\,$ tal que $\phi (xy)=\phi (x)\phi (y)\,$. Então φ é um homomorfismo.
    Prova:
       $\phi (x)=\phi (1x)=\phi (1)\phi (x)\,$, logo $\phi (1)=1'\,$
Outro resultado importante (para grupos) é que $\phi (x^{-1})=\phi (x)^{-1}\,$. A prova é imediata, pela unicidade do elemento inverso.
* Seja φ um homomorfismo em que $\phi ^{-1}(\{1'\})={1}\,$. Então φ é um monomorfismo
    Prova:
       Sejam x e y elementos distintos tais que $\phi (x)=\phi (y)\,$. Então x$^{-1}$ ≠ y$^{-1}$, logo 1 = x x$^{-1}$≠ x y$^{-1}$. Mas $\phi (xy^{-1})=\phi (x)\phi (y)^{-1}=1'\,$, o que prova (por redução ao absurdo) o resultado desejado.
# Álgebra abstrata/Créditos

Este livro é resultado do conhecimento, do empenho e da dedicação de várias pessoas, que acreditam que o conhecimento deve ser de todos os que aspiram obtê-lo, sendo a doação um ato que é recompensado pela satisfação em difundir o saber.
Wikilivristas que cooperaram com o desenvolvimento e manutenção deste wikilivro:
* Thiago
* Helder
* Jorge
* Albmont
* Master
* Pati
Esses nomes não estão na ordem de importância.
# Álgebra abstrata/Cayley
## Isomorfismo

Definição: Sejam $(M,p,1),(M',p',1')\;$ dois monóides(ou grupos). Eles são isomorfos se, e somente se, existe uma aplicação bijetiva $\phi :M\mapsto M'\;$ tal que:
    $\phi (1)=1',\phi (xy)=\phi (x)\phi (y),\;x,y\in M\;$
Teorema 1: A relação isomorfo é uma relação de equivalência. Seja $1_{R}:R\mapsto R,\phi :R\mapsto S,\sigma :S\mapsto T\;$
* Seja $1_{R}\;$ uma aplicação bijetiva de R sobre R, logo $1_{R}\;$ é um isomorfismo (reflexiva)
* Seja $\phi \;$ uma aplicação bijetiva de R sobre S, logo existe $\phi ^{-1}\;$ uma aplicação bijetiva de S sobre R, e portanto é um isomorfismo (simétrica)
* Seja $\phi \;$ uma aplicação bijetiva de R sobre S e $\sigma \;$ uma aplicação bijetiva de S sobre T, logo existe $\phi \sigma \;$ uma aplicação bijetiva de R sobre T, e portanto é um isomorfismo (transitiva)

## Teorema de Cayley

Teorema de Cayley para monóides e grupos:
* Todo monóide é isomorfo a um monóide de transformação
* Todo grupo é isomorfo a um grupo de transformação
Corolário: Todo grupo finito de ordem n é isomorfo a um subgrupo do grupo simétrico $S_{n}\;$
# Álgebra abstrata/Exercícios resolvidos

Exercícios resolvidos
1 - G. A. Miller, em 1904, definiu um grupo como um conjunto (não-vazio, um detale que ele esqueceu de mencionar) dotado de uma operação binária satisfazendo três propriedades:
* A associatividade
* A lei do cancelamento, ou seja, se r s = t s ou se s r = s t, então r = t
* A existência de uma solução para toda equação do tipo x y = z
Mostre que esta definição é equivalente à usual, ou seja, que um grupo tem estas três propriedades, e estas três propriedades implicam na existência do elemento neutro e do elemento inverso.
Demonstração:
Que um grupo tem estas três propriedades é imediato, por exemplo, se r s = t s então, como s tem elemento inverso, basta computar (r s) s$^{-1}$ = (t s) s$^{-1}$, aplicar a associatividade, a propriedade do elemento inverso e a propriedade do elemento neutro. Analogamente, para encontar uma solução de x y = z com y e z fixos, basta computar (x y) y$^{-1}$ = z y$^{-1}$.
Vamos agora supor que as três propriedades sejam válidas.
Se o conjunto não é vazio, então existe um elemento a. Portanto, as equações a x = a e x a = a tem soluções, respectivamente e$_1$ e e$_2$. Seja b um elemento qualquer do grupo. Então como, pela associatividade, podemos escrever sem ambiguidade a e$_1$ b e b e$_2$ a, que valem, respectivamente a (e$_1$ b) = a b e (b e$_2$) a = b a. Pela lei do cancelamento, então, e$_1$ b = b e b e$_2$ = b. Como estas propriedades valem para todo b, então valem, respectivamente, para b = e$_1$ e b = e$_2$, o que permite concluir que e$_1$ e$_2$ = e$_1$ = e$_2$. Chamando este elemento simplesmente de e, demonstramos a existência do elemento neutro.
A existência do elemento inverso é imediata para todo elemento a, como solução das equações a x = e e x a = e. Basta provar que ele é único, o que é imediato ao calcular a$_2$ a a$_1$, para, respectivamente, as soluções de a x = e e x a = e.

## Referências

* ↑ G. A. Miller, What is Group Theory?, publicado em Popular Science, edição de fevereiro de 1904, p.371
# Latim/Lição 1/Correção

I
| 1. urbes | 6. urbs |
| 2. uirum | 7. militem |
| 3. homines | 8. mulier |
| 4. libri | 9. homines |
| 5. mulierem | 10. librum |
II - Sugestões de respostas. Você pode ter usado adjetivos diferentes do que sugerimos; o importante é que a terminação deles esteja correta.
* urbes = nominativo plural feminino
* uirum = acusativo singular masculino. Magnum uirum.
* homines = nominativo plural masculino. Noui homines.
* libri = nominativo plural masculino. Parui libri.
* mulierem = acusativo singular feminino.
* urbs = nominativo singular feminino.
* militem = acusativo singular masculino. Nouum militem.
* mulier = nominativo singular feminino.
* homines = nominativo plural masculino. Parui homines.
* librum = acusativo singular masculino. Magnum librum.
III
| 1. cogitant | 6. amat |
| 2. sumus | 7. sunt |
| 3. amas | 8. uidemus |
| 4. legitis | 9. cogitas |
| 5. uideo | 10. legit |
IV - Aqui também se trata de sugestões. O importante é que, se usou o nominativo, você tenha acertado na forma e feito o substantivo concordar com o verbo em número; se usou o acusativo, a semântica do verbo deve permitir isso (SVM não permite, e COGITO dificilmente seria usado com os substantivos que vimos até agora, embora em outras situações possa ser usado com acusativo. E.g. "consilium cogitat", ele pensa num plano, uma armação).
* Homines cogitant.
* Milites sumus.
* Mulierem amas.
* Librum legitis.
* Vrbem uideo.
* Vir amat.
* Libri sunt.
* Virum uidemus.
* O mulier, cogitas? (Estás pensando, ó mulher?)
* Miles legit.
V
* Legimusne librum?
* Videsne urbem?
* Amatne mulier?