¿Alguien podría recomendar algunos temas interesantes para dominar que se encuentran en la intersección de la informática / programación y la teoría / lógica de conjuntos (algo práctico, no solo teórico)?

Lo que me gusta de la informática es que hay una delgada línea entre la teoría y la práctica. La informática se basa únicamente en las matemáticas y todo es agradable, limpio y predecible. La informática se trata de cómo podemos transferir nuestro propio pensamiento a máquinas computacionales y ejecutarlo en un mundo real para obtener un resultado concreto.

Existen varios lenguajes de programación que se utilizan para instruir a esas máquinas computacionales. Los lenguajes son sintácticamente diferentes y tienen características diferentes, pero cuando los vemos desde el lado teórico, todos comparten algunas propiedades comunes que los hacen equivalentes. Estas propiedades son, por ejemplo, la integridad de Turing y los sistemas lógicos. Cuando diseñamos nuevos lenguajes de programación o implementamos nuevas características a los lenguajes existentes, construimos un sistema lógico de las características que queremos capturar. Entonces podemos probar la solidez y la integridad del sistema para asegurarnos de que hemos capturado las características con éxito. Sin embargo, incluso cuando un sistema lógico es completamente sólido y completo, puede estar equivocado si no logra capturar los fenómenos del mundo real que queríamos capturar. Entonces, cuando decimos que algo es lógico en la vida cotidiana, significa completamente diferente en lógica matemática: podemos construir un sistema lógico como queramos. El punto clave es cuál es el universo del sistema lógico. Al capturar un fenómeno del mundo real en un sistema lógico, está transfiriendo conocimiento de nuestro universo a un universo matemático donde se define el sistema lógico. Ese universo matemático puede ser muy diferente a nuestro propio universo. Es por eso que es muy fascinante ver cómo la teoría se encuentra con la práctica en informática y poder instruir a su computadora desde un universo diferente.

De esta manera, cualquier cosa que tenga en sus manos en informática se basa en algún tipo de sistema lógico. Puede comenzar a practicar esto eligiendo un sistema lógico con el que esté familiarizado. Si ya ha hecho algunas matemáticas, probablemente haya encontrado un sistema lógico de primer orden. Elija eso, defina un sistema de deducción para él formalmente (por ejemplo, una deducción natural), demuestre que las reglas de deducción son sólidas y completas y luego comience a probar teorías matemáticas que solo conoce utilizando un conjunto finito de reglas de deducción probadas. Por sorprendente que pueda parecer, esto es lo que hacen los lenguajes de programación en un nivel teórico. Simplemente tienen tan buenas abstracciones que muchos programadores son completamente ignorantes por este hecho. Cuando haya jugado con la lógica de primer orden, puede comenzar a inventar sus propios sistemas lógicos y reglas de deducción. Luego puede estudiar qué tipo de cosas se pueden capturar en ese sistema lógico. Finalmente, puede convertir esto a un lenguaje de programación, escribir un compilador para él que lo convierta en un binario de máquina. Luego, solo ve y encuentra una máquina en el mundo real que pueda ejecutar tu binario. Simplemente sienta la brisa de sus fanáticos cuando ejecuta sus deducciones lógicas en un sistema que construyó en una pizarra. ¿No es asombroso?

Podría comenzar desde lo básico. Es decir, el conjunto de implementos como una estructura de datos junto con algoritmos como unión, intersección, complemento, diferencia, etc.

Más tarde construir sobre eso. Utilice su conjunto para resolver el problema de la mochila o el vendedor ambulante.

En el lado lógico, existe una restricción de satisfacción aplicable en la programación lógica. Es decir, establece una condición y encuentra todas las soluciones que satisfacen esta condición.

More Interesting

Soy un programador con un poco de experiencia en matemáticas (después de la secundaria). ¿El curso de matemáticas de Khan Academy es suficiente para sumergirse en el aprendizaje automático / big data?

Cómo resolver rápidamente cualquier problema

¿Qué abstracciones te parecen interesantes? ¿Por qué?

Int a [6] = {1,2,4,5,}; ¿Es correcta esta afirmación en el concepto de matrices?

¿Cuál es la diferencia real entre las aperturas f / 1.8 yf / 2.2 en las lentes de la cámara?

Cómo probar [matemáticas] p (a \ cup b \ cup c) \ leq p (a) + p (b) + p (c) [/ math]

Estoy en mi último año como estudiante de ciencias de la computación y me encanta resolver problemas. Siempre trato de resolver los problemas, pero no logro crear soluciones rápidamente. Quiero mejorar para construir una lógica clara. ¿Dónde me estoy equivocando o qué debo hacer?

Como una niña india de 23 años, he completado mi licenciatura en tecnología. Me interesa la fotografía y la quiero como mi profesión. ¿Hay alguna forma de convencer a mi papá? ¿Qué tengo que hacer?

¿Cuál es la mejor manera de estudiar programación y matemáticas de libros o mirar tutoriales?

Dada una instancia tautológica de DNF-SAT, ¿se conserva la tautología después de agregar un nuevo literal [math] v [/ math] o [math] \ bar {v} [/ math] a una cláusula que se sabe que está en PTIME?

¿Cuál es el algoritmo eficiente para encontrar la suma de los dígitos del factorial de un número (el número puede ser hasta 500), es decir, para num = 5, ans = 3 (como 5! = 120)?

¿No fue [math] flag [B] [/ math] modificado por thread [math] B [/ math] antes de [math] read_ {B} (flag [A] == false) [/ math]? ¿Por qué es una contradicción?

¿Existen los números irracionales que no son construibles en la recta numérica real?

¿La investigación colaborativa dificulta el uso de mejores herramientas (por ejemplo, TeXmacs en lugar de TeX / LaTeX)?

¿Existe un equivalente al tono perfecto en matemáticas / programación de computadoras? ¿Un atributo que se considera que no se puede aprender pero que es invaluable si lo posee?