/*
  hombre(Persona)

  Predicado que indica si una Persona es un hombre

  Argumento
  + Persona
    - Significado: nombre de una persona
    - Tipo: entrada y salida
*/

hombre(juan).
hombre(luis).
hombre(miguel).
hombre(alberto).
hombre(rodrigo).
hombre(pedro).


/*
  mujer(Persona)

  Predicado que indica si una Persona es una mujer

  Argumento
  + Persona
    - Significado: nombre de una persona
    - Tipo: entrada y salida
*/
mujer(ana).
mujer(marta).
mujer(alicia).
mujer(carmen).
mujer(laura).
mujer(isabel).
mujer(silvia).


/*
  padres(Persona,Padre,Madre)

  Predicado que indica si Padre y Madre son el padre y la madre, respectivamente, de Persona

  Argumentos
 + Persona
    - Significado: nombre de una persona
    - Tipo: entrada y salida
 + Padre: 
    - Significado: nombre de una persona
    - Tipo: entrada y salida
 + Madre: 
    - Significado: nombre de una persona
    - Tipo: entrada y salida
*/
padres(juan,luis,ana).
padres(alberto,luis,ana).
padres(rodrigo,juan,laura).
padres(marta,luis,ana).
padres(alicia,luis,ana).
padres(carmen,juan,laura).
padres(isabel,juan,laura).
padres(miguel,juan,laura).
padres(laura,pedro,silvia).


/*
  hermana(X,Y)

  Predicado que indica si X es hermana de Y, es decir, tienen el mismo padre y la misma madre

  Argumentos
  + X: 
    - Significado: nombre de una persona
    - Tipo: entrada y salida
  + Y: 
    - Significado: nombre de una persona
    - Tipo: entrada y salida


  Variables locales
  + P:
    - Significado: nombre de una persona
  + M:
    - Significado: nombre de una persona

  Predicado relacionado
  + padres
*/

hermana(X,Y):-
	mujer(X),
	padres(X,P,M),
	padres(Y,P,M).


/*
  hermana_verdadera(X,Y)

  Predicado que indica si X es hermana de Y, es decir, tienen el mismo padre y la misma madre y, además, X es distinta de Y

 Argumentos
  + X: 
    - Significado: nombre de una persona
    - Tipo: entrada y salida
  + Y: 
    - Significado: nombre de una persona
    - Tipo: entrada y salida

  Variables locales
  + P:
    - Significado: nombre de una persona
  + M:
    - Significado: nombre de una persona

  Predicado relacionado
  + padres
*/
hermana_verdadera(X,Y):-
	mujer(X),
	padres(X,P,M),
	padres(Y,P,M),
	X \= Y.

/*
  ancestro(X,Y)

  Predicado que indica si X es un ancestro de Y, es decir, es su padre o madre o un ancestro de su padre o madre

 Argumentos
  + X: 
    - Significado: nombre de una persona
    - Tipo: entrada y salida
  + Y: 
    - Significado: nombre de una persona
    - Tipo: entrada y salida

 Variable local
  + Z:
    - Significado: nombre de una persona

  Predicado relacionado
  + padres
*/

ancestro(X,Y):-
	padres(Y,X,_).

ancestro(X,Y):-
	padres(Y,_,X).

ancestro(X,Y):-
	padres(Y,Z,_),
	ancestro(X,Z).

ancestro(X,Y):-
	padres(Y,_,Z),
	ancestro(X,Z).


