Repopulação após o Dilúvio

Posto do mês: maio de 2004

por thelodger

Assunto:    um pequeno programa que escrevi para brincar com a repopulação após o Dilúvio
Data:       12 Maio de 2004
Message-ID: had4a0t2v6h2fq1o4dglraet2q0m0003d1@4ax.com

Eu inicialmente postei essa mensagem num trecho profundo de discussão para tentar obter alguma visão do Pastor Dave. Decidi publicá-la em um lugar ligeiramente mais visível caso alguns criacionistas queiram comentar sobre isso....

O princípio da ideia de fazer isso tudo veio de uma conversa por telefone que tive com um ancião dos Testemunhas de Jeová, onde ele sugeriu que, em vez de tentar refutar a Bíblia, eu tentasse provar isso para mim mesmo. Eu sei que isso já é uma postagem longa, mas a tornei mais longa incluindo o código fonte Java para minhas classes Person e Civilization. Este é um programa extremamente simplista e tenho certeza de que muitos de vocês terão melhorias/correções/etc a oferecer. Apenas tenha em mente que eu o escrevi em cerca de uma hora, só por diversão.

*** início da republicação ***

Eu realmente queria saber exatamente como você resolve a questão de como a Terra conseguiu se repovoar rapidamente o suficiente para permitir a ascensão das culturas egípcia, mesopotâmica e chinesa nos anos imediatamente após o Dilúvio.

Agora, o modo como me foi explicado é que toda civilização humana surgiu após o Dilúvio. Usando idades e datas na Bíblia é possível determinar o ano exato (começando com a criação de Adão em 4026 a.C.):

From Adam's creation to the birth of Seth   130 years
Then to the birth of Enosh                  105 years
To the birth of Kenan                        90 years
To the birth of Mahalalel                    70 years
To the birth of Jared                        65 years
To the birth of Enoch                       162 years
To the birth of Methuselah                   65 years
To the birth of Lamech                      187 years
To the birth of Noah                        182 years
To the Flood                                600 years

Graças à genealogia e cronologia bíblica, o dilúvio pode ser datado em 2370 a.C., aproximadamente 4.400 anos atrás, como você disse.

De qualquer forma, os progenitores da raça humana moderna foram Cam, Sem e Jafé, os três filhos de Noé e suas esposas. Eles foram férteis e se multiplicaram após o dilúvio até aproximadamente a época de Peleg, quando foi construída a Torre de Babel. A construção da torre levou à dispersão de vários grupos étnicos e linguísticos para todos os cantos da Terra e o resto, como dizem, é história.

É impossível determinar pela Bíblia a hora exata da Torre de Babel, mas estima-se que tenha sido por volta de 180 anos após o dilúvio com base em quando Peleg viveu.

Agora, a pirâmide egípcia mais antiga conhecida (a Pirâmide de Degraus) foi datada em cerca de 300 anos antes dessa data, assim como a mais recente Pirâmide Vermelha, Pirâmide Curva e, é claro, as Pirâmides de Gizé e a Esfinge, todas geralmente datadas como ocorrendo antes da data bíblica do dilúvio também. Claro, essas datas devem estar deslocadas em algo em torno de 500 anos para que sua construção tenha ocorrido após a Torre de Babel. Então, presumindo que esse seja o caso, a próxima pergunta é quantas pessoas precisavam estar vivas no Egito no momento da construção das pirâmides para viabilizar tal construção? É realmente impossível saber com certeza, mas a estimativa geralmente aceita é em torno de 1–2 milhões de pessoas vivendo no Egito na época e uma força de trabalho de construção de pirâmides em torno de 20.000 pessoas.

Não é só o Egito que precisa ser contabilizado, claro. Toda a região do Crescente Fértil, Suméria, Acádia, a própria Babilônia — toda essa região foi igualmente povoada logo após o Dilúvio e muitas cidades foram construídas indicando, no mínimo, centenas de milhares, provavelmente milhões de pessoas.

Na China, por volta de 2100 a.C. (sem dúvida quase 300 anos depois do Dilúvio), os registros mais antigos conhecidos da dinastia Xia são conhecidos por existir. Assim, presumivelmente os descendentes sobreviventes do dilúvio que se dirigiam para a China, quando dispersos em Babel, demoraram algum tempo para migrar para lá e depois desenvolveram sua cultura. Havia, aparentemente, dezenas ou possivelmente centenas de milhares de pessoas na China nessa época também.

Portanto, num esforço para determinar se eu poderia me manter nas realidades da biologia humana e postular um cenário de repovoamento, escrevi hoje um programa de computador (sou programador). Fiz muitas suposições impraticáveis pelos padrões modernos, mas assumi que Deus estaria usando habilidades milagrosas para acelerar e apoiar o esforço de repovoamento. Meu programa leva diversos parâmetros, mas começa com a condição inicial de que 6 casais reprodutivos humanos (a Bíblia não indica que Noé e sua esposa tiveram mais filhos do que os três) começaram a procriar na taxa mais rápida que poderiam. A reprodução foi sustentada divinamente para ser tão eficiente quanto possível. Aqui estão as premissas, tão otimistas quanto eu poderia imaginá-las:

  • A expectativa máxima de vida humana é superior a 120 anos
  • Todas as mulheres entre 13 e 55 anos fazem sexo uma vez por semana inteira, desde que não estejam menstruando ou grávidas no momento; em média, 90% de todas as mulheres potencialmente grávidas estão grávidas em qualquer dado momento
  • A chance de fertilização bem-sucedida por tentativa é de 1 em 3
  • Assim que uma menina faz 13 anos, ela começa a gerar filhos, sem exceção, e continua ativa gerando filhos até os 55 anos
  • Não há mortalidade infantil
  • Não há mortes durante o parto
  • As taxas de morte em geral são dramaticamente menores do que nos tempos modernos

Meu objetivo nessa simulação era ver o que aconteceria se as taxas de natalidade fossem aceleradas o suficiente para explicar as populações necessárias para as culturas egípcia, mesopotâmica e chinesa.

Eu executei esse programa várias vezes e sei que ele é relativamente defeituoso, mas sempre que possível tentei tender para taxas de reprodução milagrosas, não para simular taxas de crescimento populacional conhecidas. Após 180 anos após o Dilúvio, aproximadamente no período da Torre de Babel, a população da Terra que o aplicativo gera fica na faixa de números a seguir (estes são de uma execução específica; fatores aleatórios levam a números ligeiramente diferentes a cada execução):

- Population of the Earth: 61.162

Olha, não está ruim, pensei quando rodei pela primeira vez. Um bom núcleo populacional para Babel, e apenas cerca de 500 anos após as datas egípcias reclamadas... Então, decidi detalhar e encontrei algo fascinante... Eles são quase todos crianças com menos de 12 anos:

  • Meninas abaixo de 12: 25.989
  • Meninos abaixo de 12: 21.446
  • Adultos (aqui, com mais de 12 anos conta como adulto): 13.727

Além disso, no momento em que parei minha simulação em 180 anos, havia 6.694 mulheres acima de 13 anos, das quais 5.291 estavam grávidas. O restante eram homens adultos.

Então, há alguns problemas sérios nesse ponto. Primeiro, estamos ficando sem tempo porque as datas das Pirâmides estão cada vez mais no passado e essa lacuna pode crescer apenas até certo ponto e ainda manter qualquer credibilidade. Segundo, um mundo composto por apenas cerca de 7.000 homens “adultos”, 5.300 mulheres grávidas e 48.000 crianças não é um em que a população se espalharia, construiria cidades e monumentos massivos, desenvolveria escrita e tudo mais, porque passariam todo o tempo criando filhos e, por fim, estamos a alguns milhões de pessoas em falta. Os corpos simplesmente não estão lá. Você poderia manter isso por alguns centenas de anos a mais (e depois que eu otimizar um pouco o código, pretendo tentar), mas não vejo como seja possível manter as taxas de crescimento populacional necessárias e ainda aliviar o problema de haver crianças demais para adultos, especialmente considerando que esses adultos são compostos por muitos adolescentes. Os humanos só crescem tão rápido. Foram as civilizações egípcia, mesopotâmica e chinesa fundadas por centenas de milhares de crianças pequenas? A gestação humana acelerou para menos de 40 semanas? Como você resolve essa aparente impossibilidade? Fico seriamente querendo saber...

Aliás, o pequeno programa que escrevi não é grande coisa, mas vou postar aqui o código-fonte para quem quiser brincar com ele, se você quiser. Eu o juntei rapidamente no almoço e ele precisa de muito trabalho para ser realmente útil.

lodger

***  begin source code ***

// Person.java

package floodworld;

import java.util.Random;
import java.util.Vector;

public class Person {

	private Random randomNumberGenerator = new Random();
	private boolean isFemale;
	private boolean isPregnant = false;
	private int currentAge = 0;
	private int weeksOfCurrentYear = 0;
	private int weeksOfGestation = 0;
	private int menstrualCycleWeek = 0;
	private int ageOfDeath = -1;
	private int weeksSinceGivingBirth = 6;
	
	public Person () {
		// 70% chance of being female
		isFemale = (randomNumberGenerator.nextInt(100) < 54);
	}
	
	public Person (boolean female) {
		isFemale = female;
	}
	
	public void setCurrentAge(int age) {
		currentAge = age;
	}
	
	public void setAgeOfDeath(int age) {
		ageOfDeath = age;
	}
	
	public void haveSex() {
		if(!isFemale || (isFemale && (currentAge < 13 || currentAge > 45 || isPregnant || menstrualCycleWeek == 3))) {
			return;
		} else {
			if(weeksSinceGivingBirth < 6) {
				return;
			}
			// female between the ages of 13 & 45 who is not pregnant and not having their period
			// 50% chance of getting pregnant
			if(randomNumberGenerator.nextInt(100) < 30) {
				isPregnant = true;
				menstrualCycleWeek = 0;
			}
		}
	}

	public boolean isGirl() {
		return (isFemale && currentAge < 13);
	}

	public boolean isBoy() {
		return (!isFemale && currentAge < 13);
	}

	public boolean isWoman() {
		return (isFemale && (currentAge > 13 && currentAge < 66));
	}

	public boolean isMan() {
		return (!isFemale && (currentAge > 13 && currentAge < 66));
	}

	public boolean isElderly() {
		return (currentAge > 65);
	}
	
	public void ageByOneWeek() {
		if(isPregnant) {
			weeksOfGestation++;
		}
		if(weeksSinceGivingBirth < 6) {
			weeksSinceGivingBirth++;
		}
		if(isFemale && currentAge > 12 && currentAge < 45 && !isPregnant) {
			if(menstrualCycleWeek < 3) {
				menstrualCycleWeek++;
			} else {
				 menstrualCycleWeek = 0;
			}
		}
		weeksOfCurrentYear++;
		if(weeksOfCurrentYear > 52) {
			weeksOfCurrentYear = 0;
			currentAge++;
		}
	}
	
	public boolean die() {
		if(ageOfDeath != -1) {
			return (currentAge == ageOfDeath);
		}
		if(currentAge < 85) {
			return (randomNumberGenerator.nextInt(1000) == 76);
		}
		if(currentAge > 85 && currentAge < 100) {
			return (randomNumberGenerator.nextInt(700) == 45);
		}
		if(currentAge > 99 && currentAge < 121) {
			return (randomNumberGenerator.nextInt(400) == 102);
		} 		
		if(currentAge > 120) {
			return (randomNumberGenerator.nextBoolean());
		} else {
			 return false;
		}
	}
	
	public Vector giveBirth() {
		Vector babies = new Vector();
		if(isPregnant && weeksOfGestation > 39) {
			if(randomNumberGenerator.nextInt(100) < 98) {
				babies.add(new Person());
			} else {
				// twins
				babies.add(new Person());
				babies.add(new Person());
			}
			isPregnant = false;
			weeksOfGestation = 0;
			weeksSinceGivingBirth = 0;
		}
		return babies;
	}
	
	public boolean isFemale() {
		return isFemale;
	}
	
	public int getAge() {
		return currentAge;
	}
	
	public boolean isPregnant() {
		return isPregnant;
	}
	
	public String stats() {
		return currentAge + " year old " + (isPregnant ? "pregnant " : "") + (isFemale ? "female" : "male");
	}
}



// Civilization.java

package floodworld;

import java.util.HashSet;
import java.util.Iterator;

public class Civilization {
	public static void main(String[] args) {
		
		int currentWeek = 0;
		int currentYear = 1;
		int currentPopulation = 8;
		
		HashSet men = new HashSet();
		HashSet women = new HashSet();
		HashSet boys = new HashSet();
		HashSet girls = new HashSet();
		HashSet elderly = new HashSet();
		HashSet deadPeople = new HashSet();
		
		// starter population
		Person noah = new Person(false);
		Person noahsWife = new Person(true);
		Person shem = new Person(false);
		Person shemsWife = new Person(true);
		Person ham = new Person(false);
		Person hamsWife = new Person(true);
		Person japheth = new Person(false);
		Person japhethsWife = new Person(true);
		
		noah.setCurrentAge(418);
		noah.setAgeOfDeath(768);
		noahsWife.setCurrentAge(100);
		shem.setCurrentAge(98);
		shem.setAgeOfDeath(550);
		shemsWife.setCurrentAge(30);
		ham.setCurrentAge(88);
		ham.setAgeOfDeath(550);
		hamsWife.setCurrentAge(30);
		japheth.setCurrentAge(108);
		japheth.setAgeOfDeath(550);
		japhethsWife.setCurrentAge(30);
		
		elderly.add(noah);
		elderly.add(noahsWife);
		elderly.add(shem);
		elderly.add(ham);
		elderly.add(japheth);
		
		women.add(shemsWife);
		women.add(hamsWife);
		women.add(japhethsWife);
		
		while(currentYear < 181) {
			int births = 0;
			int deaths = 0;
			int pregnantWomen = 0;
			
			// boys loop
			for(Iterator boysIter = boys.iterator(); boysIter.hasNext();) {
				Person boy = (Person) boysIter.next();
				boy.ageByOneWeek();
				if(boy.die()) {
					deaths++;
					deadPeople.add(boy);
					continue;
				}
				if(boy.isMan()) {
					men.add(boy);
				}
			}
			// girls loop
			for (Iterator girlsIter = girls.iterator(); girlsIter.hasNext();) {
				Person girl = (Person)girlsIter.next();
				girl.ageByOneWeek();
				if(girl.die()) {
					deaths++;
					deadPeople.add(girl);
					continue;
				}
				if(girl.isWoman()) {
					women.add(girl);
				}
			}
			// women loop
			for (Iterator womenIter = women.iterator(); womenIter.hasNext();) {
				Person woman = (Person)womenIter.next();
				if(girls.contains(woman)) {
					girls.remove(woman);
					continue;
				}
				woman.haveSex();
				woman.ageByOneWeek();
				for (Iterator babiesIter = woman.giveBirth().iterator(); babiesIter.hasNext();) {
					Person baby = (Person)babiesIter.next();
					births++;
					if(baby.isGirl()) {
						girls.add(baby);
					} else {
						boys.add(baby);
					}
				}
				if(woman.isPregnant()) {
					pregnantWomen++;
				}
				if(woman.die()) {
					deaths++;
					deadPeople.add(woman);
					continue;
				}
				if(woman.isElderly()) {
					elderly.add(woman);
				}
			}
			// men loop
			for (Iterator menIter = men.iterator(); menIter.hasNext();) {
				Person man = (Person) menIter.next();
				if(boys.contains(man)) {
					boys.remove(man);
					continue;
				}
				man.ageByOneWeek();
				if(man.die()) {
					deaths++;
					deadPeople.add(man);
					continue;
				}
				if(man.isElderly()) {
					elderly.add(man);
				}
			}
			// elderly loop
			for (Iterator elderlyIter = elderly.iterator(); elderlyIter.hasNext();) {
				Person oldPerson = (Person)elderlyIter.next();
				if(men.contains(oldPerson)) {
					men.remove(oldPerson);
					continue;
				}
				if(women.contains(oldPerson)) {
					women.remove(oldPerson);
					continue;
				}
				oldPerson.ageByOneWeek();
				if (oldPerson.die()) {
					deaths++;
					deadPeople.add(oldPerson);
					continue;
				}
			}

			// bring out the dead
			for (Iterator deadIter = deadPeople.iterator(); deadIter.hasNext();) {
				Person deadPerson = (Person)deadIter.next();
				boys.remove(deadPerson);
				girls.remove(deadPerson);
				men.remove(deadPerson);
				women.remove(deadPerson);
				elderly.remove(deadPerson);
			}
			
			// tally
			currentWeek++;
			if(currentWeek == 53) {
				currentYear++;
				currentWeek = 0;
				System.out.println(currentYear);
			}
			if(currentYear >= 180) {
				System.out.println("Year " + currentYear + "/Week " + currentWeek + ": Boys (under 12): " + boys.size() + " / Girls (under 12): " + girls.size() + " / Men (13-65): " + men.size() + " / Women (13-65): " + women.size() + " / Elderly (66+): " + elderly.size());
				System.out.println("Births: " + births);
				System.out.println("Deaths: " + deaths);
				System.out.println("Pregnant Women: " + pregnantWomen);
				int totalPopulation = (boys.size() + girls.size() + men.size() + women.size() + elderly.size());
				int totalChildren = (boys.size() + girls.size());
				int totalAdults = (men.size() + women.size() + elderly.size());
				System.out.println("Total Population: " + totalPopulation + " / "  + totalChildren  + " children, " + totalAdults + " adults");
			}
		}
	}
}

[Errata: Há um pequeno erro neste código — ele simula um ano de 53 semanas, não de 52 semanas, já que a variável "weeksOfCurrentYear" é reiniciada quando seu valor chega a 52, mas começa em 0, não em 1. Isso não afeta materialmente as conclusões do post, já que um ano mais longo, na prática, favorece os criacionistas (pois significaria mais tempo para as pessoas reproduzirem); no entanto, essa correção foi incluída por questão de precisão.]

[Voltar para os Postos do Mês de 2004]