From 851bbf22ce3177de657410d9acf1af5bb95a5295 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1aki?= Date: Tue, 6 Aug 2024 13:18:23 -0300 Subject: [PATCH] Revert --- "TP Grupal - L\303\263gico" | 1 - "TP Grupal - L\303\263gico/.github/.keep" | 0 "TP Grupal - L\303\263gico/README.md" | 0 "TP Grupal - L\303\263gico/programa.pl" | 147 ++++++++++++++++++++++ 4 files changed, 147 insertions(+), 1 deletion(-) delete mode 160000 "TP Grupal - L\303\263gico" create mode 100644 "TP Grupal - L\303\263gico/.github/.keep" create mode 100644 "TP Grupal - L\303\263gico/README.md" create mode 100644 "TP Grupal - L\303\263gico/programa.pl" diff --git "a/TP Grupal - L\303\263gico" "b/TP Grupal - L\303\263gico" deleted file mode 160000 index cb32401..0000000 --- "a/TP Grupal - L\303\263gico" +++ /dev/null @@ -1 +0,0 @@ -Subproject commit cb324014841f6d4b44df44b79e20badb60286618 diff --git "a/TP Grupal - L\303\263gico/.github/.keep" "b/TP Grupal - L\303\263gico/.github/.keep" new file mode 100644 index 0000000..e69de29 diff --git "a/TP Grupal - L\303\263gico/README.md" "b/TP Grupal - L\303\263gico/README.md" new file mode 100644 index 0000000..e69de29 diff --git "a/TP Grupal - L\303\263gico/programa.pl" "b/TP Grupal - L\303\263gico/programa.pl" new file mode 100644 index 0000000..ceec904 --- /dev/null +++ "b/TP Grupal - L\303\263gico/programa.pl" @@ -0,0 +1,147 @@ +% https://docs.google.com/document/d/1zCWrMU9x8CQ_Vf0hkx5yw13lsGdU_MBMJQVmAuEW0oI + +% Primera parte + +elecciones(2017). +elecciones(2019). + +estudiantes(sistemas, 2019, juanPerez). +estudiantes(sistemas, 2019, unter). +estudiantes(sistemas, 2019, mathy). +estudiantes(sistemas, 2017, unter). +estudiantes(sistemas, 2017, mathy). + + +votos(franjaNaranja, 213, sistemas, 2017). +votos(partidoPDEP, 213123123, sistemas, 2017). +votos(franjaNaranja, 21323, sistemas, 2019). +votos(agosto29, 21323, sistemas, 2019). +votos(partidoPDEP, 21231231, sistemas, 2019). + + +% Punto 1 + +quienGano(PartidoGanador, Anio):- + elecciones(Anio), + findall(VotosPartido, votos(_, VotosPartido,_,Anio), VotosAnio), + max_list(VotosAnio,CantidadVotosMayor), + votos(PartidoGanador, CantidadVotosMayor,_,Anio). + +% Punto 2 + +ganaElMismo(Partido):- + votos(Partido, _, _, _), + forall(elecciones(Anio), quienGano(Partido, Anio)). + + +% Punto 3 + +%huboFraude(Anio). +huboFraude(Anio):- + elecciones(Anio), + findall(VotosPorPartido, votos(_,VotosPorPartido,_,Anio), ListaVotosAnio), + sumlist(ListaVotosAnio, CantidadVotosAnio), + + estudiantes(_,Anio,_), + findall(RegistradosPorAnio, estudiantes(_,Anio,RegistradosPorAnio), ListaRegistradosAnio), + length(ListaRegistradosAnio, CantidadRegistradosAnio), + + CantidadVotosAnio > CantidadRegistradosAnio. + + +% Punto 4. Se puede hacer la consulta con el predicado del punto 3. + +% Segunda parte + +realizoAccion(franjaNaranja, lucha(salarioDocente)). +realizoAccion(franjaNaranja, gestionIndividual("Excepción de correlativas", juanPerez, 2019)). +realizoAccion(franjaNaranja, obra(2019)). +realizoAccion(agosto29, lucha(salarioDocente)). +realizoAccion(agosto29, lucha(boletoEstudiantil)). +realizoAccion(partidoPDEP, obra(2018)). +realizoAccion(partidoPDEP, gestionIndividual("Cambio de curso", unter, 2017)). +realizoAccion(partidoUltraDemagogico, gestionIndividual("Cambio de curso", unter,2017)). +/* +esDemagogica(Partido):- + realizoAccion(Partido, _), + not(esAccion(Partido, obra)), + not(esAccion(Partido, lucha)). +*/ +/* +esBurocrata(Partido):- + realizoAccion(Partido, _), + not(esAccion(Partido, lucha)). +*/ + +esDemagogica(Partido):- + realizoAccion(Partido,_), + forall(realizoAccion(Partido,_), not(esAccion(Partido, obra))), + forall(realizoAccion(Partido,_), not(esAccion(Partido, lucha))). + + +esBurocrata(Partido):- + realizoAccion(Partido,_), + forall(realizoAccion(Partido,_), not(esAccion(Partido,lucha))). + + +esTransparente(Partido):- + realizoAccion(Partido, _), + forall(realizoAccion(Partido, Accion),esGenuina(Accion)). + + +esAccion(Partido, gestionIndividual):- + realizoAccion(Partido, gestionIndividual(_,_,_)). + +esAccion(Partido, obra):- + realizoAccion(Partido, obra(_)). + +esAccion(Partido, lucha):- + realizoAccion(Partido, lucha(_)). + +esGenuina(obra(Anio)):- + not(elecciones(Anio)). + +esGenuina(gestionIndividual(_,Nombre,Anio)):- + estudiantes(_,Anio,Nombre). + +esGenuina(lucha(_)). + +caracteristicasSimultaneas(Partido):- + realizoAccion(Partido,_), + findall(Caracteristica,caracteristicaDelPartido(Partido,Caracteristica),ListaDeCaracteristicas), + list_to_set(ListaDeCaracteristicas, ListaDeCaracteristicasReducida), + length(ListaDeCaracteristicasReducida, CantidadQueCumple), + CantidadQueCumple >= 2. + +caracteristicaDelPartido(Partido,demagogica):- + esDemagogica(Partido). + +caracteristicaDelPartido(Partido,burocrata):- + esBurocrata(Partido). + +caracteristicaDelPartido(Partido,transparente):- + esTransparente(Partido). + +% Tercera Parte + +/* + - Predicado Inversible: caracteristicasSimultaneas(Partido). + + Es inversible ya que reducimos el Universo Conocido en la linea 110, mediante el generador realizoAccion/2, a solo aquellos que sean un Partido + y hayan realizado alguna accion. + + Ejemplo de consulta existencial con variable anonima: caracteristicasSimultaneas(_). ¿Existe algun partido que tenga dos o mas caracteristicas + distintas al mismo tiempo? Lo que daria true dos veces, ya que encuentra dos caminos distintos. (partidoPDEP es el que cumple en ambas ocasiones). + + Tambien podemos preguntar por el universo de partidos que cumplen con el predicado: caracteristicasSimultaneas(Quienes). + Quienes = partidoPDEP, Quienes = partidoPDEP. + + - Predicado No Inversible: esGenuina(obra(Anio)). + + No es inversible ya que se utiliza el not sin acotar previamente el universo (no hay un generador). Prolog no sabe cuales son los años que puede unificar. + + Al no ser inversible no se puede preguntar si existe alguna obra que sea genuina ( esGenuina(obra(_)) ), ni cuales son las obras del Universo que + sean genuinas ( esGenuina(obra(Cuales)) ). Solo le podemos hacer consultas puntuales; esGenuina(obra(2018)) = true, esGenuina(obra(2017)) = false. + + +*/