% Exercice 1
% Q1
plusgrand(jean,marie).

% Q2
homme(jean).
mortel(jean) :- homme(jean).

% Proposition de Mayi (correcte et plus générale)
%mortel(X):- homme(X).

% Q3
% aime(P1,P2)
% P1 celui qui aime
% P2 celui qui est aimé
aime(toto,biere).
aime(toto,londres).
aime(paul,Gens):- aime(Gens,biere),aime(Gens,londres).

% Q4
% 1 param
estEcoleIng(eisti).
% 2 param
est(ecoleing,eisti).

% Q5
auteur(mozart,'flute enchantée').

% Exercice 2
:- use_module(library(clpfd)).
% Q1
% Solution Jordan modifiée
affiche(_,0).
affiche(X,N) :- N>0, write(X),write(' '), N1 #= N-1, affiche(X, N1).


% Q2
% Solution de Vianney modifié
pair(0). %idem pair(X) :- X=0.
pair(X) :- 
    X>0, 
    X1 #= X-2,
    pair(X1).

% Solution de Vincent corrigée
pair_mod(X) :- X mod 2 =:= 0.


% Q3

% Solution de Hugo corrigée
decroissant(0).
decroissant(X) :- X>0, write(X), X1 #= X-1 , decroissant(X1).

% Solution de Lucas
croissant(0).
croissant(N) :-
    N>0,
    N1#= N-1,
    croissant(N1),
    write(N).

% Q4
% Solution de Sylvain modifié
somme(0,0).
somme(X, R) :- X>0, X1#= X-1  , somme(X1, R1), R#=X+R1.

% Solution de kilian
somme_math(N, N1) :- N1 is ((N*(N+1))/2).


% Solution Hugo

sommemath(0,0).
sommemath(X, R) :- X>0, X1#= X-1 , R#=X+R1, sommemath(X1, R1).



% Solution de Jordan
facto(0,1).
facto(N,X) :- N1 #= N-1, facto(N1,R),X #= R*N.


% Exercice 3
% Q1
% Solution de Leo et Jordan
afficher([]).
afficher([T]) :- write(T).
afficher([T|Q]) :- write(T), afficher(Q).

% Q2
% Solution de Léo
sousEnsemble([], _).
sousEnsemble([T|Q], L2) :- member(T, L2), sousEnsemble(Q, L2).

% Q3

% Solution de Mayi et Leo

occurence([],_,0).
occurence([X|Q],X,N) :-  occurence(Q,X,N1), N #= N1 + 1.
occurence([T|Q],X,N) :- T \=X,
    occurence(Q,X,N).


% Q4

% Solution Quentin corrigée
subtitute(_,_,[],[]).

subtitute(X,Y,[X|L1],[Y|L2]) :-subtitute(X,Y,L1,L2).
subtitute(X,Y,[T1|L1],[T1|L2]) :-T1\=X,subtitute(X,Y,L1,L2).













