Prolog

Prolog
Desarrollador(es)
Alain Colmerauer y Philippe Roussel
Información general
Extensiones comunes pl, pro y P
Apareció en 1972
Diseñado por Alain Colmerauer, Robert Kowalski y Philippe Roussel
Influido por Planner

Prolog (o PROLOG), proveniente del francés PROgrammation en LOGique,[1]​ es un lenguaje de programación lógico e interpretado usado habitualmente en el campo de la Inteligencia artificial.

Historia

Se trata de un lenguaje de programación ideado a principios de los años 70 en la Universidad de Aix-Marseille I (Marsella, Francia) por Alain Colmerauer y Philippe Roussel. Nació de un proyecto que no tenía como objetivo la traducción de un lenguaje de programación, sino el tratamiento algorítmico de lenguajes naturales. Alain Colmerauer y Robert Kowalski trabajaban en la parte del procesado del lenguaje natural y Jean Trudel y Philippe Roussel en la parte de deducción e inferencia del sistema. Interesado por el método de resolución SL, Philippe Roussel persuadió a su autor, Robert Kowalski para que colaborara con el proyecto, dando lugar a una versión preliminar del lenguaje Prolog a finales de 1971[2]​ y apareciendo la versión definitiva en 1972.[3]​ Esta primera versión de Prolog fue programada en ALGOL W.

Inicialmente se trataba de un lenguaje totalmente interpretado hasta que, en 1983, David H.D. Warren desarrolló un compilador capaz de traducir Prolog en un conjunto de instrucciones de una máquina abstracta denominada Warren Abstract Machine, o abreviadamente, WAM. Desde entonces Prolog es un lenguaje semi-interpretado.

Si bien en un principio se trataba de un lenguaje de uso reducido, la aparición de intérpretes del mismo para microordenadores de 8 bits (ej: micro-PROLOG) y para ordenadores domésticos de 16 bits (ej: Turbo Prolog de Borland, entre otros muchos), a lo largo de la década de 1980, contribuyó notablemente a su popularización.[4]​ Otro importante factor en su difusión fue la adopción del mismo para el desarrollo del proyecto de la quinta generación de computadoras a principios de la década de los 80,[5]​ en cuyo contexto se desarrolló la implementación paralelizada del lenguaje llamada KL1 y del que deriva parte del desarrollo moderno de Prolog.

Las primeras versiones del lenguaje diferían, en sus diferentes implementaciones, en muchos aspectos de sus sintaxis, empleándose mayormente como forma normalizada el dialecto propuesto por la Universidad de Edimburgo,[6]​ hasta que en 1995 se estableció un estándar ISO (ISO/IEC 13211-1), llamado ISO-Prolog.

Prolog se enmarca en el paradigma de los lenguajes lógicos y declarativos, lo que lo diferencia enormemente de otros lenguajes más populares tales como Fortran, Pascal, C o Java.

Vuelta atrás (backtracking)

En los lenguajes de programación antes mencionados, las instrucciones se ejecutan normalmente en orden secuencial, es decir, una a continuación de otra, en el mismo orden en que están escritas, que solo varía cuando se alcanza una instrucción de control (un bucle, una instrucción condicional o una transferencia).

Los programas en Prolog se componen de cláusulas de Horn que constituyen reglas del tipo "modus ponendo ponens", es decir, "Si es verdad el antecedente, entonces es verdad el consecuente". No obstante, la forma de escribir las cláusulas de Horn es al contrario de lo habitual. Primero se escribe el consecuente y luego el antecedente. El antecedente puede ser una conjunción de condiciones que se denomina secuencia de objetivos. Cada objetivo se separa con una coma y puede considerarse similar a una instrucción o llamada a procedimiento de los lenguajes imperativos. En Prolog no existen instrucciones de control. Su ejecución se basa en dos conceptos: la unificación y el backtracking.

Gracias a la unificación, cada objetivo determina un subconjunto de cláusulas susceptibles de ser ejecutadas. Cada una de ellas se denomina punto de elección. Prolog selecciona el primer punto de elección y sigue ejecutando el programa hasta determinar si el objetivo es verdadero o falso.

En caso de ser falso entra en juego el backtracking, que consiste en deshacer todo lo ejecutado situando el programa en el mismo estado en el que estaba justo antes de llegar al punto de elección. Entonces se toma el siguiente punto de elección que estaba pendiente y se repite de nuevo el proceso. Todos los objetivos terminan su ejecución bien en éxito ("verdadero"), bien en fracaso ("falso").

Programación en Prolog

Existen dos tipos de cláusulas: Hechos y Reglas. Una regla es del tipo:

Cabeza :- Cuerpo.

y se lee como "La cabeza es verdad si el cuerpo es verdad". El cuerpo de una regla consiste en llamadas a Predicado (lógica)predicados, que son llamados los objetivos de las reglas. El predicado ,/2 (es decir, un operador de paridad 2 (que recibe 2 argumentos) y de nombre , ) denota conjunción de objetivos, y el operador ;/2 denota disyunción. Conjunciones y disyunciones pueden solo aparecer en el cuerpo, no en la cabeza de la regla. En realidad la disyunción no es un operador básico o predefinido, sino que está meta-programado así:

';' (A,_) :- A.

';' (_,B) :- B.

Las cláusulas sin cuerpo (es decir, antecedente) son llamados hechos porque siempre son ciertos. Un ejemplo de un hecho es:

gato(tom).

que es equivalente a la regla:

gato(tom) :- true.

El predicado predefinido true/0 siempre es verdad.

Dado el hecho anterior, se puede preguntar:

¿Es Tom un gato?

?- gato(tom).  
Yes

¿Qué cosas son gatos?

?- gato(X).  
X = Tom

Debido a la naturaleza relacional de muchos predicados, pueden ser usados revertidos sus argumentos. Por ejemplo, length/2 puede ser usado para determinar el tamaño (longitud) de una lista: length([a,b,c], L), así como para generar un esqueleto de lista para un largo dado (length(X, 5)). Similarmente, append/3 puede ser usado también para unir o anexar dos listas: append([a,b], [c,d], X), así como para dividir una lista en dos partes: append(X, Y, [a,b,c,d]). Todo depende de qué argumentos sean variables libres y cuáles sean instanciados. En analogía con la programación imperativa, las variables libres son argumentos de salida y el resto son argumentos de entrada. Pero en Prolog, a diferencia de los lenguajes imperativos, dicho rol es intercambiable en la mayoría de los predicados. Esta característica se denomina reversibilidad, y las combinaciones válidas de argumentos de salida o entrada se denomina modos de uso. Por ejemplo, el predicado length/2 es reversible y tiene tres modos de uso: los dos argumentos instanciados, el primer argumento instanciado pero el otro no, y viceversa. El modo de uso con los dos argumentos sin instanciar no tiene mucho sentido, pero podría ser admitido según algunas implementaciones, en tal caso, generaría todas los esqueletos de lista de todas las longitudes posibles...

Por esta razón, una biblioteca relativamente pequeña de predicados basta para muchos programas en Prolog. Todos los predicados pueden también ser usados para realizar pruebas unitarias: las consultas pueden ser incrustados en programas y permitir pruebas automáticas de regresión en tiempo de compilación.

Como un lenguaje de propósito general, Prolog también posee varios predicados predefinidos para interacción con el sistema operativo, como entrada/salida, gráficos y comunicaciones de datos. Estos predicados no tienen un significado relacional y son solo útiles por los efectos laterales que exhiben en el sistema. Por ejemplo, el predicado write/1 muestra un término en la pantalla, pero no tiene relevancia su valor de verdad o falsedad.

Expresiones

Prolog cuenta con operadores para la unificación y comparación, sea con evaluación o sea simbólica, como los siguientes:

  • X is Y %unificación con evaluación.
  • X = Y %unificación simbólica
  • X=:=Y %comparación con evaluación
  • X == Y %comparación simbólica.
?- X is 3+5.
   X = 8

?- X = 3+5.
   X = 3+5

?- 3+5 =:= 2+6.
   yes

?- 3+5 == 2+6.
   no

?- 3+5 == 3+5.
   yes

Listas

La representación de hechos simples no es lo común en la clasificación de elementos, sino que se agrupan los elementos de un mismo tipo en una lista.

Las listas son colecciones de elementos en Prolog. Una lista se divide en dos partes: Cabeza. Es el primer elemento de la lista. Cola. Es una lista con el resto de los elementos de la lista. La cabeza y la cola de una lista se separan con el símbolo "|".

Ejemplos de código Prolog

Ejemplo simple

%%
%% declaraciones
%%
padrede('Juan', 'María'). % Juan es padre de María
padrede('Pablo', 'Juan'). % Pablo es padre de Juan
padrede('Pablo', 'Marcela'). % Pablo es padre de Marcela
padrede('Carlos', 'Débora'). % Carlos es padre de Débora

% A es hijo de B si B es padre de A
hijode(A,B) :- padrede(B,A).
% A es abuelo de B si A es padre de C y C es padre B
abuelode(A,B) :- 
   padrede(A,C), 
   padrede(C,B).
% A y B son hermanos si el padre de A es también el padre de B y si A y B no son lo mismo
hermanode(A,B) :- 
   padrede(C,A) , 
   padrede(C,B), 
   A \== B.        

% A y B son familiares si A es padre de B o A es hijo de B o A es hermano de B
familiarde(A,B) :- 
   padrede(A,B).
familiarde(A,B) :-
   hijode(A,B). 
familiarde(A,B) :- 
   hermanode(A,B).
%%
%% consultas
%%
% ¿Juan es hermano de Marcela?
?- hermanode('Juan', 'Marcela').
yes

% ¿Carlos es hermano de Juan?
?- hermanode('Carlos', 'Juan').
no

% ¿Pablo es abuelo de María?
?- abuelode('Pablo', 'María').
yes

% ¿María es abuela de Pablo?
?- abuelode('María', 'Pablo').
no

Factorial de un número

% La sintaxis es factorial(N, F) -> Factorial de N es F (el resultado se guarda en F)
factorial(0, 1).
factorial(1, 1).
factorial(N, F) :- N>0, N1 is N - 1, factorial(N1, F1), F is N * F1.

%el factorial se llama recursivamente dejando el resultado en F

Término de Fibonacci de un número

% La sintaxis es fibonacci(N, F) -> Término N de la sucesión (el resultado se guarda en F).
fibonacci(0, 0) :-!.
fibonacci(1, 1) :-!.
fibonacci(N ,F) :-N1 is N - 1, fibonacci(N1, F1),N2 is N - 2, fibonacci(N2, F2), F is F1 + F2.

%el fibonacci se llama recursivamente dejando el resultado en F.

Usos de Listas en Prolog

Creación y consulta de listas

plantas([manzana, naranja, limón, espinaca, gardenia, alfalfa, pino]). 

lista([1,2,3]).

?-lista([H|T]).
   H=1 
   T=[2,3]

?-lista([H,J|T]).
   H=1
   J=2
   T=[3]

Longitud de una lista

% Si queremos hallar la longitud de una lista.
% La longitud de una lista vacía es 0.
% La longitud de cualquier lista es la longitud de la cola + 1.

longitud([],0).
longitud([_|T],N):-longitud(T,N0), N is N0 + 1.

?- longitud([a,b,c],L).
   L = 3
?- longitud([a,b,c],4).
   No

Búsqueda de un elemento

% Si queremos determinar si un elemento pertenece a una lista.
% El elemento pertenece a la lista si coincide con la cabeza de la lista.
% El elemento pertenece a la lista si se encuentra en la cola de la lista.

pertenece(X,[X|_]) .
pertenece(X,[_|R]):- pertenece(X,R). 

?- pertenece(b,[a,b,c]).
   Yes
?- pertenece(b,[a,[b,c]]).
   No
?- pertenece([b,c],[a,[b,c]]).
   Yes
?- pertenece(X,[a,b]).
   X = a ;
   X = b

Eliminar elemento de una lista

% Si queremos eliminar un elemento de la lista.
% Si X es la cabeza de la lista, la cola T es la lista sin X
% Si X no es la cabeza de la lista, conservamos la cabeza de la lista 
%     como parte de la respuesta y continuamos eliminando X de la cola T.
elimina(X,[X|T],T).
elimina(X,[H|T],[H|T1]):- elimina(X,T,T1).

?- elimina(1,[1,2,3,4],R).
   R = [2,3,4]
?- elimina(1,R,[2,3]).
   R = [1, 2, 3] ;
   R = [2, 1, 3] ;
   R = [2, 3, 1]  
?- elimina(X,[1,2,3],Y).
   X = 1, Y = [2,3] ;
   X = 2, Y = [1,3] ;
   X = 3, Y = [1,2]

Concatenar listas

% Si queremos concatenar dos listas lista. 
% Concatenar una lista vacía con L es L.
% Concatenar X|L1 con L2 es poner el primer 
% elemento de la primera lista (X) más la 
% concatenación del resto de la lista (L1) con L2

concatenar([],L,L).
concatenar([X|L1],L2,[X|L3]):-concatenar(L1,L2,L3).

?- concatenar([1,2],[3,4],R).
  R = [1, 2, 3, 4].
?- concatenar(X,Y,[1,2]).
  X = [], Y = [1,2] ;
  X = [1], Y = [2] ;
  X = [1,2], Y = []

Comprobar si una lista es la inversa de otra

% Si queremos calcular la inversa de una lista. 
% La inversa de una lista vacía es una lista vacía.
% La inversa de H|T es la inversa de T concatenada con H.

inversa([],[]).
inversa([H|T],L):-  inversa(T,R),  concatenar(R,[H],L).

?- inversa([a,b,c,d],[d,c,b,a]).
   Yes/Si
% Utilizando un parámetro acumulador.

inver(L1,L2):-inver(L1,L2,[]).

inver([],L,L).
inver([H|T],L,S):-inver(T,L,[H|S]).

?- inver([a,b,c,d],[d,c,b,a]).
   Yes

Referencias

  1. Colmerauer, Alain y Roussel, Philippe. La naissance de Prolog, julio de 1992
  2. BERGIN, Thomas J. y GIBSON, Richard G., History of Programming Languages II, New York, ACM Press, Addison-Wesley, 1996, ISBN 0-201-89502-1
  3. Kowalski, R. A. The early years of logic programming. 
  4. El lenguaje PROLOG, artículo en el periódico ABC del 12 de octubre de 1986
  5. Aplicaciones de la Inteligencia Artificial en la Actividad Empresarial, la Ciencia y la Industria, de Wendy B. Rauch-Hindin, página 644 y siguientes, ISBN 84-87189-07-5, en Google Books.
  6. A falta de una especificación formal del Prolog de Edimburgo se ha utilizado sobre todo como referencia el DEC-10 PROLOG Manual de Bowen (1982) o el Programming in Prolog de Clocksin y Mellish.

Véase también

Enlaces externos

Read other articles:

Labor unions in the United StatesHotel union workers strike with the slogan One job should be enoughNational organization(s)AFL–CIO, SOC, IWWRegulatory authorityUnited States Department of Labor National Labor Relations BoardPrimary legislationNational Labor Relations Act Fair Labor Standards Act of 1938 Taft–Hartley ActTotal union membership14.3 million (2022)[1]Percentage of workforce unionized10.1% (2022) Public: 33.1% Private: 6.0% International Labour OrganizationUnited Stat...

 

Webtoon hosting service WEBTOON redirects here. For the comic format, see Webtoon. WebtoonType of siteWebtoon platformAvailable inMultilingualOwner Naver Corporation (66.8%) LY Corporation (33.3%) Created byJunKoo KimParentWebtoon EntertainmentURLKorean websiteEnglish websiteCommercialYesRegistrationOptionalLaunched 2004 Korean 2013 Japanese (Line Manga launched) 2014 English, Thai, Mandarin, Cantonese 2015 Indonesian 2019 Spanish, French Current statusActive Webtoon[a]...

 

Halaman ini berisi artikel tentang film. Untuk hubungan antar pribadi, lihat Perkawinan. PerkawinanSutradaraWim UmbohProduserAnnie MamboDitulis olehWim UmbohNarto ErawanPemeranSophan SophiaanWidyawatiKusno SudjarwadiDicky ZulkarnaenRahayu EffendiKomalasariRd MochtarYan BastianEmilia ContessaPenata musikIdris SardiSuparman SidikSinematograferGaby MamboLukman Hakim NaimPenyuntingWim UmbohUraoka K.DistributorAries Raya InternationalFar Eastern Film CoTanggal rilis1972Durasi109 menitNegaraI...

Cet article possède un paronyme, voir Courtoin. Tourcoing De haut en bas, et de gauche à droite : l'Hôtel de Ville, la Gare, le Parc de l'Union, La tossée friche, le beffroi de l'ancienne chambre de commerce et de l'industrie et l'église Saint-Christophe. Blason Administration Pays France Région Hauts-de-France Département Nord Arrondissement Lille Intercommunalité Métropole européenne de Lille Maire Mandat Doriane Bécue (DVD)[1] 2020-2026 Code postal 59200 Code commune 59599...

 

Official VideoEvents at the2011 World ChampionshipsTrack events100 mmenwomen200 mmenwomen400 mmenwomen800 mmenwomen1500 mmenwomen5000 mmenwomen10,000 mmenwomen100 m hurdleswomen110 m hurdlesmen400 m hurdlesmenwomen3000 msteeplechasemenwomen4 × 100 m relaymenwomen4 × 400 m relaymenwomenRoad eventsMarathonmenwomen20 km walkmenwomen50 km walkmenField eventsHigh jumpmenwomenPole vaultmenwomenLong jumpmenwomenTriple jumpmenwomenShot putmenwomenDiscus throwmenwomenHammer throwmenwomenJavelin thr...

 

German art historian This article includes a list of general references, but it lacks sufficient corresponding inline citations. Please help to improve this article by introducing more precise citations. (June 2014) (Learn how and when to remove this template message)Richard KrautheimerBorn6 July 1897 Fürth Died1 November 1994  (aged 97)Rome Educationdoctorate OccupationArt historian EmployerUniversity of LouisvilleVassar College (1937–) AwardsGuggenh...

Jewish atonement ritual Repentance in Judaism TeshuvaReturn Repentance, atonement andhigher ascent in Judaism In the Hebrew Bible Altars Korban Temple in Jerusalem Prophecy within the Temple Aspects Confession Atonement Love of God Awe of God Mystical approach Ethical approach Meditation Services Torah study Tzedakah Mitzvot In the Jewish calendar Month of Elul Selichot Rosh Hashanah Shofar Tashlikh Ten Days of Repentance Kapparot Mikveh Yom Kippur Sukkot Simchat Torah Ta'anit Tisha B'Av Pass...

 

Universitas Dankook단국대학교 (檀國大學校)Moto자립·자주·구국Moto dalam bahasa InggrisSelf-relianceIndependenceNational salvationJenisUniversitas swastaDidirikan3 November 1947PresidenHo-sung ChangSarjanaKampus Jukjeon: 10,466Kampus Cheonan: 11,686MagisterKampus Jukjeon: 3,648Kampus Cheonan: 3,987LokasiKampus Jukjeon: Yongin, Gyeonggi, Korea SelatanKampus Cheonan: Cheonan,Chungnam, Korea SelatanKampusUrbanWarnaBiru  MaskotBeruang[1]Situs webdankook.ac.krBerk...

 

اضغط هنا للاطلاع على كيفية قراءة التصنيف قبيلة القلاموساوية المرتبة التصنيفية قبيلة  التصنيف العلمي النطاق: حقيقيات النوى المملكة: نباتات الفرقة العليا: نباتات الأرض القسم: نباتات وعائية الشعبة: حقيقيات الأوراق الشعيبة: بذريات العمارة: كاسيات البذور الطائفة: أحاديات ا...

Logo MetroTV Berikut ini adalah daftar penyiar MetroTV. Penyiar saat ini Khusus Berita Metro, Selamat Pagi Indonesia, dan Newsline Amie Ardhini (mantan penyiar TVRI, Kompas TV, dan BTV) Andromeda Arizal Anggi Hasibuan Aviani Malik Boy Noya (mantan penyiar antv) Clara Alverina Clara Masitta Edmund Daniel (mantan penyiar BTV dan IDTV) Eugenie Gani Eva Wondo (mantan penyiar Kompas TV biro Jawa Tengah) Febrian Ahmad Fifi Aleyda Yahya (mantan penyiar TVRI) Fitri Megantara (mantan penyiar Trans TV,...

 

Le filet à papillon de Vladimir Nabokov, romancier et lépidoptériste Un lépidoptériste est un spécialiste des lépidoptères. Le terme inclut aussi les amateurs qui capturent, collectent, étudient ou simplement observent les lépidoptères[1]. Historique L'accroissement du nombre de lépidoptéristes après la Renaissance peut être attribué à un intérêt croissant pour la science et la nature. Quand Carl von Linné écrivit la dixième édition du Systema Naturae en 1758, il y ava...

 

Sota FukushiFukushi pada Festival Film Internasional Tokyo ke-31 pada tahun 2018Nama asal福士 蒼汰Lahir30 Mei 1993 (umur 30)Tokyo, JepangPekerjaanPemeranTahun aktif2010—sekarangAgenKen-OnSitus webwww.ken-on.co.jp/fukushi/ Sota Fukushi (福士 蒼汰code: ja is deprecated , Fukushi Sōta, lahir 30 Mei 1993) adalah pemeran Jepang. Ia paling dikenal karena memerankan Gentaro Kisaragi dalam waralaba Kamen Rider, dan sejak saat itu ia juga membintangi sejumlah seri televisi s...

  「俄亥俄」重定向至此。关于其他用法,请见「俄亥俄 (消歧义)」。 俄亥俄州 美國联邦州State of Ohio 州旗州徽綽號:七葉果之州地图中高亮部分为俄亥俄州坐标:38°27'N-41°58'N, 80°32'W-84°49'W国家 美國加入聯邦1803年3月1日,在1953年8月7日追溯頒定(第17个加入联邦)首府哥倫布(及最大城市)政府 • 州长(英语:List of Governors of {{{Name}}}]]) •&...

 

Erika HistorialAstillero Kasado Dock Co. Ltd. en KudamatsuClase PetroleroTipo petroleroOperador Panship Management and Services Srl.Asignado 1975Baja Hundido en un temporal el 12 de diciembre de 1999Destino NaufragioMarea negra en BretañaSuceso Marea negraFecha 29 de diciembre de 1999Lugar Bretaña (Francia)Resultado Derrame de 20 000 toneladas de crudo Características generalesDesplazamiento 37 283 toneladasTonelaje 37 283 TnEslora 184.03 metrosManga 28.05 metrosCalado 11.0...

 

Finalis Putri Indonesia 2019 terlihat mengenakan padu padan busana modern dengan kain batik dan tenun. Berkain adalah sebuah gerakan mode di Indonesia yang berupaya untuk membiasakan kembali penggunaan kain-kain tradisional, seperti kain batik atau tenun. Penggunaan kain tradisional ini umumnya dipadupadankan dengan baju dan aksesori bergaya modern yang kemudian dipakai untuk kegiatan sehari-hari.[1][2][3] Komunitas Komunitas berkain cukup banyak ditemui di berbagai wi...

乔冠华 中华人民共和国外交部部长 中国人民对外友好协会顾问 任期1974年11月—1976年12月总理周恩来 → 华国锋前任姬鹏飞继任黄华 个人资料性别男出生(1913-03-28)1913年3月28日 中華民國江蘇省盐城县逝世1983年9月22日(1983歲—09—22)(70歲) 中华人民共和国北京市籍贯江蘇鹽城国籍 中华人民共和国政党 中国共产党配偶明仁(1940年病逝) 龚澎(1970年病逝) 章含�...

 

Baseball stadium in Lakewood, New Jersey ShoreTown BallparkShoreTown BallparkLocation within New JerseyShow map of New JerseyShoreTown BallparkShoreTown Ballpark (the United States)Show map of the United StatesFormer namesFirstEnergy Park (2002–21) GPU Energy Park (2001)Address2 Stadium WayLakewood, NJ 08701Coordinates40°04′30″N 74°11′13″W / 40.0751°N 74.1870°W / 40.0751; -74.1870OwnerShore Town Baseball[1]Capacity6,588 reserve seats plus addition...

 

يفتقر محتوى هذه المقالة إلى الاستشهاد بمصادر. فضلاً، ساهم في تطوير هذه المقالة من خلال إضافة مصادر موثوق بها. أي معلومات غير موثقة يمكن التشكيك بها وإزالتها. (ديسمبر 2018) 2017 في الإكوادورمعلومات عامةالسنة 2017 البلد الإكوادور 2016 في الإكوادور 2018 في الإكوادور تعديل - تعديل مصدري -...

Pour les articles homonymes, voir Gouvernement Jules Ferry. Gouvernement Jules Ferry (2) Troisième République Données clés Président de la République Jules Grévy Président du Conseil Jules Ferry Formation 21 février 1883 Fin 30 mars 1885 Durée 2 ans, 1 mois et 9 jours Composition initiale Coalition Gauche républicaine - Union démocratique - Union républicaine - Centre gauche Représentation IIIe législature 371  /  557 Gouvernement Armand Fallières Gou...

 

Predicted galactic collision The Andromeda–Milky Way collision is a galactic collision predicted to occur in about 4.5 billion years between the two largest galaxies in the Local Group—the Milky Way (which contains the Solar System and Earth) and the Andromeda Galaxy.[1][2][3][4][5] The stars involved are sufficiently far apart that it is improbable that any of them will individually collide,[6] though some stars will be ejected.[7]&...