2  Aritmética básica

Nesta página, vamos resumir brevemente as operações da aritmética básica em GAP.

2.1 Operações aritméticas

As operações mais comuns em GAP são + (adição), - (subtração), * (multiplicação), / (divisão), mod, (resto) ^ (exponenciação). Experimente com os seguintes exemplos.

gap> 2+3;
5
gap> 2/4;
1/2
gap> (2+3)*(1/2);
5/2
gap> 2^3*3;
24
gap> 6 mod 4;
2
gap> -6 mod 4;
2
gap> 2^-2*3;
3/4
gap> 2.0;
2.
gap> 2.01+3.11;
5.12
gap> 1/3;
1/3
gap> 1.0/3;
0.333333

Note a diferença entre trabalhar com valores exatos (como por exemplo 1/3) e valores aproximados (por exemplo 1.0/3). Neste minicurso, nós vamos trabalhar com valores exatos.

2.2 Operações lógicas (booleanas)

Para comparar se dois valores são iguais, usamos a operação = cujo valor é um valor lógico; ou seja, true ou false. As operações com valores lógicos são not, and e or que funcionam exatamente como os respetivos conectivos na lógica matemática.

gap> 2 + 3 = 5;
true
gap> 2 + 3 = 5 or 2 + 3 = 6;
true
gap> 2 + 3 = 5 and 2 + 3 = 6;
false
gap> 2 + 3 = 5 and  not 2 + 3 = 6;
true

Note também que a operção “não igual” é escrita como <>. Por exemplo

gap> 2 <> 3;
true
gap> 3 <> 3;
false

2.3 Variáveis

As variáveis guardam valores que podem ser usados durante a computação. Uma variável é uma palavra de letras, números e alguns carateres especiais. Aqui é um exemplo simples.

gap> a := 2;
2
gap> a3 := 3;
3
gap> a_5 := 5;
5
gap> a := 2; 
2
gap> b := 3;
3
gap> a + b; a*b;
5
6

Variávies podem conter valores mais complexos, como nos seguintes exemplos.

gap> s1 := "Hello";
"Hello"
gap> s2 := " World!";
" World!"
gap> Concatenation( s1, s2 );
"Hello World!"

2.4 Corpos finitos

Quando trabalhamos com estruturas algébricas, precisamos trabalhar com corpos além do corpo \(\mathbb Q\). Aqui em baixo veremos alguns exemplos para aritmética com corpos finitos. O corpo finito com \(q\) elementos pode ser construído com a função GF( q ) (Galois Field).

gap> GF(3);
GF(3)
gap> GF(5);
GF(5)
gap> GF(27);
GF(3^3)

Sabemos que o grupo multiplicativo de um corpo finito é cíclico. Isso quer dizer que em todo corpo finito \(\mathbb F\), existe um elemento \(z\in \mathbb F\) tal que os elementos não nulos de \(\mathbb F\) são as potências de \(z\); ou seja, \[ \mathbb F=\{0\}\cup \{z^0,z^1,\ldots,z^{q-2}\} \] onde \(q=|\mathbb F|\). Este elemento chama-se elemento primitivo de \(\mathbb F\). Para uma potência de primo q, função Z( q ) devolve um elemento primitivo explícito do corpo finito GF( q ). Os elementos não nulos de GF( q ) são representados como potências de Z( q ). Considere os seguintes exemplos.

gap> F := GF(11);
GF(11)
gap> e := One( F );
Z(11)^0
gap> z := Zero( F );
0*Z(11)
gap> p := PrimitiveElement( F );
Z(11)
gap> e+p;
Z(11)^8
gap> e+p^2;
Z(11)^4

Quando trabalhamos com o corpo \(\mathbb Z_p\), é frequentamente necessário considerar elementos de \(\mathbb Z_p\) como inteiros e vice versa. Nos seguintes exemplos, vamos ver como fazer isso em GAP.

gap> F := GF(11);
GF(11)
gap> a := 2*One(F); 
Z(11)
gap> b := 2*Z(11)^0;
Z(11)
gap> a = b;
true
gap> a1 := IntFFE( a );
2
gap> b1 := IntFFE( b );
2
gap> a1 in F;
false
gap> a1 in Integers;
true
gap> a1 = b1;
true

2.5 Tarefa

Faça as seguintes computações em GAP.

  1. Calcule o resto de \(5^7+5^6+5^5\) módulo \(11\).
  2. Verifique por computação direta que \(a^7\equiv a\pmod 7\) para todo \(a\in\{0,\ldots,6\}\).
  3. Calcule o resto de \(a^8\) módulo \(8\) para todo \(a\in\{0,\ldots,7\}\). Ache valores para os quais \(a^8\not\equiv a\pmod 8\).
  4. Verifique que \(a^7=a\) para todo \(a\in\mathbb F_7\).
  5. Calcule o valor lógico de \[ 8^7 = 13 \mbox{ ou } (6+7 = 13 \mbox{ e } 5^3 \neq 125). \]