O Que E Transitividade
O que os cursores de álgebra linear realmente querem que você saiba sobre relações transitivas
A gente estuda isso no primeiro semestre de matemática discreta e acha que entendeu. A definição é linda no papel: uma relação R em um conjunto A é transitiva quando, para quaisquer x, y, z em A, se xRy e yRz, então obrigatoriamente xRz. Pronto. Fim da história. Não é. Eu passei três semanas corrigindo listas de alunos que achavam que todo tipo de conexão lógica era transitiva, e a maioria errava por confundir causalidade com relação de ordem. O problema não é a definição. É a aplicação. Vou explicar do jeito que eu uso no dia a dia, porque na prática a transitividade entra em cenários muito mais ruins do que os exemplos de livro. Começa pelo método de verificação: você pega a relação, lista os pares ordenados, e testa todas as combinações possíveis de dois degraus. Se existir pelo menos um caso onde o primeiro par existe, o segundo par existe, mas o par de topo não existe, a relação quebra. Não precisa testar todos — um contraexemplo destrói a transitividade. Isso é importante porque a maioria dos estudantes tenta provar que é transitiva verificando casos positivos, o que é inútil. Um único z arruina tudo.
O que e transitividade na prática de implementação
No código, a transitividade aparece quando você constrói coisas como fechamento transitivo, grafos de dependência, ou sistemas de permissão hierárquica. Eu trabalhei num projeto de controle de acesso onde um usuário herdava permissões de um grupo, e o grupo herdava de outro grupo. A pergunta era simples: dado que o usuário A tem permissão para ler X, e X está vinculado ao grupo Y, e Y herda a permissão Z, A tem Z? A resposta deveria ser sim se a relação de herança fosse transitiva. Ela não era, porque o sistema tinha um limite de profundidade configurado para três níveis. Acabou que precisamos implementar uma busca BFS com limite de iterações, e isso quebrou a propriedade que o contrato dizia que existia. O contrato estava errado. O sistema não era transitivo de fato, só de intenção. O que acontece com frequência e ninguém avisa é que operações booleanas em matrices de adjacência não preservam transitividade automaticamente. Se você representar uma relação como matriz bool e calcular M² (multiplicação booleana), o resultado te dá os pares com caminho de comprimento exatamente dois. Para obter o fechamento transitivo completo, você precisa somar M, M², M³... até M^n, onde n é o número de vértices. Na prática, o algoritmo de Warshall resolve isso em O(n³) com uma dinâmica bem simples: para cada vértice k, atualiza a matriz dizendo que se há caminho de i para k e de k para j, então há caminho de i para j. Eu já vi desenvolvedores implementarem isso recursivamente sem memoização e terem stack overflow em grafos com 50 nós. Não faz sentido. Aqui vai uma insight que pegadores de plantão não mencionam: a interseção de duas relações transitivas sempre é transitiva, mas a união não. Você pode ter R1 transitiva, R2 transitiva, e R1 R2 completamente não transitiva. Eu fiz essa confusão numa prova e perdi pontos que eram fáceis de recuperar se eu soubesse o contraexemplo. Considere A = {1, 2, 3}, R1 = {(1,2), (2,3), (1,3)} e R2 = {(3,1), (1,2), (3,2)}. Ambas são transitivas. A união contém (2,3) de R1 e (3,1) de R2, o que exigiria (2,1) para ser transitiva, mas (2,1) não está em nenhuma das duas. A união quebra. Sempre que for trabalhar comunião de relações, valide explicitamente.
Outro ponto cego: a relação "é filho de" não é transitiva, mas a relação "é ancestral de" é. Parece óbvio, mas em árvores genealógicas computacionais eu já vi gente usar o parentesco direto esperando herdar propriedades de ancestralidade, e o resultado era uma bagunça de duplicações e ciclos. A diferença é que filho é uma relação diretamente oposta à direção da ancestralidade. Quando você inverte todos os pares de uma relação transitiva, a relação invertida continua transitiva. Isso é trivial de provar, mas esquece-se com frequência porque a intuição biológica não mapeia para a intuição relacional.

Quando a transitividade falha e o que fazer
Relações de similaridade baseadas em distância euclidiana com threshold não são transitivas. Se a distância entre A e B é menor que 0.5, e entre B e C é menor que 0.5, isso não garante que a distância entre A e C seja menor que 0.5. O triângulo pode ter lados 0.4, 0.4 e 0.9. Eu passei duas semanas debugando um sistema de clustering que assumia transitividade implícita e os grupos iam se expandindo de forma inconsistente. A solução foi usar closure transitiva via Warshall adaptado para o gráfico de proximidade, mas isso transformou O(n²) em O(n³) e o tempo de processamento triplicou. Valeu a pena, mas o custo é real. Em bancos de dados, a transitividade aparece em constraints de chave estrangeira com cascata. Se tabela A referencia B e B referencia C, e você deleta um registro em C, o cascade delete propaga para B e depois para A. Isso só funciona se o mecanismo de referencial for configurado como transitivo. PostgreSQL faz isso naturalmente com ON DELETE CASCADE encadeado, mas MySQL com InnoDB tem limitações em profundidade de cascata que podem silenciosamente travar a operação em vez de propagar. Eu levei quatro horas numa migração para descobrir que o cascade não estava percorrendo todos os níveis porque uma foreign key estava com ON DELETE SET NULL em vez de CASCADE. O log não mostrava erro. Só faltavam linhas. Se você precisa de transitividade garantida em um sistema customizado, a alternativa mais barata é manter uma tabela de reachable pairs e atualizá-la incrementalmente. Cada vez que adiciona um arco uv, você cruza os predecessores de u com os sucessores de v e insere os novos pares. Complexidade no pior caso é still O(n²) por inserção, mas em grafos esparsos é muito mais rápido que recalcular Warshall do zero. Eu usei essa abordagem num grafo de tarefas com cerca de 200 nós e 600 arestas, e as consultas de reachability caíram de 12ms para 0.3ms.
A transitividade também não se aplica a relações probabilísticas. Se P(A causa B) > 0.7 e P(B causa C) > 0.7, isso não significa P(A causa C) > 0.7. A probabilidade conjunta pode ser 0.49 no limite inferior. Sistemas de inferência causal que assumem transitividade de correlação cometem esse erro todo dia. Eu vi um modelo de recomendação que propagava preferências por três graus de separação assumindo que preferência é transitiva, e o resultado era recommendar coisas completamente fora do contexto porque a correlação se dilui com a distância. O fix foi adicionar um fator de decaimento exponencial por grau, o que basicamente abandona a transitividade estrita mas preserva o que é útil. Se o seu domínio exige transitividade estrita e você tem restrições de performance que impedem Warshall, considere representar a relação como uma family de partições (relações de equivalência são sempre transitivas por definição) ou usar uma estrutura de conjuntos disjuntos com union-by-rank e path compression. O custo quase constante das operações de union e find mantém a transitividade implicitamente garantida sem necessidade de verificar pares manualmente. Essa é a abordagem padrão em problemas de conectividade em grafos dinâmicos, e funciona bem até milhares de operações por segundo.
Galeria
-
Transitividade verbal: o que é, como funciona - Mundo Educação -
Transitividade verbal: o que é? -
Transitividade Verbal: O Que É, Direta, Indireta – LQZW -
MAPA MENTAL SOBRE TRANSITIVIDADE VERBAL - Maps4Study