# data[].attributes.body
Linguagem é basicamente o jeito que a gente usa para trocar ideia e passar informações. Mas, para essa troca fazer sentido, é importante que tudo esteja no contexto certo.

Quando falamos de linguagens na programação, o papo é entre máquina, desenvolvedor e usuário. É quase um triângulo amoroso, mas com menos drama e mais códigos e um pouco de raiva.

Linguagens formais? É tipo aprender a língua do computador, usando modelos matemáticos para entender como ele “fala”.

E aí entram duas peças-chave:

Sintaxe: as regras do jogo, ou seja, como organizar tudo sem que a maquina fique "WHAT???".

Semântica: o que o código realmente significa. É tipo a diferença entre “falei bonito” e “falei com sentido”.

Análise léxica: os bloquinhos básicos que formam essa linguagem, como se fossem as peças de um brinquedo de montar de um de programador.

Paradigmas de programação são os estilos para resolver problemas, como escolher a melhor forma do código:

Imperativo: o famoso “passo a passo” (tipo um receita de bolo).

Declarativo: mais minimalista, só aponta o destino e deixa o sistema se virar para chegar.

# data[].attributes.attachment_link.title
Paradigmas de Programação - Coggle Diagram

# data[].attributes.attachment_link.description
Paradigmas de Programação - Coggle Diagram: Paradigmas de Programação

# data[].attributes.body
Regras dos conjuntos:

Definição: Um conjunto é uma coleção de objetos distintos (chamados de elementos), sem ordem específica. É representado por uma letra maiúscula, e um elemento por uma letra minúscula.

Notações:

Por Extensão: Lista todos os elementos entre chaves.

Ex: V={a,e,i,o,u} V = \{a, e, i, o, u\} V={a,e,i,o,u}.

Por Compreensão: Define os elementos com base em uma propriedade.

Ex: P={n∣n eˊ um nuˊmero par}P = \{n \mid n \text{ é um número par}\}P={n∣n eˊ um nuˊmero par}.

Conjunto Universo e Vazio:

Universo (U): Conjunto de todos os elementos em consideração.

Vazio (∅ ou {}): Conjunto sem elementos.

Cardinalidade: Número de elementos de um conjunto, denotado por ∣A∣|A|∣A∣.

Pertinência: Verifica se um elemento pertence a um conjunto. Ex: a∈Va \in Va∈V e h∉Vh \notin Vh∈/V.

Continência e Subconjunto:

Subconjunto (⊆): AAA é subconjunto de BBB se todos os elementos de AAA estão em BBB.

Subconjunto Próprio (⊂): AAA é subconjunto próprio de BBB se A⊆BA \subseteq BA⊆B e A≠BA \neq BA=B.

Igualdade de Conjuntos: Dois conjuntos são iguais se contêm exatamente os mesmos elementos.

Ex: {a,b}={b,a}\{a, b\} = \{b, a\}{a,b}={b,a}.

Operações sobre Conjuntos:

União (∪): Conjunto de todos os elementos que estão em AAA ou em BBB.

Intersecção (∩): Conjunto de elementos que estão em ambos AAA e BBB.

Diferença (−): Conjunto de elementos que estão em AAA mas não em BBB.

Complemento (∼): Conjunto de todos os elementos que não estão em AAA.

Conjunto das Partes (2^A ou P(A)): Conjunto de todos os subconjuntos de AAA.

Produto Cartesiano (×): Conjunto de todos os pares ordenados (a,b)(a, b)(a,b) onde a∈Aa \in Aa∈A e b∈Bb \in Bb∈B.

Propriedades:

Idempotência: A∪A=AA \cup A = AA∪A=A e A∩A=AA \cap A = AA∩A=A.

Comutativa e Associativa: Ordem das operações não altera o resultado.

Distributiva: Relaciona operações de união e intersecção.

Duplo Complemento: ∼(∼A)=A\sim(\sim A) = A∼(∼A)=A.

Leis de DeMorgan: Relacionam operações com complementos.

# data[].attributes.attachment_link.description
Conjuntos - Coggle Diagram: Conjuntos (Conjuntos (A), Notações, Conjunto Universo (U), Relacionamento - conjunto e elemento, Tuplas (Uma sequência ordenada de n componentes), Relações, Operações sobre os conjuntos)

# data[].attributes.body
As linguagens formais estudam o uso de símbolos e regras para criar e interpretar linguagens com precisão e rigor. É como se fosse um tutorial para a comunicação entre computadores e pessoas (tudo muito bem organizado e detalhado).

Vou trazer aqui os pontos que achei mais interessantes (e que não são exatamente um "Google fácil").

Operações :

Complementação: Uma linguagem é construída sobre outra. Tipo "a cereja do bolo" adicionada ao que já existe.

Reverso: Pensa em uma frase ao contrário, como "amor" virando "roma". É mais ou menos isso, mas com cadeias de símbolos.

Quociente: Aqui, uma nova linguagem surge reaproveitando parte da antiga.

Substituição: Trocamos pedaços de uma sentença por outra usando um mapa. É tipo fazer um quebra-cabeça, mas com regras.

Relação entre os elementos (ou o "quem é quem" das linguagens):

Alfabeto: É o conjunto de símbolos, o nosso "kit básico".

Símbolos: Cada peça desse alfabeto — igualzinho às letras do nosso abecedário.

Cadeia: A sequência de símbolos, ou seja, as frases desse idioma especial.

Elemento da linguagem: O grupo de cadeias que formam a tal linguagem.

Como a gente representa tudo isso?

Gramáticas: As regras do jogo. Sem elas,tudo fica bagunçado.

Reconhecedores: As ferramentas que verificam se uma cadeia é válida ou não.

Enumerações: Fazem a contagem das cadeias que fazem parte da linguagem, organizando tudo direitinho.

# data[].attributes.attachment_link.description
Linguagens Formais (Sintaxe correta, Cadeia (palavras), Concatenação , Fechamento reflexivo e transitivo, Operações, Representações , Uma forma de expressar as linguagens computacionais)

# data[].attributes.body
Palmas Summit!

# data[].attributes.body
Correção da atividade de linguagens formais.

# data[].attributes.body
Autômatos:

Imagina um autômato como uma máquina meio "nerd", que segue regras muito específicas e não aceita improvisos. Ele é um modelo matemático que ajuda a entender e analisar sistemas baseados em um conjunto claro de regras. Basicamente, ele pode estar em diferentes estados, e cada mudança de estado acontece de acordo com as entradas que recebe.

Sistemas de Estados Finitos:

Agora, os sistemas de estados finitos são tipo um menu limitado de opções que um sistema pode estar. Eles têm um número específico de estados possíveis e mudam de um para outro com base em regras já estabelecidas.

exemplo: um cadeado

Estados possíveis: trancada e destrancada.

Regra: só destranca se você tiver a chave certa.

Esses sistemas são super úteis, desde o design de circuitos digitais (como aqueles que fazem seu celular funcionar) até a modelagem de processos complexos, como entender o funcionamento de um semáforo.

# data[].attributes.attachment_link.description
Estados Finitos (Estados: São as condições ou situações em que o sistema pode estar em um determinado momento. O número de estados é finito., Transições: São as mudanças de um estado para outro, geralmente desencadeadas por algum evento ou entrada., Estado Inicial: É o estado em que o sistema começa sua operação., Estados Finais (ou de Aceitação): São os estados que indicam que uma sequência de entradas foi aceita pelo autômato (nem todos os SEF têm estados finais)., Alfabeto de Entrada: O conjunto de símbolos ou eventos que o sistema pode processar., Autômatos Finitos Determinísticos (AFD): Para cada estado e símbolo de entrada, há exatamente uma transição para o próximo estado., Autômatos Finitos Não-Determinísticos (AFN): Podem ter múltiplas transições possíveis para um dado estado e símbolo de entrada, ou transições sem consumir entrada (ε-transições).)

# data[].attributes.body
Atividade de autômatos finitos.

# data[].attributes.body
O professor mostrou na prática como usar o LaTeX para criar apresentações de slides, incluindo o tema de árvores de sintaxe. Foi uma demonstração bem útil.

Tentamos também usar um site relacionado a árvores de sintaxe. Mas o que são essas árvores? Basicamente, são diagramas que mostram a estrutura de sentenças ou expressões de forma organizada. É como se a gente pegasse uma frase e transformasse em uma árvore, com cada palavra ou elemento ocupando um "galho".

Essas árvores, conhecidas como árvores de análise sintática ou árvores de parse, são ferramentas superimportantes. Elas ajudam tanto em linguística computacional e processamento de linguagem natural (tipo ensinar o chatgpt a entender agente) quanto na análise de linguagens de programação.

# data[].attributes.attachment_link.description
Árvore sintática (Estrutura, Utilidade, Mostra como uma frase é dividida em seus componentes gramaticais, de acordo com as regras da gramática da língua em questão., Auxilia na análise e interpretação de código em linguagens de programação)

# data[].attributes.body
Hoje tivemos uma revisão da primeira prova do semestre e tivemos contato com alguns conceitos de haskell uma linguagem de programação funcional baseada em matemática. Embora tenha achado uma linguagem um pouco complexa "muito complexa" ela faz a gente pensar bastante no que fazer e como.

Mapa mental criado pelo chatGPT

# data[].attributes.attachment_link.description
Haskell (Fundamentos, Estrutura do Código, Sistema de Tipos, Recursos Avançados, Casos de Uso),

# data[].attributes.body
Final do hackathon!!

Mas o professor também disponibilizou a primeira prova do semestre.

# data[].attributes.attachment_caption
Computabilidade e Decidibilidade de números primos.

# data[].attributes.body
Pilhas e as Filas são duas estruturas de dados fundamentais que usamos para organizar informações de forma específica.

Funcionalidades:

Pilhas - criar uma função de desfazer ações.

Filas - organizar processos.

# data[].attributes.attachment_link.description
Pilhas e Filas (Estruturas de Dados, Tipos de Filas, Filas (Queue), Exemplo de Uso)

# data[].attributes.attachment_caption
Representação gráfica da máquina de Turing M1 