mirror of
https://gitlab.com/upRootNutrition/dotfiles.git
synced 2025-12-07 05:27:13 -06:00
chore: moved zookeeper and website to packages
This commit is contained in:
parent
cc288ad959
commit
cf8516c54f
976 changed files with 40485 additions and 0 deletions
7
packages/website/frontend/.gitignore
vendored
Executable file
7
packages/website/frontend/.gitignore
vendored
Executable file
|
|
@ -0,0 +1,7 @@
|
|||
/dist
|
||||
/.elm-land
|
||||
/.env
|
||||
/elm-stuff
|
||||
/node_modules
|
||||
.DS_Store
|
||||
*.pem
|
||||
17
packages/website/frontend/README.md
Executable file
17
packages/website/frontend/README.md
Executable file
|
|
@ -0,0 +1,17 @@
|
|||
# frontend
|
||||
|
||||
> Built with [Elm Land](https://elm.land) 🌈
|
||||
|
||||
## Local development
|
||||
|
||||
```bash
|
||||
# Requires Node.js v18+ (https://nodejs.org)
|
||||
npx elm-land server
|
||||
```
|
||||
|
||||
## Deploying to production
|
||||
|
||||
Elm Land projects are most commonly deployed as static websites.
|
||||
|
||||
Please visit [the "Deployment" guide](https://elm.land/guide/deploying) to learn more
|
||||
about deploying your app for free using Netlify or Vercel.
|
||||
76
packages/website/frontend/elm-land.json
Executable file
76
packages/website/frontend/elm-land.json
Executable file
|
|
@ -0,0 +1,76 @@
|
|||
{
|
||||
"app": {
|
||||
"elm": {
|
||||
"development": { "debugger": true },
|
||||
"production": { "debugger": false }
|
||||
},
|
||||
"env": [],
|
||||
"html": {
|
||||
"attributes": {
|
||||
"html": { "lang": "en" },
|
||||
"head": {}
|
||||
},
|
||||
"title": "upRootNutrition",
|
||||
"meta": [
|
||||
{ "charset": "UTF-8" },
|
||||
{ "http-equiv": "X-UA-Compatible", "content": "IE=edge" },
|
||||
{
|
||||
"name": "viewport",
|
||||
"content": "width=device-width, initial-scale=1.0"
|
||||
},
|
||||
{
|
||||
"property": "og:title",
|
||||
"content": "upRootNutrition"
|
||||
},
|
||||
{
|
||||
"property": "og:image",
|
||||
"content": "/assets/meta.png"
|
||||
},
|
||||
{
|
||||
"property": "og:url",
|
||||
"content": "https://upRootNutrition.com"
|
||||
},
|
||||
{
|
||||
"name": "twitter:card",
|
||||
"content": "summary_large_image"
|
||||
},
|
||||
{
|
||||
"name": "twitter:title",
|
||||
"content": "upRootNutrition"
|
||||
},
|
||||
{
|
||||
"name": "twitter:description",
|
||||
"content": "upRootNutrition is an open source project, created by Nick Hiebert, designed to elevate the quality of nutrition science communication in online discourse. By applying more rigorous systems of reasoning, such as formal logic and semantic analysis, upRootNutrition aims to cut through the misinformation and sophistry that are endemic on social media."
|
||||
},
|
||||
{
|
||||
"name": "twitter:image",
|
||||
"content": "https://upRootNutrition.com/assets/twittercard.png"
|
||||
},
|
||||
{
|
||||
"name": "twitter:site",
|
||||
"content": "@upRootNutrition"
|
||||
},
|
||||
{
|
||||
"name": "twitter:creator",
|
||||
"content": "@upRootNutrition"
|
||||
},
|
||||
{
|
||||
"property": "og:description",
|
||||
"content": "upRootNutrition is an open source project, created by Nick Hiebert, designed to elevate the quality of nutrition science communication in online discourse. By applying more rigorous systems of reasoning, such as formal logic and semantic analysis, upRootNutrition aims to cut through the misinformation and sophistry that are endemic on social media."
|
||||
}
|
||||
],
|
||||
"link": [
|
||||
{ "rel": "icon", "type": "png", "href": "/assets/favicon.png" },
|
||||
{ "rel": "stylesheet", "href": "/styles.css" },
|
||||
{
|
||||
"rel": "stylesheet",
|
||||
"href": "https://fonts.googleapis.com/css2?family=League+Spartan:wght@100..900&display=swap"
|
||||
}
|
||||
],
|
||||
"script": []
|
||||
},
|
||||
"router": {
|
||||
"useHashRouting": false
|
||||
}
|
||||
}
|
||||
}
|
||||
35
packages/website/frontend/elm.json
Executable file
35
packages/website/frontend/elm.json
Executable file
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"type": "application",
|
||||
"source-directories": [
|
||||
"src",
|
||||
".elm-land/src"
|
||||
],
|
||||
"elm-version": "0.19.1",
|
||||
"dependencies": {
|
||||
"direct": {
|
||||
"dillonkearns/elm-markdown": "7.0.1",
|
||||
"elm/browser": "1.0.2",
|
||||
"elm/core": "1.0.5",
|
||||
"elm/html": "1.0.0",
|
||||
"elm/json": "1.1.3",
|
||||
"elm/svg": "1.0.1",
|
||||
"elm/url": "1.0.0",
|
||||
"elm-community/list-extra": "8.7.0",
|
||||
"elm-community/maybe-extra": "5.3.0",
|
||||
"hecrj/html-parser": "2.4.0",
|
||||
"juliusl/elm-ui-hexcolor": "1.0.0",
|
||||
"mdgriffith/elm-ui": "1.1.8"
|
||||
},
|
||||
"indirect": {
|
||||
"elm/parser": "1.1.0",
|
||||
"elm/regex": "1.0.0",
|
||||
"elm/time": "1.0.0",
|
||||
"elm/virtual-dom": "1.0.3",
|
||||
"rtfeldman/elm-hex": "1.0.0"
|
||||
}
|
||||
},
|
||||
"test-dependencies": {
|
||||
"direct": {},
|
||||
"indirect": {}
|
||||
}
|
||||
}
|
||||
19
packages/website/frontend/scripts/directoryconverter.sh
Executable file
19
packages/website/frontend/scripts/directoryconverter.sh
Executable file
|
|
@ -0,0 +1,19 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
for file in *; do
|
||||
# Check if it's a file (not a directory)
|
||||
if [ -f "$file" ]; then
|
||||
# Get filename without extension
|
||||
dirname="${file%.*}"
|
||||
|
||||
# Create directory if it doesn't exist
|
||||
if [ ! -d "$dirname" ]; then
|
||||
mkdir "$dirname"
|
||||
echo "Created directory: $dirname"
|
||||
fi
|
||||
|
||||
# Move the file into its directory
|
||||
mv "$file" "$dirname/"
|
||||
echo "Moved $file to $dirname/"
|
||||
fi
|
||||
done
|
||||
34
packages/website/frontend/scripts/imagedownloader.sh
Executable file
34
packages/website/frontend/scripts/imagedownloader.sh
Executable file
|
|
@ -0,0 +1,34 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
echo "Usage: $0 <website_url>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Create a directory to store images
|
||||
mkdir -p downloaded_images
|
||||
cd downloaded_images
|
||||
|
||||
# Counter for image naming, start at 1
|
||||
counter=1
|
||||
|
||||
# Extract image URLs and download
|
||||
wget -q -O- "$1" | grep -oE 'https?://[^"]+\.(jpg|jpeg|png|gif)' | while read -r img_url; do
|
||||
# Download image
|
||||
wget -q "$img_url" -O "temp_image"
|
||||
|
||||
# Get image width using file size and basic check (approximate)
|
||||
width=$(file "temp_image" | grep -oE '[0-9]+ x [0-9]+' | cut -d' ' -f1)
|
||||
|
||||
# Check if width is over 400
|
||||
if [ -n "$width" ] && [ "$width" -gt 400 ]; then
|
||||
# Rename to sequential PNG starting from image1.png
|
||||
mv "temp_image" "image$counter.png"
|
||||
((counter++))
|
||||
else
|
||||
# Remove images that don't meet criteria
|
||||
rm "temp_image"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "Downloaded $((counter-1)) images larger than 400px wide"
|
||||
1282
packages/website/frontend/src/Config/Data/Hashtags/Helpers.elm
Executable file
1282
packages/website/frontend/src/Config/Data/Hashtags/Helpers.elm
Executable file
File diff suppressed because it is too large
Load diff
429
packages/website/frontend/src/Config/Data/Hashtags/Types.elm
Executable file
429
packages/website/frontend/src/Config/Data/Hashtags/Types.elm
Executable file
|
|
@ -0,0 +1,429 @@
|
|||
module Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
|
||||
|
||||
type Hashtags
|
||||
= Agriculture
|
||||
| AgricultureAnimal
|
||||
| AgriculturePlant
|
||||
| AllCauseMortality
|
||||
| AncestryAntagonisticPleiotropy
|
||||
| AncestryHunterGatherers
|
||||
| AncestryPrimitiveCultures
|
||||
| Animals
|
||||
| AnimalsBivalves
|
||||
| AnimalsCats
|
||||
| AnimalsChickens
|
||||
| AnimalsCrustaceans
|
||||
| AnimalsDogs
|
||||
| AnimalsOrca
|
||||
| AnimalsPredators
|
||||
| AnimalsShellfish
|
||||
| Assays4E6
|
||||
| AssaysE06
|
||||
| BloodGlucose
|
||||
| BloodLipids
|
||||
| BloodLipidsCholesterol
|
||||
| BloodLipidsTriglycerides
|
||||
| Cancer
|
||||
| CancerBladderCancer
|
||||
| CancerBreastCancer
|
||||
| CancerColonCancer
|
||||
| CancerColorectalCancer
|
||||
| CancerDistalColonCancer
|
||||
| CancerEndometrialCancer
|
||||
| CancerEsophagealCancer
|
||||
| CancerGasticCancer
|
||||
| CancerLungCancer
|
||||
| CancerOvarianCancer
|
||||
| CancerPancreaticCancer
|
||||
| CancerProstateCancer
|
||||
| CancerRectalCancer
|
||||
| CancerSkinCancer
|
||||
| CancerStomachCancer
|
||||
| Carbohydrates
|
||||
| CarbohydratesFructose
|
||||
| CarbohydratesGlucose
|
||||
| CarbohydratesSugar
|
||||
| Cuckery
|
||||
| CuckeryFlatEarth
|
||||
| CuckeryLMHR
|
||||
| CuckPapers
|
||||
| Cucks
|
||||
| Debate
|
||||
| DebateArguments
|
||||
| DebateCoursework
|
||||
| DebateModeration
|
||||
| DebateOpponents
|
||||
| DietsAncestral
|
||||
| DietsAnimalBased
|
||||
| DietsCarnivore
|
||||
| DietsDietaryGuidelines
|
||||
| DietsEucaloric
|
||||
| DietsFasting
|
||||
| DietsHighCarbohydrate
|
||||
| DietsHypercaloric
|
||||
| DietsHypocaloric
|
||||
| DietsKeto
|
||||
| DietsLowCarbohydrate
|
||||
| DietsMediterraneanDiet
|
||||
| DietsPaleo
|
||||
| DietsPlantBased
|
||||
| DietsStandardAmericanDiet
|
||||
| DietsTimeRestrictedFeeding
|
||||
| DietsVegetarian
|
||||
| Disease
|
||||
| DiseaseAFib
|
||||
| DiseaseAnemia
|
||||
| DiseaseArrythmia
|
||||
| DiseaseAtherosclerosis
|
||||
| DiseaseAutoImmune
|
||||
| DiseaseBronchitis
|
||||
| DiseaseCardiovascular
|
||||
| DiseaseCeliacDisease
|
||||
| DiseaseCholestasis
|
||||
| DiseaseCognitiveDecline
|
||||
| DiseaseColonPolyops
|
||||
| DiseaseConstipation
|
||||
| DiseaseCoronaryArteryCalcification
|
||||
| DiseaseCoronaryHeart
|
||||
| DiseaseCOVID19
|
||||
| DiseaseDementia
|
||||
| DiseaseDepression
|
||||
| DiseaseDisability
|
||||
| DiseaseDiverticularDisease
|
||||
| DiseaseEmphysema
|
||||
| DiseaseErectileDysfunction
|
||||
| DiseaseFracture
|
||||
| DiseaseFrailty
|
||||
| DiseaseGallstones
|
||||
| DiseaseHeartAttack
|
||||
| DiseaseHeartDisease
|
||||
| DiseaseHeartFailure
|
||||
| DiseaseHyperphagia
|
||||
| DiseaseHypertensions
|
||||
| DiseaseHypothyroidism
|
||||
| DiseaseInflammation
|
||||
| DiseaseKidneyDisease
|
||||
| DiseaseKidneyStones
|
||||
| DiseaseLupus
|
||||
| DiseaseMacularDegeneration
|
||||
| DiseaseMentalIllness
|
||||
| DiseaseMetabolicSyndrome
|
||||
| DiseaseMoodDisorders
|
||||
| DiseaseMortality
|
||||
| DiseaseNAFLD
|
||||
| DiseaseNeuroDegenerative
|
||||
| DiseaseNutrientDeficiency
|
||||
| DiseaseObesity
|
||||
| DiseaseOsteoporosis
|
||||
| DiseaseOverweight
|
||||
| DiseaseRespiratoryDisease
|
||||
| DiseaseSchizophrenia
|
||||
| DiseaseScurvy
|
||||
| DiseaseSepsis
|
||||
| DiseaseStenosis
|
||||
| DiseaseStroke
|
||||
| DiseaseSunburn
|
||||
| DiseaseThrombosis
|
||||
| DiseaseTinnitus
|
||||
| DiseaseType1Diabetes
|
||||
| DiseaseType2Diabetes
|
||||
| DiseaseUlcerativeColitis
|
||||
| DiseaseUnderweight
|
||||
| DiseaseVisionLoss
|
||||
| Evolution
|
||||
| Exercise
|
||||
| ExerciseAgility
|
||||
| ExerciseFitness
|
||||
| ExerciseHypertrophy
|
||||
| Fallacies
|
||||
| FallaciesAppealFromIncredulity
|
||||
| FallaciesAppealToAuthority
|
||||
| FallaciesAppealToIgnorance
|
||||
| FallaciesAppealToNature
|
||||
| FallaciesBeggingTheQuestion
|
||||
| FallaciesEcological
|
||||
| FallaciesEquivocation
|
||||
| FallaciesGeneticFallacy
|
||||
| FallaciesMechanisticSpeculation
|
||||
| FallaciesMuddyingTheWaters
|
||||
| FallaciesRedHerring
|
||||
| FallaciesStrawman
|
||||
| FatMonounsaturated
|
||||
| FatPolyunsaturated
|
||||
| FatsAnimal
|
||||
| FatsArachidonicAcid
|
||||
| FatSaturated
|
||||
| FatsDHA
|
||||
| FatsDietary
|
||||
| FatsEPA
|
||||
| FatsLinoleicAcid
|
||||
| FatsMCTs
|
||||
| FatsOmega3
|
||||
| FatsOmega6
|
||||
| FatsPlant
|
||||
| FatsStearicAcid
|
||||
| FatsTrans
|
||||
| FoodsAlmonds
|
||||
| FoodsAnimal
|
||||
| FoodsAvocado
|
||||
| FoodsBeef
|
||||
| FoodsBread
|
||||
| FoodsBreakfastCereals
|
||||
| FoodsBreastMilk
|
||||
| FoodsBrewedDrinks
|
||||
| FoodsButter
|
||||
| FoodsCanolaOil
|
||||
| FoodsCereals
|
||||
| FoodsCheese
|
||||
| FoodsChocolate
|
||||
| FoodsCoconutOil
|
||||
| FoodsCoffee
|
||||
| FoodsCulturedMeat
|
||||
| FoodsDairy
|
||||
| FoodsEggs
|
||||
| FoodsFermentedFoods
|
||||
| FoodsFish
|
||||
| FoodsFishOil
|
||||
| FoodsFlaxseeds
|
||||
| FoodsFrenchFries
|
||||
| FoodsFriedFoods
|
||||
| FoodsFruit
|
||||
| FoodsGoldenRice
|
||||
| FoodsGreenTea
|
||||
| FoodsHazelnuts
|
||||
| FoodsJuice
|
||||
| FoodsLegumes
|
||||
| FoodsMargarine
|
||||
| FoodsMayonnaise
|
||||
| FoodsMeat
|
||||
| FoodsMilk
|
||||
| FoodsMockMeats
|
||||
| FoodsMushroom
|
||||
| FoodsNuts
|
||||
| FoodsOats
|
||||
| FoodsOliveOil
|
||||
| FoodsOrgans
|
||||
| FoodsPalmOil
|
||||
| FoodsPlant
|
||||
| FoodsPork
|
||||
| FoodsPotatoes
|
||||
| FoodsPoultry
|
||||
| FoodsProcessedFood
|
||||
| FoodsProcessedMeat
|
||||
| FoodsRedMeat
|
||||
| FoodsRefinedGrains
|
||||
| FoodsSeafood
|
||||
| FoodsSeedOils
|
||||
| FoodsSoybeanOil
|
||||
| FoodsSoyProducts
|
||||
| FoodsSugarSweetenedBeverages
|
||||
| FoodsTofu
|
||||
| FoodsTomatoes
|
||||
| FoodsTurmeric
|
||||
| FoodsUltraProcessed
|
||||
| FoodsVegetables
|
||||
| FoodsWalnuts
|
||||
| FoodsWheat
|
||||
| FoodsWhey
|
||||
| FoodsWhiteMeat
|
||||
| FoodsWholeFoods
|
||||
| FoodsWholeGrains
|
||||
| FoodsYeast
|
||||
| FoodsYogurt
|
||||
| HealthAnthropometrics
|
||||
| HealthBodyWeight
|
||||
| HealthDigestion
|
||||
| HealthEnergyIntake
|
||||
| HealthFertility
|
||||
| HealthGutHealth
|
||||
| HealthLifestyle
|
||||
| HealthLongevity
|
||||
| HealthMasturbation
|
||||
| HealthNutritionalStatus
|
||||
| HealthSelfImprovement
|
||||
| HealthSkin
|
||||
| HealthSmoking
|
||||
| HealthSunlight
|
||||
| HealthTattooing
|
||||
| HealthWeightGain
|
||||
| HealthWeightLoss
|
||||
| Humans
|
||||
| HumansAdolescents
|
||||
| HumansChildDevelopment
|
||||
| HumansChildren
|
||||
| HumansFemaleHealth
|
||||
| HumansGrowth
|
||||
| HumansInfants
|
||||
| HumansMaleHealth
|
||||
| HumansTransGender
|
||||
| LipoProteinsApoA
|
||||
| LipoProteinsApoB
|
||||
| LipoproteinsChylomicrons
|
||||
| LipoProteinsHighDensity
|
||||
| LipoProteinsLowDensity
|
||||
| LipoProteinsLPA
|
||||
| LipoProteinsNonHDL
|
||||
| LipoProteinsOxidizedLowDensity
|
||||
| LipoProteinsVeryLowDensity
|
||||
| MarkersAbdominalFat
|
||||
| MarkersAcrylamide
|
||||
| MarkersAutoAntibodies
|
||||
| MarkersBiomarkers
|
||||
| MarkersBloodPressure
|
||||
| MarkersBMI
|
||||
| MarkersBodyOdour
|
||||
| MarkersBoneMineralDensity
|
||||
| MarkersCognitiveFunction
|
||||
| MarkersCReactiveProtein
|
||||
| MarkersEndothelialFunction
|
||||
| MarkersEnergyExpenditure
|
||||
| MarkersFlowMediatedDilation
|
||||
| MarkersGlucoseTolerance
|
||||
| MarkersHbA1C
|
||||
| MarkersHeartRate
|
||||
| MarkersHOMAIR
|
||||
| MarkersHormones
|
||||
| MarkersIGF1
|
||||
| MarkersImmuneFunction
|
||||
| MarkersInsulin
|
||||
| MarkersInsulinSensitivity
|
||||
| MarkersInterleukin6
|
||||
| MarkersKetones
|
||||
| MarkersLiverEnzymes
|
||||
| MarkersLiverFunction
|
||||
| MarkersLPS
|
||||
| MarkersMalondialdehyde
|
||||
| MarkersMicrobiome
|
||||
| MarkersOxidativeStress
|
||||
| MarkersPCSK9
|
||||
| MarkersSatiety
|
||||
| MarkersSexHormones
|
||||
| MarkersSNPs
|
||||
| MarkersTestosterone
|
||||
| MarkersTMAO
|
||||
| MarkersTNF
|
||||
| MarkersVisceralFat
|
||||
| MedicationsCETPInhibitors
|
||||
| MedicationsPCSK9Inhibitors
|
||||
| MedicationsStatins
|
||||
| Nutrients
|
||||
| NutrientsAlcohol
|
||||
| NutrientsAnimal
|
||||
| NutrientsAntiNutrient
|
||||
| NutrientsAntioxidants
|
||||
| NutrientsArtificialSweeteners
|
||||
| NutrientsB12
|
||||
| NutrientsBetaCarotene
|
||||
| NutrientsBioavailability
|
||||
| NutrientsBiotin
|
||||
| NutrientsCalcium
|
||||
| NutrientsCarotenoids
|
||||
| NutrientsCasein
|
||||
| NutrientsCholine
|
||||
| NutrientsCreatine
|
||||
| NutrientsDietaryCholesterol
|
||||
| NutrientsFat
|
||||
| NutrientsFibre
|
||||
| NutrientsFibreInsoluble
|
||||
| NutrientsFibreSoluble
|
||||
| NutrientsFODMAPs
|
||||
| NutrientsGluten
|
||||
| NutrientsGoitrogens
|
||||
| NutrientsIsoflavones
|
||||
| NutrientsK2
|
||||
| NutrientsLCarnitine
|
||||
| NutrientsLectins
|
||||
| NutrientsManganese
|
||||
| NutrientsMinerals
|
||||
| NutrientSodium
|
||||
| NutrientsOxalate
|
||||
| NutrientsPhosphorus
|
||||
| NutrientsPhytate
|
||||
| NutrientsPhytoEstrogens
|
||||
| NutrientsPhytosterols
|
||||
| NutrientsPolyphenols
|
||||
| NutrientsSupplements
|
||||
| NutrientsTannins
|
||||
| NutrientsTaurine
|
||||
| NutrientsVitaminA
|
||||
| NutrientsVitaminB5
|
||||
| NutrientsVitaminB6
|
||||
| NutrientsVitaminC
|
||||
| NutrientsVitaminD
|
||||
| NutrientsVitaminE
|
||||
| Nutrition
|
||||
| Philosophy
|
||||
| PhilosophyAntiNatalism
|
||||
| PhilosophyAutopoiesis
|
||||
| PhilosophyCausalInference
|
||||
| PhilosophyDeMorgansLaw
|
||||
| PhilosophyEfilism
|
||||
| PhilosophyEpistemology
|
||||
| PhilosophyEthics
|
||||
| PhilosophyLinguisticPrescriptivism
|
||||
| PhilosophyModalLogic
|
||||
| PhilosophyMoralRealism
|
||||
| PhilosophyMoralSubjectivism
|
||||
| PhilosophyPredicateLogic
|
||||
| PhilosophyPropositionalLogic
|
||||
| PhilosophySentience
|
||||
| PhysiologyAdiposeTissue
|
||||
| PhysiologyAndrogens
|
||||
| PhysiologyDeNovoLipogenesis
|
||||
| PhysiologyEjaculation
|
||||
| PhysiologyGluconeogenesis
|
||||
| PhysiologyGlycogen
|
||||
| PhysiologyLPL
|
||||
| PhysiologyMetabolism
|
||||
| PhysiologyPostMenopause
|
||||
| PhysiologyPreMenopause
|
||||
| PhysiologySenescence
|
||||
| PhysiologySubendothelialSpace
|
||||
| PlantsAlgae
|
||||
| PoliticsAbortion
|
||||
| PoliticsIsraelPalestine
|
||||
| ProteinAnimal
|
||||
| ProteinPlant
|
||||
| Proteoglycans
|
||||
| ResearchAnthropology
|
||||
| ResearchArcheology
|
||||
| ResearchBradfordHill
|
||||
| ResearchCardiology
|
||||
| ResearchCaseControl
|
||||
| ResearchClimateScience
|
||||
| ResearchClinicalTrials
|
||||
| ResearchCohortStudies
|
||||
| ResearchDermatology
|
||||
| ResearchDIAAS
|
||||
| ResearchDoseResponse
|
||||
| ResearchEconomics
|
||||
| ResearchEpidemiology
|
||||
| ResearchEvidenceHierarchy
|
||||
| ResearchFFQs
|
||||
| ResearchGenetics
|
||||
| ResearchGlycemicIndex
|
||||
| ResearchGlycemicLoad
|
||||
| ResearchImmunology
|
||||
| ResearchKinetics
|
||||
| ResearchLipidology
|
||||
| ResearchMendelianRandomization
|
||||
| ResearchMetaAnalysis
|
||||
| ResearchMetaRegression
|
||||
| ResearchMice
|
||||
| ResearchMulticollinearity
|
||||
| ResearchNutritionScience
|
||||
| ResearchOphthalmology
|
||||
| ResearchPDCAAS
|
||||
| ResearchPhysiology
|
||||
| ResearchPsychology
|
||||
| ResearchRandomizedControlledTrial
|
||||
| ResearchSexuality
|
||||
| ResearchSubstitionAnalysis
|
||||
| ResearchSurvivorshipBias
|
||||
| ResearchSystematicReview
|
||||
| ResearchVirology
|
||||
| SocioEconomicStatus
|
||||
| Veganism
|
||||
| VeganismCropDeaths
|
||||
| VeganismNameTheTrait
|
||||
36
packages/website/frontend/src/Config/Data/Identity.elm
Executable file
36
packages/website/frontend/src/Config/Data/Identity.elm
Executable file
|
|
@ -0,0 +1,36 @@
|
|||
module Config.Data.Identity exposing (pageNames)
|
||||
|
||||
|
||||
type alias PageInput =
|
||||
{ pageHome : String
|
||||
, pageContact : String
|
||||
, pageArguments : String
|
||||
, pageDebate : String
|
||||
, pageCucks : String
|
||||
, pageGibberish : String
|
||||
, pageHyperBlog : String
|
||||
, pageInterviews : String
|
||||
, pageNutriDex : String
|
||||
, pageServices : String
|
||||
, pageDonate : String
|
||||
, pageNotFound : String
|
||||
, pageJournal : String
|
||||
}
|
||||
|
||||
|
||||
pageNames : PageInput
|
||||
pageNames =
|
||||
{ pageHome = "home"
|
||||
, pageServices = "services"
|
||||
, pageCucks = "cuckList"
|
||||
, pageArguments = "arguments"
|
||||
, pageDebate = "debate"
|
||||
, pageGibberish = "gibberish"
|
||||
, pageHyperBlog = "blog"
|
||||
, pageNutriDex = "nutriDex"
|
||||
, pageInterviews = "interviews"
|
||||
, pageContact = "contact"
|
||||
, pageDonate = "donate"
|
||||
, pageNotFound = "notFound"
|
||||
, pageJournal = "journal"
|
||||
}
|
||||
74
packages/website/frontend/src/Config/Data/ImageFolders.elm
Executable file
74
packages/website/frontend/src/Config/Data/ImageFolders.elm
Executable file
|
|
@ -0,0 +1,74 @@
|
|||
module Config.Data.ImageFolders exposing
|
||||
( ImageFolder(..)
|
||||
, getImageFolderString
|
||||
, imagePathMaker
|
||||
)
|
||||
|
||||
|
||||
imagePathMaker : ImageFolder -> String -> String
|
||||
imagePathMaker imageFolder name =
|
||||
case imageFolder of
|
||||
Cuck ->
|
||||
"/" ++ getImageFolderString imageFolder ++ "/" ++ name ++ "/" ++ name ++ ".png"
|
||||
|
||||
_ ->
|
||||
"/" ++ getImageFolderString imageFolder ++ "/" ++ name ++ ".png"
|
||||
|
||||
|
||||
getImageFolderString : ImageFolder -> String
|
||||
getImageFolderString imageFolder =
|
||||
case imageFolder of
|
||||
Interviews ->
|
||||
"interviews"
|
||||
|
||||
Gibberish ->
|
||||
"gibberish"
|
||||
|
||||
Cuck ->
|
||||
"cucks"
|
||||
|
||||
BlogArticle ->
|
||||
"blog"
|
||||
|
||||
BlogCard ->
|
||||
"blog/thumbs"
|
||||
|
||||
Argument ->
|
||||
"arguments"
|
||||
|
||||
Service ->
|
||||
"services"
|
||||
|
||||
Debate ->
|
||||
"debate"
|
||||
|
||||
Donate ->
|
||||
"donate"
|
||||
|
||||
NutriDex ->
|
||||
"nutridex"
|
||||
|
||||
ServicePage ->
|
||||
"services"
|
||||
|
||||
Contact ->
|
||||
"contact"
|
||||
|
||||
Journal ->
|
||||
"journal"
|
||||
|
||||
|
||||
type ImageFolder
|
||||
= Interviews
|
||||
| Contact
|
||||
| Gibberish
|
||||
| Cuck
|
||||
| BlogArticle
|
||||
| BlogCard
|
||||
| Argument
|
||||
| Service
|
||||
| Debate
|
||||
| Donate
|
||||
| NutriDex
|
||||
| ServicePage
|
||||
| Journal
|
||||
118
packages/website/frontend/src/Config/Data/Language.elm
Executable file
118
packages/website/frontend/src/Config/Data/Language.elm
Executable file
|
|
@ -0,0 +1,118 @@
|
|||
module Config.Data.Language exposing
|
||||
( Language(..)
|
||||
, MultilingualTextElement
|
||||
)
|
||||
|
||||
{-| Types for facilitating multilingual functionality.
|
||||
-}
|
||||
|
||||
import Element exposing (Element)
|
||||
|
||||
|
||||
{-| A list of all currently supported languages. DeepL <https://www.deepl.com/translator> seems to
|
||||
have the best translations, so we're just using those. Arabic will need some custom work though
|
||||
since it runs right to left. It will be nice to expand this list over time as DeepL adds support
|
||||
for more languages. Eventually it could be nice to host some local AI to do translation so we can
|
||||
reduce lines of code by writing all text only once in English then automatically generating
|
||||
translations.
|
||||
-}
|
||||
type Language
|
||||
= -- Arabic
|
||||
Bulgarian
|
||||
| Chinese
|
||||
| Czech
|
||||
| Danish
|
||||
| Dutch
|
||||
| English
|
||||
| Estonian
|
||||
| Finnish
|
||||
| French
|
||||
| German
|
||||
| Greek
|
||||
| Hungarian
|
||||
| Indonesian
|
||||
| Italian
|
||||
| Japanese
|
||||
| Korean
|
||||
| Latvian
|
||||
| Lithuanian
|
||||
| Norwegian
|
||||
| Polish
|
||||
| Portuguese
|
||||
| Romanian
|
||||
| Russian
|
||||
| Slovak
|
||||
| Slovenian
|
||||
| Spanish
|
||||
| Swedish
|
||||
| Turkish
|
||||
| Ukranian
|
||||
|
||||
|
||||
|
||||
-- type alias MultilingualText =
|
||||
-- { bulgarian : String
|
||||
-- , chinese : String
|
||||
-- , czech : String
|
||||
-- , danish : String
|
||||
-- , dutch : String
|
||||
-- , english : String
|
||||
-- , estonian : String
|
||||
-- , finnish : String
|
||||
-- , french : String
|
||||
-- , german : String
|
||||
-- , greek : String
|
||||
-- , hungarian : String
|
||||
-- , indonesian : String
|
||||
-- , italian : String
|
||||
-- , japanese : String
|
||||
-- , korean : String
|
||||
-- , latvian : String
|
||||
-- , lithuanian : String
|
||||
-- , norwegian : String
|
||||
-- , polish : String
|
||||
-- , portuguese : String
|
||||
-- , romanian : String
|
||||
-- , russian : String
|
||||
-- , slovak : String
|
||||
-- , slovenian : String
|
||||
-- , spanish : String
|
||||
-- , swedish : String
|
||||
-- , turkish : String
|
||||
-- , ukranian : String
|
||||
-- }
|
||||
|
||||
|
||||
{-| We need a type that returns a different element based on which language is selected.
|
||||
-}
|
||||
type alias MultilingualTextElement msg =
|
||||
{ bulgarian : Element msg
|
||||
, chinese : Element msg
|
||||
, czech : Element msg
|
||||
, danish : Element msg
|
||||
, dutch : Element msg
|
||||
, english : Element msg
|
||||
, estonian : Element msg
|
||||
, finnish : Element msg
|
||||
, french : Element msg
|
||||
, german : Element msg
|
||||
, greek : Element msg
|
||||
, hungarian : Element msg
|
||||
, indonesian : Element msg
|
||||
, italian : Element msg
|
||||
, japanese : Element msg
|
||||
, korean : Element msg
|
||||
, latvian : Element msg
|
||||
, lithuanian : Element msg
|
||||
, norwegian : Element msg
|
||||
, polish : Element msg
|
||||
, portuguese : Element msg
|
||||
, romanian : Element msg
|
||||
, russian : Element msg
|
||||
, slovak : Element msg
|
||||
, slovenian : Element msg
|
||||
, spanish : Element msg
|
||||
, swedish : Element msg
|
||||
, turkish : Element msg
|
||||
, ukranian : Element msg
|
||||
}
|
||||
116
packages/website/frontend/src/Config/Helpers/Articles/Article.elm
Executable file
116
packages/website/frontend/src/Config/Helpers/Articles/Article.elm
Executable file
|
|
@ -0,0 +1,116 @@
|
|||
module Config.Helpers.Articles.Article exposing (..)
|
||||
|
||||
import Config.Data.Identity exposing (pageNames)
|
||||
import Config.Helpers.Articles.Markdown as Markdown
|
||||
exposing
|
||||
( articleImage
|
||||
, renderDeviceMarkdown
|
||||
, renderDeviceMarkdownNoToc
|
||||
)
|
||||
import Config.Helpers.Articles.Types exposing (References)
|
||||
import Config.Helpers.Cards.Inner.Text exposing (detailFormat)
|
||||
import Config.Helpers.Viewport exposing (resetViewport)
|
||||
import Config.Pages.Blogs.Types exposing (BlogArticle)
|
||||
import Config.Style.Colour.Helpers
|
||||
exposing
|
||||
( ThemeColor(..)
|
||||
, getThemeColor
|
||||
)
|
||||
import Config.Style.Transitions
|
||||
exposing
|
||||
( hoverFontDarkOrange
|
||||
, transitionStyleFast
|
||||
)
|
||||
import Element as E exposing (..)
|
||||
import Element.Background as B exposing (color)
|
||||
import Element.Border as D exposing (width)
|
||||
import Element.Font as F
|
||||
exposing
|
||||
( alignLeft
|
||||
, bold
|
||||
, color
|
||||
, regular
|
||||
)
|
||||
import Ports
|
||||
|
||||
|
||||
contentList : BlogArticle -> List (Element msg) -> (Markdown.Msg -> msg) -> List (Element msg)
|
||||
contentList article extraElements toMsg =
|
||||
[ case article.articleImage of
|
||||
"" ->
|
||||
none
|
||||
|
||||
_ ->
|
||||
articleImage article.articleImage
|
||||
, case article.hasTableOfContents of
|
||||
True ->
|
||||
E.map toMsg (renderDeviceMarkdown article.articleBody)
|
||||
|
||||
False ->
|
||||
E.map toMsg (renderDeviceMarkdownNoToc article.articleBody)
|
||||
, case article.hasReferences of
|
||||
True ->
|
||||
articleReferences article
|
||||
|
||||
False ->
|
||||
none
|
||||
, detailFormat column extraElements
|
||||
]
|
||||
|
||||
|
||||
articleReferences : BlogArticle -> Element msg
|
||||
articleReferences article =
|
||||
column [ E.width fill, F.size 15, spacing 10 ] <|
|
||||
List.map2 (\x y -> makeReference x y)
|
||||
article.articleReferences
|
||||
(List.range 1 (List.length article.articleReferences))
|
||||
|
||||
|
||||
makeReference : References -> Int -> Element msg
|
||||
makeReference references index =
|
||||
let
|
||||
comma =
|
||||
", "
|
||||
in
|
||||
el
|
||||
[ F.regular
|
||||
, F.alignLeft
|
||||
]
|
||||
<|
|
||||
paragraph []
|
||||
[ newTabLink
|
||||
[ F.bold
|
||||
, F.color (getThemeColor TextLightOrange)
|
||||
, hoverFontDarkOrange
|
||||
, transitionStyleFast
|
||||
]
|
||||
{ url = references.link, label = text (String.fromInt index ++ ". ") }
|
||||
, text (references.author ++ comma)
|
||||
, text (references.title ++ comma)
|
||||
, text (references.journal ++ comma)
|
||||
, text references.year
|
||||
]
|
||||
|
||||
|
||||
extractFirstWords : String -> String
|
||||
extractFirstWords text =
|
||||
let
|
||||
words =
|
||||
text
|
||||
|> String.split " "
|
||||
|> List.filter (not << String.isEmpty)
|
||||
|
||||
truncatedWords =
|
||||
List.take 80 words
|
||||
|
||||
wasTextTruncated =
|
||||
List.length words > 80
|
||||
|
||||
result =
|
||||
String.join " " truncatedWords
|
||||
in
|
||||
if wasTextTruncated then
|
||||
result ++ "..."
|
||||
|
||||
else
|
||||
result
|
||||
976
packages/website/frontend/src/Config/Helpers/Articles/Markdown.elm
Executable file
976
packages/website/frontend/src/Config/Helpers/Articles/Markdown.elm
Executable file
|
|
@ -0,0 +1,976 @@
|
|||
module Config.Helpers.Articles.Markdown exposing (..)
|
||||
|
||||
-- import Config.Style.Colour.Helpers exposing (colourTheme)
|
||||
|
||||
import Config.Helpers.Cards.Inner.Text exposing (divider)
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Style.Colour.Helpers exposing (ThemeColor(..), getThemeColor)
|
||||
import Config.Style.Fonts
|
||||
exposing
|
||||
( defaultFontSize
|
||||
, headerFontSizeBig
|
||||
, headerFontSizeMedium
|
||||
)
|
||||
import Config.Style.Transitions
|
||||
exposing
|
||||
( hoverFontDarkOrange
|
||||
, transitionStyleFast
|
||||
)
|
||||
import Element as E exposing (..)
|
||||
import Element.Background as B exposing (color)
|
||||
import Element.Border as D
|
||||
exposing
|
||||
( color
|
||||
, rounded
|
||||
, widthEach
|
||||
)
|
||||
import Element.Font as F exposing (color)
|
||||
import Element.Input as Input
|
||||
import Element.Region as Region
|
||||
import Html exposing (Attribute, Html)
|
||||
import Html.Attributes
|
||||
import Html.Events
|
||||
import Markdown.Block as Block
|
||||
exposing
|
||||
( Block
|
||||
, Inline
|
||||
, ListItem(..)
|
||||
, Task(..)
|
||||
)
|
||||
import Markdown.Html
|
||||
import Markdown.Parser
|
||||
import Markdown.Renderer
|
||||
import Ports
|
||||
|
||||
|
||||
articleImage : String -> Element msg
|
||||
articleImage pic =
|
||||
el
|
||||
[ centerX
|
||||
, width fill
|
||||
]
|
||||
<|
|
||||
column
|
||||
[ E.paddingEach
|
||||
{ top = 20
|
||||
, bottom = 20
|
||||
, left = 20
|
||||
, right = 20
|
||||
}
|
||||
]
|
||||
[ image
|
||||
[ width fill
|
||||
]
|
||||
{ src = "/blog/" ++ pic ++ ".png", description = "" }
|
||||
]
|
||||
|
||||
|
||||
type Msg
|
||||
= ScrollToElement String
|
||||
|
||||
|
||||
renderDeviceMarkdown : String -> Element Msg
|
||||
renderDeviceMarkdown markdown =
|
||||
case renderMarkdown markdown of
|
||||
Ok ( toc, renderedMarkdown ) ->
|
||||
paragraph []
|
||||
[ column
|
||||
[ width fill
|
||||
, centerX
|
||||
, spacing 10
|
||||
]
|
||||
(tocView toc :: renderedMarkdown)
|
||||
]
|
||||
|
||||
Err error ->
|
||||
E.text error
|
||||
|
||||
|
||||
renderDeviceMarkdownGeneric : String -> Element msg
|
||||
renderDeviceMarkdownGeneric markdown =
|
||||
case renderMarkdownGeneric markdown of
|
||||
Ok ( toc, renderedMarkdown ) ->
|
||||
paragraph []
|
||||
[ column
|
||||
[ width fill
|
||||
, centerX
|
||||
, spacing 10
|
||||
]
|
||||
(tocViewGeneric toc :: renderedMarkdown)
|
||||
]
|
||||
|
||||
Err error ->
|
||||
E.text error
|
||||
|
||||
|
||||
renderMarkdown : String -> Result String ( TableOfContents, List (Element Msg) )
|
||||
renderMarkdown markdown =
|
||||
case
|
||||
markdown
|
||||
|> Markdown.Parser.parse
|
||||
of
|
||||
Ok okAst ->
|
||||
case
|
||||
Markdown.Renderer.render elmUiRenderer okAst
|
||||
of
|
||||
Ok rendered ->
|
||||
Ok ( buildToc okAst, rendered )
|
||||
|
||||
Err errors ->
|
||||
Err errors
|
||||
|
||||
Err error ->
|
||||
Err (error |> List.map Markdown.Parser.deadEndToString |> String.join "\n")
|
||||
|
||||
|
||||
renderMarkdownGeneric : String -> Result String ( TableOfContents, List (Element msg) )
|
||||
renderMarkdownGeneric markdown =
|
||||
case
|
||||
markdown
|
||||
|> Markdown.Parser.parse
|
||||
of
|
||||
Ok okAst ->
|
||||
case
|
||||
Markdown.Renderer.render elmUiRendererGeneric okAst
|
||||
of
|
||||
Ok rendered ->
|
||||
Ok ( buildToc okAst, rendered )
|
||||
|
||||
Err errors ->
|
||||
Err errors
|
||||
|
||||
Err error ->
|
||||
Err (error |> List.map Markdown.Parser.deadEndToString |> String.join "\n")
|
||||
|
||||
|
||||
renderDeviceMarkdownNoToc : String -> Element Msg
|
||||
renderDeviceMarkdownNoToc markdown =
|
||||
case renderMarkdownNoToc markdown of
|
||||
Ok ( _, renderedMarkdown ) ->
|
||||
paragraph []
|
||||
[ column
|
||||
[ width fill
|
||||
, centerX
|
||||
, spacing 10
|
||||
]
|
||||
renderedMarkdown
|
||||
]
|
||||
|
||||
Err error ->
|
||||
E.text error
|
||||
|
||||
|
||||
renderDeviceMarkdownNoTocGeneric : String -> Element msg
|
||||
renderDeviceMarkdownNoTocGeneric markdown =
|
||||
case renderMarkdownNoTocGeneric markdown of
|
||||
Ok ( _, renderedMarkdown ) ->
|
||||
paragraph []
|
||||
[ column
|
||||
[ width fill
|
||||
, centerX
|
||||
, spacing 10
|
||||
]
|
||||
renderedMarkdown
|
||||
]
|
||||
|
||||
Err error ->
|
||||
E.text error
|
||||
|
||||
|
||||
renderMarkdownNoToc :
|
||||
String
|
||||
-> Result String ( TableOfContents, List (Element Msg) ) -- Keep original return type
|
||||
renderMarkdownNoToc markdown =
|
||||
case
|
||||
markdown
|
||||
|> Markdown.Parser.parse
|
||||
of
|
||||
Ok okAst ->
|
||||
case
|
||||
Markdown.Renderer.render elmUiRenderer okAst
|
||||
of
|
||||
Ok rendered ->
|
||||
Ok ( buildToc okAst, rendered )
|
||||
|
||||
-- Keep building TOC but don't use it
|
||||
Err errors ->
|
||||
Err errors
|
||||
|
||||
Err error ->
|
||||
Err (error |> List.map Markdown.Parser.deadEndToString |> String.join "\n")
|
||||
|
||||
|
||||
renderMarkdownNoTocGeneric :
|
||||
String
|
||||
-> Result String ( TableOfContents, List (Element msg) )
|
||||
renderMarkdownNoTocGeneric markdown =
|
||||
case
|
||||
markdown
|
||||
|> Markdown.Parser.parse
|
||||
of
|
||||
Ok okAst ->
|
||||
case
|
||||
Markdown.Renderer.render elmUiRendererGeneric okAst
|
||||
of
|
||||
Ok rendered ->
|
||||
Ok ( buildToc okAst, rendered )
|
||||
|
||||
Err errors ->
|
||||
Err errors
|
||||
|
||||
Err error ->
|
||||
Err (error |> List.map Markdown.Parser.deadEndToString |> String.join "\n")
|
||||
|
||||
|
||||
tocView : TableOfContents -> Element Msg
|
||||
tocView toc =
|
||||
column
|
||||
[ alignTop
|
||||
, width fill
|
||||
, spacing 10
|
||||
]
|
||||
[ paragraph
|
||||
[ F.bold
|
||||
, headerFontSizeBig
|
||||
, F.center
|
||||
, width fill
|
||||
, F.color (getThemeColor TextLightOrange)
|
||||
]
|
||||
[ text "TABLE OF CONTENTS" ]
|
||||
, column
|
||||
[ E.spacing 3
|
||||
, defaultFontSize
|
||||
, E.width fill
|
||||
]
|
||||
(toc
|
||||
|> List.indexedMap
|
||||
(\index headingBlock ->
|
||||
row
|
||||
[ E.width fill ]
|
||||
[ el
|
||||
[ E.alignTop
|
||||
, width <| px 30
|
||||
, F.bold
|
||||
, alignRight
|
||||
, alignBottom
|
||||
]
|
||||
(text (String.fromInt (index + 1) ++ "."))
|
||||
, el
|
||||
[ F.alignLeft
|
||||
, E.width fill
|
||||
, defaultFontSize
|
||||
, alignTop
|
||||
]
|
||||
<|
|
||||
Input.button
|
||||
[ F.color (getThemeColor TextLightOrange)
|
||||
, transitionStyleFast
|
||||
, hoverFontDarkOrange
|
||||
, width fill
|
||||
, paddingEach { top = 0, bottom = 0, left = 0, right = 0 }
|
||||
]
|
||||
{ onPress = Just (ScrollToElement headingBlock.anchorId)
|
||||
, label =
|
||||
el
|
||||
[ alignLeft ]
|
||||
<|
|
||||
text (toTitleCase headingBlock.name)
|
||||
}
|
||||
]
|
||||
)
|
||||
)
|
||||
, el
|
||||
[ width fill
|
||||
, height fill
|
||||
, spacing 20
|
||||
, paddingEach
|
||||
{ top = 0
|
||||
, bottom = 0
|
||||
, left = 100
|
||||
, right = 100
|
||||
}
|
||||
]
|
||||
<|
|
||||
divider
|
||||
, el
|
||||
[]
|
||||
<|
|
||||
text ""
|
||||
]
|
||||
|
||||
|
||||
tocViewGeneric : TableOfContents -> Element msg
|
||||
tocViewGeneric toc =
|
||||
column
|
||||
[ alignTop
|
||||
, width fill
|
||||
, spacing 10
|
||||
]
|
||||
[ paragraph
|
||||
[ F.bold
|
||||
, headerFontSizeBig
|
||||
, F.center
|
||||
, width fill
|
||||
, F.color (getThemeColor TextLightOrange)
|
||||
]
|
||||
[ text "TABLE OF CONTENTS" ]
|
||||
, column
|
||||
[ E.spacing 3
|
||||
, defaultFontSize
|
||||
, E.width fill
|
||||
]
|
||||
(toc
|
||||
|> List.indexedMap
|
||||
(\index headingBlock ->
|
||||
row
|
||||
[ E.width fill ]
|
||||
[ el
|
||||
[ E.alignTop
|
||||
, width <| px 30
|
||||
, F.bold
|
||||
, alignRight
|
||||
, alignBottom
|
||||
]
|
||||
(text (String.fromInt (index + 1) ++ "."))
|
||||
, el
|
||||
[ F.alignLeft
|
||||
, E.width fill
|
||||
, defaultFontSize
|
||||
, alignTop
|
||||
]
|
||||
<|
|
||||
link
|
||||
[]
|
||||
{ url = "#" ++ headingBlock.anchorId
|
||||
, label =
|
||||
el
|
||||
[ F.color (getThemeColor TextLightOrange)
|
||||
, transitionStyleFast
|
||||
, hoverFontDarkOrange
|
||||
]
|
||||
<|
|
||||
text (toTitleCase headingBlock.name)
|
||||
}
|
||||
]
|
||||
)
|
||||
)
|
||||
, el
|
||||
[ width fill
|
||||
, height fill
|
||||
, spacing 20
|
||||
, paddingEach
|
||||
{ top = 0
|
||||
, bottom = 0
|
||||
, left = 100
|
||||
, right = 100
|
||||
}
|
||||
]
|
||||
<|
|
||||
divider
|
||||
, el
|
||||
[]
|
||||
<|
|
||||
text ""
|
||||
]
|
||||
|
||||
|
||||
buildToc : List Block -> TableOfContents
|
||||
buildToc blocks =
|
||||
let
|
||||
headings =
|
||||
gatherHeadings blocks
|
||||
in
|
||||
headings
|
||||
|> List.map Tuple.second
|
||||
|> List.map
|
||||
(\styledList ->
|
||||
{ anchorId = styledList |> Block.extractInlineText |> rawTextToId
|
||||
, name = styledToString styledList
|
||||
, level = 1
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
styledToString : List Inline -> String
|
||||
styledToString list =
|
||||
list
|
||||
|> Block.extractInlineText
|
||||
|
||||
|
||||
gatherHeadings : List Block -> List ( Block.HeadingLevel, List Inline )
|
||||
gatherHeadings blocks =
|
||||
List.filterMap
|
||||
(\block ->
|
||||
case block of
|
||||
Block.Heading level content ->
|
||||
Just ( level, content )
|
||||
|
||||
_ ->
|
||||
Nothing
|
||||
)
|
||||
blocks
|
||||
|
||||
|
||||
elmUiRenderer : Markdown.Renderer.Renderer (Element Msg)
|
||||
elmUiRenderer =
|
||||
{ heading = heading
|
||||
, paragraph =
|
||||
E.paragraph
|
||||
[ E.spacing 3
|
||||
, defaultFontSize
|
||||
, F.alignLeft
|
||||
, width fill
|
||||
]
|
||||
, thematicBreak = E.none
|
||||
, text = E.text
|
||||
, strong =
|
||||
\content ->
|
||||
E.row
|
||||
[ F.bold
|
||||
]
|
||||
content
|
||||
, emphasis =
|
||||
\content ->
|
||||
E.row
|
||||
[ F.italic
|
||||
]
|
||||
content
|
||||
, strikethrough =
|
||||
\content ->
|
||||
E.row
|
||||
[ F.strike
|
||||
]
|
||||
content
|
||||
, codeSpan = code
|
||||
, link =
|
||||
\{ title, destination } body ->
|
||||
E.newTabLink
|
||||
[ width fill ]
|
||||
{ url = destination
|
||||
, label =
|
||||
E.paragraph
|
||||
[ F.color (getThemeColor TextLightOrange)
|
||||
, defaultFontSize
|
||||
, transitionStyleFast
|
||||
, hoverFontDarkOrange
|
||||
]
|
||||
body
|
||||
}
|
||||
, hardLineBreak = Html.br [] [] |> E.html
|
||||
, image =
|
||||
\image ->
|
||||
case image.title of
|
||||
Just title ->
|
||||
el
|
||||
[ width fill ]
|
||||
<|
|
||||
column
|
||||
[ E.centerX
|
||||
, E.centerY
|
||||
, width fill
|
||||
, E.paddingEach
|
||||
{ top = 0
|
||||
, bottom = 10
|
||||
, left = 10
|
||||
, right = 10
|
||||
}
|
||||
]
|
||||
[ E.image
|
||||
[ E.centerX
|
||||
, width (fill |> maximum 600)
|
||||
]
|
||||
{ src = image.src
|
||||
, description = image.alt
|
||||
}
|
||||
]
|
||||
|
||||
Nothing ->
|
||||
el
|
||||
[ width fill ]
|
||||
<|
|
||||
column
|
||||
[ E.centerX
|
||||
, E.centerY
|
||||
, width fill
|
||||
, E.paddingEach
|
||||
{ top = 3
|
||||
, bottom = 10
|
||||
, left = 10
|
||||
, right = 10
|
||||
}
|
||||
]
|
||||
[ E.image
|
||||
[ E.centerX
|
||||
, width (fill |> maximum 600)
|
||||
]
|
||||
{ src = image.src
|
||||
, description = image.alt
|
||||
}
|
||||
]
|
||||
, blockQuote =
|
||||
\children ->
|
||||
E.column
|
||||
[ D.widthEach
|
||||
{ top = 0
|
||||
, right = 0
|
||||
, bottom = 0
|
||||
, left = 5
|
||||
}
|
||||
, D.rounded 10
|
||||
, E.paddingEach
|
||||
{ top = 13
|
||||
, bottom = 10
|
||||
, left = 10
|
||||
, right = 10
|
||||
}
|
||||
, D.color (getThemeColor TextLightOrange)
|
||||
, B.color (getThemeColor BackgroundLightGrey)
|
||||
, defaultFontSize
|
||||
, width fill
|
||||
, spacing 10
|
||||
]
|
||||
children
|
||||
, unorderedList =
|
||||
\items ->
|
||||
E.column
|
||||
[ E.spacing 10
|
||||
, defaultFontSize
|
||||
]
|
||||
(items
|
||||
|> List.map
|
||||
(\(ListItem task children) ->
|
||||
E.row
|
||||
[ E.width fill
|
||||
]
|
||||
[ E.el
|
||||
[ E.width <| E.px 20
|
||||
, E.alignTop
|
||||
, alignRight
|
||||
]
|
||||
(case task of
|
||||
IncompleteTask ->
|
||||
Input.defaultCheckbox False
|
||||
|
||||
CompletedTask ->
|
||||
Input.defaultCheckbox True
|
||||
|
||||
NoTask ->
|
||||
E.text "•"
|
||||
)
|
||||
, E.column
|
||||
[ E.width fill, F.alignLeft ]
|
||||
children
|
||||
]
|
||||
)
|
||||
)
|
||||
, orderedList =
|
||||
\startingIndex items ->
|
||||
E.column
|
||||
[ E.spacing 10
|
||||
, E.width fill
|
||||
]
|
||||
(items
|
||||
|> List.indexedMap
|
||||
(\index itemBlocks ->
|
||||
E.row
|
||||
[ E.width fill
|
||||
]
|
||||
[ E.el
|
||||
[ E.alignTop
|
||||
, width <| px 25
|
||||
, F.bold
|
||||
, alignRight
|
||||
, defaultFontSize
|
||||
]
|
||||
(E.text (String.fromInt (index + startingIndex) ++ "."))
|
||||
, E.column
|
||||
[ alignLeft
|
||||
, defaultFontSize
|
||||
, E.width fill
|
||||
]
|
||||
itemBlocks
|
||||
]
|
||||
)
|
||||
)
|
||||
, codeBlock = codeBlock
|
||||
, html = Markdown.Html.oneOf []
|
||||
, table = E.column [ width fill ]
|
||||
, tableHeader = E.column [ width fill ]
|
||||
, tableBody = E.column [ width fill ]
|
||||
, tableRow = E.row [ width fill ]
|
||||
, tableHeaderCell =
|
||||
\maybeAlignment children ->
|
||||
E.paragraph [ width fill ] children
|
||||
, tableCell =
|
||||
\maybeAlignment children ->
|
||||
E.paragraph [ width fill ] children
|
||||
}
|
||||
|
||||
|
||||
code : String -> Element msg
|
||||
code snippet =
|
||||
E.el
|
||||
[ B.color (getThemeColor BackgroundLightGrey)
|
||||
, D.rounded 2
|
||||
, E.paddingXY 5 3
|
||||
, width fill
|
||||
, F.family
|
||||
[ F.external
|
||||
{ url = "https://fonts.googleapis.com/css?family=Source+Code+Pro"
|
||||
, name = "Source Code Pro"
|
||||
}
|
||||
]
|
||||
]
|
||||
(E.text snippet)
|
||||
|
||||
|
||||
codeBlock : { body : String, language : Maybe String } -> Element msg
|
||||
codeBlock details =
|
||||
E.el
|
||||
[ B.color (getThemeColor BackgroundLightGrey)
|
||||
, E.htmlAttribute (Html.Attributes.style "white-space" "pre")
|
||||
, width fill
|
||||
, E.paddingEach
|
||||
{ top = 23
|
||||
, bottom = 20
|
||||
, left = 20
|
||||
, right = 20
|
||||
}
|
||||
, defaultFontSize
|
||||
, F.family
|
||||
[ F.external
|
||||
{ url = "https://fonts.googleapis.com/css?family=Source+Code+Pro"
|
||||
, name = "Source Code Pro"
|
||||
}
|
||||
]
|
||||
]
|
||||
(E.text details.body)
|
||||
|
||||
|
||||
elmUiRendererGeneric : Markdown.Renderer.Renderer (Element msg)
|
||||
elmUiRendererGeneric =
|
||||
{ heading = headingGeneric
|
||||
, paragraph =
|
||||
E.paragraph
|
||||
[ E.spacing 3
|
||||
, defaultFontSize
|
||||
, F.alignLeft
|
||||
, width fill
|
||||
]
|
||||
, thematicBreak = E.none
|
||||
, text = E.text
|
||||
, strong =
|
||||
\content ->
|
||||
E.row
|
||||
[ F.bold
|
||||
]
|
||||
content
|
||||
, emphasis =
|
||||
\content ->
|
||||
E.row
|
||||
[ F.italic
|
||||
]
|
||||
content
|
||||
, strikethrough =
|
||||
\content ->
|
||||
E.row
|
||||
[ F.strike
|
||||
]
|
||||
content
|
||||
, codeSpan = codeGeneric
|
||||
, link =
|
||||
\{ title, destination } body ->
|
||||
E.newTabLink
|
||||
[ width fill ]
|
||||
{ url = destination
|
||||
, label =
|
||||
E.paragraph
|
||||
[ F.color (getThemeColor TextLightOrange)
|
||||
, defaultFontSize
|
||||
, transitionStyleFast
|
||||
, hoverFontDarkOrange
|
||||
]
|
||||
body
|
||||
}
|
||||
, hardLineBreak = Html.br [] [] |> E.html
|
||||
, image =
|
||||
\image ->
|
||||
case image.title of
|
||||
Just title ->
|
||||
el
|
||||
[ width fill ]
|
||||
<|
|
||||
column
|
||||
[ E.centerX
|
||||
, E.centerY
|
||||
, width fill
|
||||
, E.paddingEach
|
||||
{ top = 0
|
||||
, bottom = 10
|
||||
, left = 10
|
||||
, right = 10
|
||||
}
|
||||
]
|
||||
[ E.image
|
||||
[ E.centerX
|
||||
, width (fill |> maximum 600)
|
||||
]
|
||||
{ src = image.src
|
||||
, description = image.alt
|
||||
}
|
||||
]
|
||||
|
||||
Nothing ->
|
||||
el
|
||||
[ width fill ]
|
||||
<|
|
||||
column
|
||||
[ E.centerX
|
||||
, E.centerY
|
||||
, width fill
|
||||
, E.paddingEach
|
||||
{ top = 3
|
||||
, bottom = 10
|
||||
, left = 10
|
||||
, right = 10
|
||||
}
|
||||
]
|
||||
[ E.image
|
||||
[ E.centerX
|
||||
, width (fill |> maximum 600)
|
||||
]
|
||||
{ src = image.src
|
||||
, description = image.alt
|
||||
}
|
||||
]
|
||||
, blockQuote =
|
||||
\children ->
|
||||
E.column
|
||||
[ D.widthEach
|
||||
{ top = 0
|
||||
, right = 0
|
||||
, bottom = 0
|
||||
, left = 5
|
||||
}
|
||||
, D.rounded 10
|
||||
, E.paddingEach
|
||||
{ top = 13
|
||||
, bottom = 10
|
||||
, left = 10
|
||||
, right = 10
|
||||
}
|
||||
, D.color (getThemeColor TextLightOrange)
|
||||
, B.color (getThemeColor BackgroundLightGrey)
|
||||
, defaultFontSize
|
||||
, width fill
|
||||
, spacing 10
|
||||
]
|
||||
children
|
||||
, unorderedList =
|
||||
\items ->
|
||||
E.column
|
||||
[ E.spacing 10
|
||||
, defaultFontSize
|
||||
]
|
||||
(items
|
||||
|> List.map
|
||||
(\(ListItem task children) ->
|
||||
E.row
|
||||
[ E.width fill
|
||||
]
|
||||
[ E.el
|
||||
[ E.width <| E.px 20
|
||||
, E.alignTop
|
||||
, alignRight
|
||||
]
|
||||
(case task of
|
||||
IncompleteTask ->
|
||||
Input.defaultCheckbox False
|
||||
|
||||
CompletedTask ->
|
||||
Input.defaultCheckbox True
|
||||
|
||||
NoTask ->
|
||||
E.text "•"
|
||||
)
|
||||
, E.column
|
||||
[ E.width fill, F.alignLeft ]
|
||||
children
|
||||
]
|
||||
)
|
||||
)
|
||||
, orderedList =
|
||||
\startingIndex items ->
|
||||
E.column
|
||||
[ E.spacing 10
|
||||
, E.width fill
|
||||
]
|
||||
(items
|
||||
|> List.indexedMap
|
||||
(\index itemBlocks ->
|
||||
E.row
|
||||
[ E.width fill
|
||||
]
|
||||
[ E.el
|
||||
[ E.alignTop
|
||||
, width <| px 25
|
||||
, F.bold
|
||||
, alignRight
|
||||
, defaultFontSize
|
||||
]
|
||||
(E.text (String.fromInt (index + startingIndex) ++ "."))
|
||||
, E.column
|
||||
[ alignLeft
|
||||
, defaultFontSize
|
||||
, E.width fill
|
||||
]
|
||||
itemBlocks
|
||||
]
|
||||
)
|
||||
)
|
||||
, codeBlock = codeBlockGeneric
|
||||
, html = Markdown.Html.oneOf []
|
||||
, table = E.column [ width fill ]
|
||||
, tableHeader = E.column [ width fill ]
|
||||
, tableBody = E.column [ width fill ]
|
||||
, tableRow = E.row [ width fill ]
|
||||
, tableHeaderCell =
|
||||
\maybeAlignment children ->
|
||||
E.paragraph [ width fill ] children
|
||||
, tableCell =
|
||||
\maybeAlignment children ->
|
||||
E.paragraph [ width fill ] children
|
||||
}
|
||||
|
||||
|
||||
codeGeneric : String -> Element msg
|
||||
codeGeneric snippet =
|
||||
E.el
|
||||
[ B.color (getThemeColor BackgroundLightGrey)
|
||||
, D.rounded 2
|
||||
, E.paddingXY 5 3
|
||||
, width fill
|
||||
, F.family
|
||||
[ F.external
|
||||
{ url = "https://fonts.googleapis.com/css?family=Source+Code+Pro"
|
||||
, name = "Source Code Pro"
|
||||
}
|
||||
]
|
||||
]
|
||||
(E.text snippet)
|
||||
|
||||
|
||||
codeBlockGeneric : { body : String, language : Maybe String } -> Element msg
|
||||
codeBlockGeneric details =
|
||||
E.el
|
||||
[ B.color (getThemeColor BackgroundLightGrey)
|
||||
, E.htmlAttribute (Html.Attributes.style "white-space" "pre")
|
||||
, width fill
|
||||
, E.paddingEach
|
||||
{ top = 23
|
||||
, bottom = 20
|
||||
, left = 20
|
||||
, right = 20
|
||||
}
|
||||
, defaultFontSize
|
||||
, F.family
|
||||
[ F.external
|
||||
{ url = "https://fonts.googleapis.com/css?family=Source+Code+Pro"
|
||||
, name = "Source Code Pro"
|
||||
}
|
||||
]
|
||||
]
|
||||
(E.text details.body)
|
||||
|
||||
|
||||
headingGeneric : { level : Block.HeadingLevel, rawText : String, children : List (Element msg) } -> Element msg
|
||||
headingGeneric { level, rawText, children } =
|
||||
column [ width fill, spacing 20 ]
|
||||
[ case level of
|
||||
Block.H1 ->
|
||||
divider
|
||||
|
||||
_ ->
|
||||
none
|
||||
, E.paragraph
|
||||
[ case level of
|
||||
Block.H1 ->
|
||||
headerFontSizeBig
|
||||
|
||||
Block.H2 ->
|
||||
headerFontSizeMedium
|
||||
|
||||
_ ->
|
||||
defaultFontSize
|
||||
, F.bold
|
||||
, case level of
|
||||
Block.H1 ->
|
||||
F.center
|
||||
|
||||
_ ->
|
||||
F.alignLeft
|
||||
, width fill
|
||||
, F.color (getThemeColor TextLightOrange)
|
||||
, Region.heading (Block.headingLevelToInt level)
|
||||
, E.htmlAttribute
|
||||
(Html.Attributes.attribute "name" (rawTextToId rawText))
|
||||
, E.htmlAttribute
|
||||
(Html.Attributes.id (rawTextToId rawText))
|
||||
]
|
||||
children
|
||||
]
|
||||
|
||||
|
||||
heading : { level : Block.HeadingLevel, rawText : String, children : List (Element Msg) } -> Element Msg
|
||||
heading { level, rawText, children } =
|
||||
column [ width fill, spacing 20 ]
|
||||
[ case level of
|
||||
Block.H1 ->
|
||||
divider
|
||||
|
||||
_ ->
|
||||
none
|
||||
, E.paragraph
|
||||
[ case level of
|
||||
Block.H1 ->
|
||||
headerFontSizeBig
|
||||
|
||||
Block.H2 ->
|
||||
headerFontSizeMedium
|
||||
|
||||
_ ->
|
||||
defaultFontSize
|
||||
, F.bold
|
||||
, case level of
|
||||
Block.H1 ->
|
||||
F.center
|
||||
|
||||
_ ->
|
||||
F.alignLeft
|
||||
, width fill
|
||||
, F.color (getThemeColor TextLightOrange)
|
||||
, Region.heading (Block.headingLevelToInt level)
|
||||
, E.htmlAttribute
|
||||
(Html.Attributes.attribute "name" (rawTextToId rawText))
|
||||
, E.htmlAttribute
|
||||
(Html.Attributes.id (rawTextToId rawText))
|
||||
]
|
||||
children
|
||||
]
|
||||
|
||||
|
||||
rawTextToId rawText =
|
||||
rawText
|
||||
|> String.split " "
|
||||
-- |> Debug.log "split"
|
||||
|> String.join "-"
|
||||
-- |> Debug.log "joined"
|
||||
|> String.toLower
|
||||
|
||||
|
||||
|
||||
-- Types
|
||||
|
||||
|
||||
type alias TableOfContents =
|
||||
List { anchorId : String, name : String, level : Int }
|
||||
10
packages/website/frontend/src/Config/Helpers/Articles/Types.elm
Executable file
10
packages/website/frontend/src/Config/Helpers/Articles/Types.elm
Executable file
|
|
@ -0,0 +1,10 @@
|
|||
module Config.Helpers.Articles.Types exposing (References)
|
||||
|
||||
|
||||
type alias References =
|
||||
{ author : String
|
||||
, title : String
|
||||
, link : String
|
||||
, year : String
|
||||
, journal : String
|
||||
}
|
||||
67
packages/website/frontend/src/Config/Helpers/Cards/Inner/BuyButton.elm
Executable file
67
packages/website/frontend/src/Config/Helpers/Cards/Inner/BuyButton.elm
Executable file
|
|
@ -0,0 +1,67 @@
|
|||
module Config.Helpers.Cards.Inner.BuyButton exposing (buyButton)
|
||||
|
||||
import Config.Style.Colour.Helpers exposing (colourTheme)
|
||||
import Config.Style.Fonts exposing (headerFontSizeBig)
|
||||
import Config.Style.Glow exposing (glowDeepDarkGrey)
|
||||
import Config.Style.Transitions exposing (hoverPageButtonDeepDarkOrange, transitionStyleMedium)
|
||||
import Element as E
|
||||
exposing
|
||||
( Element
|
||||
, centerX
|
||||
, el
|
||||
, newTabLink
|
||||
, paddingEach
|
||||
, pointer
|
||||
, row
|
||||
, text
|
||||
)
|
||||
import Element.Background as B exposing (color)
|
||||
import Element.Border as D exposing (rounded)
|
||||
import Element.Font as F
|
||||
exposing
|
||||
( bold
|
||||
, center
|
||||
)
|
||||
|
||||
|
||||
buyButton : String -> String -> Element msg
|
||||
buyButton price url =
|
||||
el
|
||||
[ D.width 5
|
||||
, D.rounded 30
|
||||
, centerX
|
||||
, glowDeepDarkGrey
|
||||
, D.color colourTheme.backgroundLightGrey
|
||||
, B.color colourTheme.backgroundLightGrey
|
||||
, pointer
|
||||
]
|
||||
<|
|
||||
el
|
||||
[ B.color colourTheme.textDarkOrange
|
||||
, D.rounded 30
|
||||
, headerFontSizeBig
|
||||
, F.bold
|
||||
, transitionStyleMedium
|
||||
, hoverPageButtonDeepDarkOrange
|
||||
, paddingEach
|
||||
{ top = 10
|
||||
, right = 25
|
||||
, bottom = 10
|
||||
, left = 25
|
||||
}
|
||||
]
|
||||
<|
|
||||
newTabLink []
|
||||
{ url = url
|
||||
, label =
|
||||
row
|
||||
[ F.center
|
||||
, paddingEach
|
||||
{ top = 3
|
||||
, right = 0
|
||||
, bottom = 0
|
||||
, left = 0
|
||||
}
|
||||
]
|
||||
[ text price ]
|
||||
}
|
||||
30
packages/website/frontend/src/Config/Helpers/Cards/Inner/CopyButton.elm
Executable file
30
packages/website/frontend/src/Config/Helpers/Cards/Inner/CopyButton.elm
Executable file
|
|
@ -0,0 +1,30 @@
|
|||
module Config.Helpers.Cards.Inner.CopyButton exposing (..)
|
||||
|
||||
import Config.Helpers.Cards.Inner.Text
|
||||
exposing
|
||||
( getHoverColours
|
||||
)
|
||||
import Config.Helpers.Cards.Inner.ToolTip exposing (tooltip)
|
||||
import Config.Style.Colour.Helpers
|
||||
exposing
|
||||
( ThemeColor(..)
|
||||
, colourTheme
|
||||
, getThemeColor
|
||||
)
|
||||
import Config.Style.Icons.Icons exposing (copyLink)
|
||||
import Config.Style.Icons.Types as TySvg exposing (..)
|
||||
import Config.Style.Transitions exposing (transitionStyleSlow)
|
||||
import Element as E exposing (..)
|
||||
import Element.Background as B
|
||||
import Element.Border as D
|
||||
import Element.Font as F
|
||||
import Element.Input as Input
|
||||
import Ports
|
||||
import Shared
|
||||
import Shared.Msg exposing (Msg(..))
|
||||
import Svg.Attributes as SvgAttr
|
||||
import Task
|
||||
|
||||
|
||||
sdafasd =
|
||||
[]
|
||||
77
packages/website/frontend/src/Config/Helpers/Cards/Inner/StrengthBar.elm
Executable file
77
packages/website/frontend/src/Config/Helpers/Cards/Inner/StrengthBar.elm
Executable file
|
|
@ -0,0 +1,77 @@
|
|||
module Config.Helpers.Cards.Inner.StrengthBar exposing
|
||||
( barMaker
|
||||
, barPadding
|
||||
)
|
||||
|
||||
import Config.Helpers.Cards.Inner.ToolTip
|
||||
exposing
|
||||
( ToolTipPosition(..)
|
||||
, tooltip
|
||||
)
|
||||
import Config.Style.Colour.Helpers exposing (colourTheme)
|
||||
import Element as E
|
||||
exposing
|
||||
( Device
|
||||
, DeviceClass(..)
|
||||
, Element
|
||||
, Orientation(..)
|
||||
, alignLeft
|
||||
, column
|
||||
, el
|
||||
, fill
|
||||
, height
|
||||
, none
|
||||
, px
|
||||
, width
|
||||
)
|
||||
import Element.Background as B exposing (gradient)
|
||||
import Element.Border as D
|
||||
exposing
|
||||
( color
|
||||
, rounded
|
||||
, width
|
||||
)
|
||||
import Shared exposing (Model)
|
||||
|
||||
|
||||
barMaker : Shared.Model -> (Int -> String) -> Int -> Element msg
|
||||
barMaker shared getTooltip num =
|
||||
let
|
||||
strengthBarAttr =
|
||||
[ height <| px 12
|
||||
, E.width fill
|
||||
, D.rounded 10
|
||||
, D.color colourTheme.textDarkGrey
|
||||
, D.width 2
|
||||
, B.gradient
|
||||
{ angle = 1.57
|
||||
, steps =
|
||||
List.concat
|
||||
[ List.repeat num colourTheme.barGreen
|
||||
, List.repeat (10 - num) colourTheme.barRed
|
||||
]
|
||||
}
|
||||
]
|
||||
in
|
||||
el
|
||||
(strengthBarAttr
|
||||
++ (case ( shared.device.class, shared.device.orientation ) of
|
||||
( Phone, Portrait ) ->
|
||||
[]
|
||||
|
||||
( Tablet, Portrait ) ->
|
||||
[]
|
||||
|
||||
_ ->
|
||||
[ tooltip IsLeft (getTooltip num) ]
|
||||
)
|
||||
)
|
||||
none
|
||||
|
||||
|
||||
barPadding : List (Element msg) -> Element msg
|
||||
barPadding =
|
||||
column
|
||||
[ E.width fill
|
||||
, alignLeft
|
||||
]
|
||||
351
packages/website/frontend/src/Config/Helpers/Cards/Inner/Text.elm
Executable file
351
packages/website/frontend/src/Config/Helpers/Cards/Inner/Text.elm
Executable file
|
|
@ -0,0 +1,351 @@
|
|||
module Config.Helpers.Cards.Inner.Text exposing
|
||||
( bodyFormat
|
||||
, detailBodyLink
|
||||
, detailBodyMaker
|
||||
, detailFormat
|
||||
, detailFormatEl
|
||||
, detailHeader
|
||||
, detailSpacing
|
||||
, detailTitleLink
|
||||
, detailTitleLinkWide
|
||||
, detailTitleMaker
|
||||
, divider
|
||||
, generalButton
|
||||
, getHoverColours
|
||||
, listCounter
|
||||
, listItem
|
||||
, listMaker
|
||||
, listMaker2
|
||||
, numberedListItem
|
||||
, renderCodeLine
|
||||
, socialMaker
|
||||
, titleFormat
|
||||
)
|
||||
|
||||
import Config.Data.Identity exposing (pageNames)
|
||||
import Config.Helpers.Converters exposing (formatSocial)
|
||||
import Config.Style.Colour.Helpers
|
||||
exposing
|
||||
( ThemeColor(..)
|
||||
, getThemeColor
|
||||
)
|
||||
import Config.Style.Colour.Types exposing (SyntaxColors)
|
||||
import Config.Style.Fonts
|
||||
exposing
|
||||
( defaultFontSize
|
||||
, headerFontSizeBig
|
||||
, paragraphSpacing
|
||||
)
|
||||
import Config.Style.Icons.Types as TySvg exposing (..)
|
||||
import Config.Style.Transitions
|
||||
exposing
|
||||
( hoverFontDarkOrange
|
||||
, transitionStyleMedium
|
||||
, transitionStyleSlow
|
||||
)
|
||||
import Element as E
|
||||
exposing
|
||||
( Attribute
|
||||
, Element
|
||||
, alignLeft
|
||||
, alignTop
|
||||
, centerX
|
||||
, column
|
||||
, el
|
||||
, fill
|
||||
, height
|
||||
, maximum
|
||||
, mouseOver
|
||||
, newTabLink
|
||||
, none
|
||||
, paddingEach
|
||||
, paddingXY
|
||||
, paragraph
|
||||
, pointer
|
||||
, row
|
||||
, spacing
|
||||
, text
|
||||
, width
|
||||
)
|
||||
import Element.Border as D
|
||||
exposing
|
||||
( color
|
||||
, rounded
|
||||
, widthEach
|
||||
)
|
||||
import Element.Font as F
|
||||
exposing
|
||||
( alignLeft
|
||||
, bold
|
||||
, color
|
||||
, family
|
||||
)
|
||||
import Shared
|
||||
import Svg.Attributes as SvgAttr
|
||||
|
||||
|
||||
detailSpacing : Attribute msg
|
||||
detailSpacing =
|
||||
spacing 5
|
||||
|
||||
|
||||
detailFormat : (List (Attribute msg) -> List (Element msg) -> Element msg) -> List (Element msg) -> Element msg
|
||||
detailFormat block elements =
|
||||
block
|
||||
[ detailSpacing
|
||||
, width fill
|
||||
]
|
||||
elements
|
||||
|
||||
|
||||
detailFormatEl : Element msg -> Element msg
|
||||
detailFormatEl element =
|
||||
el
|
||||
[ detailSpacing
|
||||
, width fill
|
||||
]
|
||||
element
|
||||
|
||||
|
||||
titleFormat : ThemeColor -> List (Attribute msg)
|
||||
titleFormat colour =
|
||||
[ alignTop
|
||||
, F.bold
|
||||
, F.color (getThemeColor colour)
|
||||
, defaultFontSize
|
||||
, paragraphSpacing
|
||||
]
|
||||
|
||||
|
||||
bodyFormat : ThemeColor -> List (Attribute msg)
|
||||
bodyFormat colour =
|
||||
[ F.regular
|
||||
, defaultFontSize
|
||||
, F.color (getThemeColor colour)
|
||||
, width fill
|
||||
, F.alignLeft
|
||||
]
|
||||
|
||||
|
||||
detailTitleMaker : ThemeColor -> String -> Element msg
|
||||
detailTitleMaker colour item =
|
||||
el
|
||||
(titleFormat colour)
|
||||
<|
|
||||
text item
|
||||
|
||||
|
||||
detailTitleLink : ThemeColor -> String -> Element msg
|
||||
detailTitleLink colour item =
|
||||
el
|
||||
(getHoverColours colour
|
||||
++ (titleFormat colour
|
||||
++ [ pointer
|
||||
]
|
||||
)
|
||||
)
|
||||
<|
|
||||
text item
|
||||
|
||||
|
||||
detailTitleLinkWide : ThemeColor -> String -> Element msg
|
||||
detailTitleLinkWide colour item =
|
||||
paragraph
|
||||
(getHoverColours colour
|
||||
++ (titleFormat colour
|
||||
++ [ width fill
|
||||
, pointer
|
||||
]
|
||||
)
|
||||
)
|
||||
[ text item ]
|
||||
|
||||
|
||||
detailBodyLink : ThemeColor -> String -> Element msg
|
||||
detailBodyLink colour item =
|
||||
el
|
||||
(getHoverColours colour
|
||||
++ (bodyFormat colour
|
||||
++ [ width fill
|
||||
, pointer
|
||||
]
|
||||
)
|
||||
)
|
||||
<|
|
||||
text item
|
||||
|
||||
|
||||
getHoverColours : ThemeColor -> List (Attribute msg)
|
||||
getHoverColours colour =
|
||||
[ transitionStyleMedium
|
||||
, mouseOver
|
||||
[ case colour of
|
||||
TextLightGrey ->
|
||||
F.color (getThemeColor TextLightOrange)
|
||||
|
||||
TextLightOrange ->
|
||||
F.color (getThemeColor TextDarkOrange)
|
||||
|
||||
TextDarkOrange ->
|
||||
F.color (getThemeColor TextDeepDarkOrange)
|
||||
|
||||
_ ->
|
||||
F.color (getThemeColor TextDeepDarkOrange)
|
||||
]
|
||||
]
|
||||
|
||||
|
||||
detailBodyMaker : ThemeColor -> Element msg -> Element msg
|
||||
detailBodyMaker colour item =
|
||||
paragraph
|
||||
(bodyFormat colour)
|
||||
[ item ]
|
||||
|
||||
|
||||
listMaker : (a -> Element msg) -> List a -> Element msg
|
||||
listMaker makeItem itemInfo =
|
||||
detailFormat column <|
|
||||
List.map2 (\x y -> makeItem x)
|
||||
itemInfo
|
||||
(List.range 1 (List.length itemInfo))
|
||||
|
||||
|
||||
listMaker2 : (a -> Int -> Element msg) -> List a -> Element msg
|
||||
listMaker2 makeItem itemInfo =
|
||||
detailFormat column <|
|
||||
List.map2
|
||||
(\x y -> makeItem x y)
|
||||
itemInfo
|
||||
(List.range 1 (List.length itemInfo))
|
||||
|
||||
|
||||
listItem : ThemeColor -> String -> Element msg
|
||||
listItem colour item =
|
||||
el
|
||||
[ defaultFontSize
|
||||
, F.bold
|
||||
, E.alignLeft
|
||||
, width fill
|
||||
, F.color (getThemeColor colour)
|
||||
]
|
||||
<|
|
||||
paragraph [ F.regular ]
|
||||
[ E.text ("• " ++ item) ]
|
||||
|
||||
|
||||
numberedListItem : ThemeColor -> Int -> Element msg
|
||||
numberedListItem colour index =
|
||||
el
|
||||
[ alignTop
|
||||
, F.bold
|
||||
, F.color (getThemeColor colour)
|
||||
, defaultFontSize
|
||||
]
|
||||
<|
|
||||
text (String.fromInt index ++ ". ")
|
||||
|
||||
|
||||
generalButton : Shared.Model -> String -> (OuterPart msg -> Element msg) -> Element msg
|
||||
generalButton shared url icon =
|
||||
newTabLink
|
||||
([ alignTop
|
||||
, paddingXY 0 5
|
||||
, F.color (getThemeColor TextLightOrange)
|
||||
]
|
||||
++ getHoverColours TextLightOrange
|
||||
)
|
||||
{ url = url
|
||||
, label =
|
||||
el
|
||||
[ transitionStyleSlow
|
||||
, paddingXY 7 7
|
||||
, D.rounded 10
|
||||
]
|
||||
<|
|
||||
icon
|
||||
{ elementAttributes =
|
||||
[]
|
||||
, sharedModel = shared
|
||||
, svgAttributes = [ SvgAttr.width "20" ]
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
socialMaker : String -> String -> Element msg
|
||||
socialMaker link item =
|
||||
newTabLink
|
||||
[]
|
||||
{ url = link
|
||||
, label =
|
||||
detailTitleLink
|
||||
TextLightOrange
|
||||
(formatSocial item)
|
||||
}
|
||||
|
||||
|
||||
listCounter : Int -> Element msg
|
||||
listCounter index =
|
||||
detailTitleMaker TextLightGrey
|
||||
(String.fromInt index ++ ". ")
|
||||
|
||||
|
||||
divider : Element msg
|
||||
divider =
|
||||
el
|
||||
[ width fill
|
||||
, height fill
|
||||
, centerX
|
||||
, width (fill |> maximum 600)
|
||||
, D.widthEach
|
||||
{ bottom = 1
|
||||
, top = 0
|
||||
, left = 0
|
||||
, right = 0
|
||||
}
|
||||
, D.color (getThemeColor TextLightOrange)
|
||||
, paddingEach
|
||||
{ top = 10
|
||||
, bottom = 0
|
||||
, left = 0
|
||||
, right = 0
|
||||
}
|
||||
]
|
||||
<|
|
||||
none
|
||||
|
||||
|
||||
renderCodeLine : SyntaxColors -> List (Element msg) -> Element msg
|
||||
renderCodeLine colors elements =
|
||||
paragraph
|
||||
[ F.color colors.text
|
||||
, F.alignLeft
|
||||
, F.family
|
||||
[ F.monospace ]
|
||||
]
|
||||
elements
|
||||
|
||||
|
||||
detailHeader : String -> Element msg
|
||||
detailHeader title =
|
||||
column
|
||||
[ centerX
|
||||
, width fill
|
||||
]
|
||||
[ divider
|
||||
, paragraph
|
||||
[ F.color (getThemeColor TextLightGrey)
|
||||
, paragraphSpacing
|
||||
, F.bold
|
||||
, centerX
|
||||
, F.center
|
||||
, headerFontSizeBig
|
||||
, F.color (getThemeColor TextLightOrange)
|
||||
, paddingEach
|
||||
{ top = 20
|
||||
, right = 0
|
||||
, bottom = 0
|
||||
, left = 0
|
||||
}
|
||||
]
|
||||
[ text (String.toUpper title) ]
|
||||
]
|
||||
148
packages/website/frontend/src/Config/Helpers/Cards/Inner/ToolTip.elm
Executable file
148
packages/website/frontend/src/Config/Helpers/Cards/Inner/ToolTip.elm
Executable file
|
|
@ -0,0 +1,148 @@
|
|||
module Config.Helpers.Cards.Inner.ToolTip exposing
|
||||
( ToolTipPosition(..)
|
||||
, tooltip
|
||||
, tooltipImage
|
||||
)
|
||||
|
||||
import Config.Style.Colour.Helpers exposing (colourTheme)
|
||||
import Config.Style.Transitions exposing (transitionStyleSlow)
|
||||
import Element as E
|
||||
exposing
|
||||
( Attribute
|
||||
, alignLeft
|
||||
, alignRight
|
||||
, below
|
||||
, centerX
|
||||
, centerY
|
||||
, el
|
||||
, fill
|
||||
, height
|
||||
, htmlAttribute
|
||||
, image
|
||||
, inFront
|
||||
, mouseOver
|
||||
, moveLeft
|
||||
, none
|
||||
, padding
|
||||
, pointer
|
||||
, px
|
||||
, rgba
|
||||
, text
|
||||
, transparent
|
||||
, width
|
||||
)
|
||||
import Element.Background as B exposing (color)
|
||||
import Element.Border as D
|
||||
exposing
|
||||
( color
|
||||
, rounded
|
||||
, shadow
|
||||
, width
|
||||
)
|
||||
import Element.Font as F
|
||||
exposing
|
||||
( center
|
||||
, regular
|
||||
, size
|
||||
)
|
||||
import Html.Attributes as H exposing (style)
|
||||
|
||||
|
||||
tooltip : ToolTipPosition -> String -> Attribute msg
|
||||
tooltip toolTipPosition content =
|
||||
let
|
||||
tooltipContent : Attribute msg
|
||||
tooltipContent =
|
||||
below <|
|
||||
el
|
||||
[ htmlAttribute (H.style "pointerEvents" "none")
|
||||
, case toolTipPosition of
|
||||
IsLeft ->
|
||||
alignLeft
|
||||
|
||||
IsRight ->
|
||||
alignRight
|
||||
]
|
||||
<|
|
||||
el
|
||||
[ E.width fill
|
||||
, htmlAttribute <| H.style "z-index" "4"
|
||||
, F.size 15
|
||||
, F.center
|
||||
, F.regular
|
||||
, B.color colourTheme.backgroundLightGrey
|
||||
, F.color colourTheme.textLightGrey
|
||||
, padding 15
|
||||
, D.color colourTheme.textLightOrange
|
||||
, D.rounded 5
|
||||
, D.width 2
|
||||
, D.shadow
|
||||
{ offset = ( 0, 3 )
|
||||
, blur = 6
|
||||
, size = 0
|
||||
, color = rgba 0 0 0 0.32
|
||||
}
|
||||
]
|
||||
(text content)
|
||||
in
|
||||
inFront <|
|
||||
el
|
||||
[ E.width fill
|
||||
, height fill
|
||||
, pointer
|
||||
, transparent True
|
||||
, mouseOver [ transparent False ]
|
||||
, htmlAttribute <| H.style "z-index" "4"
|
||||
, transitionStyleSlow
|
||||
, tooltipContent
|
||||
]
|
||||
none
|
||||
|
||||
|
||||
type ToolTipPosition
|
||||
= IsLeft
|
||||
| IsRight
|
||||
|
||||
|
||||
tooltipImage : String -> Attribute msg
|
||||
tooltipImage content =
|
||||
inFront <|
|
||||
el
|
||||
[ E.width fill
|
||||
, height fill
|
||||
, transparent True
|
||||
, mouseOver [ transparent False ]
|
||||
, htmlAttribute <| H.style "z-index" "4"
|
||||
, transitionStyleSlow
|
||||
, below <|
|
||||
el
|
||||
[ htmlAttribute (H.style "pointerEvents" "none")
|
||||
, moveLeft 200
|
||||
]
|
||||
<|
|
||||
el
|
||||
[ E.width <| px 400
|
||||
, htmlAttribute <| H.style "z-index" "4"
|
||||
, B.color colourTheme.backgroundLightGrey
|
||||
, D.color colourTheme.textLightOrange
|
||||
, D.rounded 5
|
||||
, D.width 2
|
||||
, D.shadow
|
||||
{ offset = ( 0, 3 )
|
||||
, blur = 6
|
||||
, size = 0
|
||||
, color = rgba 0 0 0 0.32
|
||||
}
|
||||
]
|
||||
(image
|
||||
[ E.width fill
|
||||
, height fill
|
||||
, centerX
|
||||
, centerY
|
||||
]
|
||||
{ src = content
|
||||
, description = "Tooltip image"
|
||||
}
|
||||
)
|
||||
]
|
||||
none
|
||||
576
packages/website/frontend/src/Config/Helpers/Cards/Outer/Helpers.elm
Executable file
576
packages/website/frontend/src/Config/Helpers/Cards/Outer/Helpers.elm
Executable file
|
|
@ -0,0 +1,576 @@
|
|||
module Config.Helpers.Cards.Outer.Helpers exposing (cardMaker)
|
||||
|
||||
-- import Config.Style.Colour.Helpers exposing (colourTheme)
|
||||
|
||||
import Config.Data.Identity exposing (pageNames)
|
||||
import Config.Data.ImageFolders as M
|
||||
exposing
|
||||
( ImageFolder(..)
|
||||
, getImageFolderString
|
||||
, imagePathMaker
|
||||
)
|
||||
import Config.Helpers.Cards.Inner.Text exposing (divider)
|
||||
import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..))
|
||||
import Config.Helpers.Converters exposing (formatName)
|
||||
import Config.Helpers.Response exposing (contentContainer)
|
||||
import Config.Style.Colour.Helpers
|
||||
exposing
|
||||
( ThemeColor(..)
|
||||
, getThemeColor
|
||||
)
|
||||
import Config.Style.Fonts
|
||||
exposing
|
||||
( defaultFontSize
|
||||
, headerFontSizeBig
|
||||
)
|
||||
import Config.Style.Glow
|
||||
exposing
|
||||
( glowDeepDarkGrey
|
||||
, glowDeepDarkOrange
|
||||
)
|
||||
import Config.Style.Transitions exposing (transitionStyleSlow)
|
||||
import Element as E
|
||||
exposing
|
||||
( Device
|
||||
, DeviceClass(..)
|
||||
, Element
|
||||
, Orientation(..)
|
||||
, alignRight
|
||||
, alignTop
|
||||
, centerX
|
||||
, column
|
||||
, el
|
||||
, fill
|
||||
, height
|
||||
, image
|
||||
, link
|
||||
, mouseOver
|
||||
, newTabLink
|
||||
, none
|
||||
, padding
|
||||
, paddingEach
|
||||
, paddingXY
|
||||
, paragraph
|
||||
, row
|
||||
, spacing
|
||||
, text
|
||||
, width
|
||||
)
|
||||
import Element.Background as B exposing (color)
|
||||
import Element.Border as D
|
||||
exposing
|
||||
( color
|
||||
, roundEach
|
||||
, rounded
|
||||
, width
|
||||
)
|
||||
import Element.Font as F
|
||||
exposing
|
||||
( alignLeft
|
||||
, bold
|
||||
, center
|
||||
, color
|
||||
)
|
||||
import Html.Attributes as H exposing (id)
|
||||
|
||||
|
||||
cardMaker : Device -> Cardable -> List (Element msg) -> Element msg
|
||||
cardMaker device cardable contents =
|
||||
let
|
||||
hasLink : Bool
|
||||
hasLink =
|
||||
case cardable of
|
||||
C.Contact _ ->
|
||||
True
|
||||
|
||||
C.Cuck c ->
|
||||
False
|
||||
|
||||
C.BlogArticle _ ->
|
||||
False
|
||||
|
||||
C.BlogCard _ ->
|
||||
True
|
||||
|
||||
C.Argument _ ->
|
||||
False
|
||||
|
||||
C.Gibberish _ ->
|
||||
True
|
||||
|
||||
C.Service _ ->
|
||||
True
|
||||
|
||||
C.Debate _ ->
|
||||
True
|
||||
|
||||
C.Donate _ ->
|
||||
True
|
||||
|
||||
C.Interview _ ->
|
||||
False
|
||||
|
||||
C.NutriDex _ ->
|
||||
False
|
||||
|
||||
C.ServicePage _ ->
|
||||
False
|
||||
|
||||
C.ContactPage _ ->
|
||||
False
|
||||
|
||||
cardTitleMaker : String -> String -> Maybe String -> Element msg
|
||||
cardTitleMaker htmlId title maybeUrl =
|
||||
el
|
||||
([ headerFontSizeBig
|
||||
, F.bold
|
||||
, F.color (getThemeColor TextLightGrey)
|
||||
, E.width fill
|
||||
, E.htmlAttribute (H.id (formatName htmlId))
|
||||
]
|
||||
++ (case ( device.class, device.orientation ) of
|
||||
( Phone, Portrait ) ->
|
||||
[]
|
||||
|
||||
( Tablet, Portrait ) ->
|
||||
[]
|
||||
|
||||
_ ->
|
||||
[ F.center
|
||||
, B.color (getThemeColor TextDarkOrange)
|
||||
, D.roundEach
|
||||
{ topLeft = 26
|
||||
, topRight = 26
|
||||
, bottomRight = 0
|
||||
, bottomLeft = 0
|
||||
}
|
||||
, paddingEach
|
||||
{ top = 6
|
||||
, bottom = 3
|
||||
, left = 20
|
||||
, right = 20
|
||||
}
|
||||
]
|
||||
)
|
||||
)
|
||||
<|
|
||||
column
|
||||
[ E.width fill
|
||||
, spacing 10
|
||||
]
|
||||
[ case ( device.class, device.orientation ) of
|
||||
( Phone, Portrait ) ->
|
||||
case cardable of
|
||||
C.NutriDex _ ->
|
||||
none
|
||||
|
||||
_ ->
|
||||
divider
|
||||
|
||||
( Tablet, Portrait ) ->
|
||||
case cardable of
|
||||
C.NutriDex _ ->
|
||||
none
|
||||
|
||||
_ ->
|
||||
divider
|
||||
|
||||
_ ->
|
||||
none
|
||||
, case cardable of
|
||||
C.BlogCard blogArticle ->
|
||||
case ( device.class, device.orientation ) of
|
||||
( Phone, Portrait ) ->
|
||||
image
|
||||
[ E.width fill
|
||||
, paddingEach
|
||||
{ top = 8
|
||||
, bottom = 0
|
||||
, left = 0
|
||||
, right = 0
|
||||
}
|
||||
]
|
||||
{ src = "/blog/" ++ blogArticle.articleImage ++ ".png", description = "" }
|
||||
|
||||
( Tablet, Portrait ) ->
|
||||
image
|
||||
[ E.width fill
|
||||
, paddingEach
|
||||
{ top = 8
|
||||
, bottom = 0
|
||||
, left = 0
|
||||
, right = 0
|
||||
}
|
||||
]
|
||||
{ src = "/blog/" ++ blogArticle.articleImage ++ ".png", description = "" }
|
||||
|
||||
_ ->
|
||||
none
|
||||
|
||||
_ ->
|
||||
none
|
||||
, row
|
||||
[ E.width fill
|
||||
, spacing 10
|
||||
, case ( device.class, device.orientation ) of
|
||||
( Phone, Portrait ) ->
|
||||
F.alignLeft
|
||||
|
||||
( Tablet, Portrait ) ->
|
||||
F.alignLeft
|
||||
|
||||
_ ->
|
||||
F.center
|
||||
, paddingXY 0
|
||||
(case ( device.class, device.orientation ) of
|
||||
( Phone, Portrait ) ->
|
||||
10
|
||||
|
||||
( Tablet, Portrait ) ->
|
||||
10
|
||||
|
||||
_ ->
|
||||
0
|
||||
)
|
||||
]
|
||||
[ case cardable of
|
||||
C.NutriDex _ ->
|
||||
case ( device.class, device.orientation ) of
|
||||
( Phone, Portrait ) ->
|
||||
none
|
||||
|
||||
( Tablet, Portrait ) ->
|
||||
none
|
||||
|
||||
_ ->
|
||||
paragraph [] [ text title ]
|
||||
|
||||
_ ->
|
||||
paragraph [] [ text title ]
|
||||
, el
|
||||
[ alignRight
|
||||
]
|
||||
(case ( device.class, device.orientation ) of
|
||||
( Phone, Portrait ) ->
|
||||
case maybeUrl of
|
||||
Just url ->
|
||||
readMoreLink url
|
||||
|
||||
Nothing ->
|
||||
none
|
||||
|
||||
( Tablet, Portrait ) ->
|
||||
case maybeUrl of
|
||||
Just url ->
|
||||
readMoreLink url
|
||||
|
||||
Nothing ->
|
||||
none
|
||||
|
||||
_ ->
|
||||
none
|
||||
)
|
||||
]
|
||||
]
|
||||
|
||||
readMoreLink : String -> Element msg
|
||||
readMoreLink url =
|
||||
link [ alignTop, paddingXY 0 5 ]
|
||||
{ url = url
|
||||
, label =
|
||||
el
|
||||
[ F.color (getThemeColor TextLightGrey)
|
||||
, B.color (getThemeColor TextDarkOrange)
|
||||
, D.rounded 10
|
||||
, paddingEach
|
||||
{ top = 6
|
||||
, bottom = 3
|
||||
, left = 10
|
||||
, right = 10
|
||||
}
|
||||
, mouseOver
|
||||
[ F.color (getThemeColor TextLightOrange)
|
||||
, B.color (getThemeColor TextDeepDarkOrange)
|
||||
]
|
||||
, transitionStyleSlow
|
||||
, defaultFontSize
|
||||
]
|
||||
<|
|
||||
text
|
||||
(case cardable of
|
||||
C.Donate _ ->
|
||||
"Support!"
|
||||
|
||||
C.Argument _ ->
|
||||
"Proof Tree!"
|
||||
|
||||
_ ->
|
||||
"Read More!"
|
||||
)
|
||||
}
|
||||
|
||||
cardInner : String -> String -> Maybe String -> List (Element msg) -> Element msg
|
||||
cardInner htmlId title maybeUrl elements =
|
||||
column
|
||||
[ E.width fill
|
||||
, spacing 0
|
||||
]
|
||||
[ cardTitleMaker htmlId title maybeUrl
|
||||
, (case ( device.class, device.orientation ) of
|
||||
( Phone, Portrait ) ->
|
||||
el
|
||||
[ E.width fill
|
||||
, centerX
|
||||
]
|
||||
|
||||
( Tablet, Portrait ) ->
|
||||
el
|
||||
[ E.width fill
|
||||
, centerX
|
||||
]
|
||||
|
||||
_ ->
|
||||
cardStuff
|
||||
)
|
||||
<|
|
||||
row
|
||||
[ E.width fill
|
||||
]
|
||||
elements
|
||||
]
|
||||
|
||||
cardOuter : Element msg -> Element msg
|
||||
cardOuter elements =
|
||||
contentContainer <|
|
||||
el
|
||||
([ E.width fill
|
||||
]
|
||||
++ (case ( device.class, device.orientation ) of
|
||||
( Phone, Portrait ) ->
|
||||
[]
|
||||
|
||||
( Tablet, Portrait ) ->
|
||||
[]
|
||||
|
||||
_ ->
|
||||
[ E.width fill
|
||||
, D.width 5
|
||||
, D.color (getThemeColor BackgroundDarkGrey)
|
||||
, D.rounded 32
|
||||
, glowDeepDarkGrey
|
||||
]
|
||||
++ (if hasLink then
|
||||
[ mouseOver
|
||||
[ D.color (getThemeColor TextDarkOrange)
|
||||
, B.color (getThemeColor TextDarkOrange)
|
||||
, glowDeepDarkOrange
|
||||
]
|
||||
, transitionStyleSlow
|
||||
]
|
||||
|
||||
else
|
||||
[]
|
||||
)
|
||||
)
|
||||
)
|
||||
elements
|
||||
|
||||
cardWithImageWithLink : String -> Bool -> String -> String -> String -> List (Element msg) -> Element msg
|
||||
cardWithImageWithLink htmlId linkBool title image url content =
|
||||
linkChooser
|
||||
linkBool
|
||||
(cardInner htmlId
|
||||
title
|
||||
(if hasLink then
|
||||
Just url
|
||||
|
||||
else
|
||||
Nothing
|
||||
)
|
||||
[ cardContentMaker content
|
||||
]
|
||||
)
|
||||
url
|
||||
|
||||
cardWithNoImageWithLink : String -> Bool -> String -> String -> List (Element msg) -> Element msg
|
||||
cardWithNoImageWithLink htmlId linkBool title url content =
|
||||
linkChooser
|
||||
linkBool
|
||||
(cardInner htmlId
|
||||
title
|
||||
(Just url)
|
||||
[ cardContentMaker content
|
||||
]
|
||||
)
|
||||
url
|
||||
|
||||
cardWithImage : String -> String -> String -> List (Element msg) -> Element msg
|
||||
cardWithImage htmlId title image content =
|
||||
cardOuter <|
|
||||
cardInner htmlId
|
||||
title
|
||||
Nothing
|
||||
[ cardContentMaker content
|
||||
]
|
||||
|
||||
cardWithNoImage : String -> String -> List (Element msg) -> Element msg
|
||||
cardWithNoImage htmlId title content =
|
||||
cardOuter <|
|
||||
cardInner htmlId
|
||||
title
|
||||
Nothing
|
||||
[ cardContentMaker content
|
||||
]
|
||||
|
||||
linkChooser : Bool -> Element msg -> String -> Element msg
|
||||
linkChooser linkBool element url =
|
||||
cardOuter <|
|
||||
case ( device.class, device.orientation ) of
|
||||
( Phone, Portrait ) ->
|
||||
el [ E.width fill ] <| element
|
||||
|
||||
( Tablet, Portrait ) ->
|
||||
el [ E.width fill ] <| element
|
||||
|
||||
_ ->
|
||||
(if linkBool then
|
||||
newTabLink
|
||||
|
||||
else
|
||||
link
|
||||
)
|
||||
[ E.width fill ]
|
||||
{ url = url
|
||||
, label = element
|
||||
}
|
||||
in
|
||||
case cardable of
|
||||
C.Contact contact ->
|
||||
cardWithImageWithLink
|
||||
contact.contactImage
|
||||
contact.isNewTabLink
|
||||
contact.contactName
|
||||
(imagePathMaker M.Contact contact.contactImage)
|
||||
contact.contactLink
|
||||
contents
|
||||
|
||||
C.Cuck cuck ->
|
||||
cardWithImage
|
||||
cuck.cuckImage
|
||||
cuck.cuckName
|
||||
(imagePathMaker M.Cuck cuck.cuckImage)
|
||||
contents
|
||||
|
||||
C.BlogArticle blogArticle ->
|
||||
cardWithNoImage
|
||||
blogArticle.articleImage
|
||||
(String.toUpper blogArticle.articleName)
|
||||
contents
|
||||
|
||||
C.BlogCard blogArticle ->
|
||||
cardWithImageWithLink
|
||||
blogArticle.articleImage
|
||||
blogArticle.isNewTabLink
|
||||
blogArticle.articleName
|
||||
(imagePathMaker M.BlogCard blogArticle.articleImage)
|
||||
blogArticle.articleLink
|
||||
contents
|
||||
|
||||
C.Argument argument ->
|
||||
cardWithNoImage
|
||||
argument.argumentImage
|
||||
argument.argumentTitle
|
||||
contents
|
||||
|
||||
C.Gibberish gibberish ->
|
||||
cardWithImageWithLink
|
||||
gibberish.gibberishImage
|
||||
gibberish.isNewTabLink
|
||||
gibberish.gibberishTitle
|
||||
(imagePathMaker M.Gibberish gibberish.gibberishImage)
|
||||
gibberish.gibberishLink
|
||||
contents
|
||||
|
||||
C.Service service ->
|
||||
cardWithImageWithLink
|
||||
service.serviceImage
|
||||
service.isNewTabLink
|
||||
service.serviceName
|
||||
(imagePathMaker M.Service service.serviceImage)
|
||||
service.serviceLink
|
||||
contents
|
||||
|
||||
C.Debate debate ->
|
||||
cardWithImageWithLink
|
||||
debate.debateImage
|
||||
debate.isNewTabLink
|
||||
debate.debateTitle
|
||||
(imagePathMaker M.Debate debate.debateImage)
|
||||
debate.debateLink
|
||||
contents
|
||||
|
||||
C.Donate donate ->
|
||||
cardWithImageWithLink
|
||||
donate.donateImage
|
||||
donate.isNewTabLink
|
||||
donate.donateName
|
||||
(imagePathMaker M.Donate donate.donateImage)
|
||||
donate.donateLink
|
||||
contents
|
||||
|
||||
C.Interview interview ->
|
||||
cardWithImage
|
||||
interview.interviewImage
|
||||
interview.interviewName
|
||||
(imagePathMaker M.Interviews interview.interviewImage)
|
||||
contents
|
||||
|
||||
C.NutriDex nutriDex ->
|
||||
cardWithNoImage
|
||||
nutriDex.nutriDexTitle
|
||||
(String.toUpper nutriDex.nutriDexTitle)
|
||||
contents
|
||||
|
||||
C.ServicePage service ->
|
||||
cardWithNoImage
|
||||
service.serviceImage
|
||||
(String.toUpper service.serviceName)
|
||||
contents
|
||||
|
||||
C.ContactPage contact ->
|
||||
cardWithNoImage
|
||||
contact.contactImage
|
||||
(String.toUpper contact.contactName)
|
||||
contents
|
||||
|
||||
|
||||
cardContentMaker : List (Element msg) -> Element msg
|
||||
cardContentMaker content =
|
||||
column
|
||||
[ spacing 8
|
||||
, E.width fill
|
||||
]
|
||||
content
|
||||
|
||||
|
||||
cardStuff : Element msg -> Element msg
|
||||
cardStuff content =
|
||||
el
|
||||
[ E.width fill
|
||||
, centerX
|
||||
, B.color (getThemeColor BackgroundDarkGrey)
|
||||
, padding 10
|
||||
, D.roundEach
|
||||
{ topLeft = 0
|
||||
, topRight = 0
|
||||
, bottomRight = 26
|
||||
, bottomLeft = 26
|
||||
}
|
||||
]
|
||||
<|
|
||||
el
|
||||
[ paddingXY 15 0
|
||||
, E.width fill
|
||||
, height fill
|
||||
]
|
||||
content
|
||||
28
packages/website/frontend/src/Config/Helpers/Cards/Outer/Types.elm
Executable file
28
packages/website/frontend/src/Config/Helpers/Cards/Outer/Types.elm
Executable file
|
|
@ -0,0 +1,28 @@
|
|||
module Config.Helpers.Cards.Outer.Types exposing (Cardable(..))
|
||||
|
||||
import Config.Pages.Blogs.Types exposing (BlogArticle)
|
||||
import Config.Pages.Contact.Types exposing (Contact)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
import Config.Pages.Debate.Cuckery.Types exposing (Cuck)
|
||||
import Config.Pages.Debate.Gibberish.Types exposing (Gibberish)
|
||||
import Config.Pages.Debate.Types exposing (Debate)
|
||||
import Config.Pages.Donate.Types exposing (Donate)
|
||||
import Config.Pages.Interviews.Types exposing (Interview)
|
||||
import Config.Pages.Products.Types exposing (NutriDex)
|
||||
import Config.Pages.Services.Types exposing (Service)
|
||||
|
||||
|
||||
type Cardable
|
||||
= Contact Contact
|
||||
| ContactPage Contact
|
||||
| Cuck Cuck
|
||||
| BlogArticle BlogArticle
|
||||
| BlogCard BlogArticle
|
||||
| Argument Argument
|
||||
| Gibberish Gibberish
|
||||
| Service Service
|
||||
| Debate Debate
|
||||
| Donate Donate
|
||||
| Interview Interview
|
||||
| NutriDex NutriDex
|
||||
| ServicePage Service
|
||||
66
packages/website/frontend/src/Config/Helpers/Converters.elm
Executable file
66
packages/website/frontend/src/Config/Helpers/Converters.elm
Executable file
|
|
@ -0,0 +1,66 @@
|
|||
module Config.Helpers.Converters exposing
|
||||
( formatName
|
||||
, formatSocial
|
||||
, toTitleCase
|
||||
, wordCount
|
||||
)
|
||||
|
||||
|
||||
formatName : String -> String
|
||||
formatName name =
|
||||
name
|
||||
|> String.toLower
|
||||
|> String.replace " " ""
|
||||
|> String.replace "'" ""
|
||||
|> String.replace "." ""
|
||||
|> String.replace "-" ""
|
||||
|> String.replace "_" ""
|
||||
|
||||
|
||||
formatSocial : String -> String
|
||||
formatSocial name =
|
||||
name
|
||||
|> String.replace "https://x.com/" "@"
|
||||
|> String.replace "https://www.threads.net/@" "@"
|
||||
|> String.replace "https://bsky.app/profile/" "@"
|
||||
|> String.replace "https://www.instagram.com/" "@"
|
||||
|> String.replace "https://www.youtube.com/" "@"
|
||||
|
||||
|
||||
wordCount : String -> Int
|
||||
wordCount text =
|
||||
text
|
||||
|> String.words
|
||||
|> List.length
|
||||
|
||||
|
||||
toTitleCase : String -> String
|
||||
toTitleCase input =
|
||||
let
|
||||
lowercaseWords =
|
||||
[ "a", "an", "the", "and", "but", "or", "for", "nor", "on", "at", "to", "in", "of", "with", "by" ]
|
||||
|
||||
words =
|
||||
String.words input
|
||||
|
||||
capitalizeFirst word =
|
||||
case String.uncons word of
|
||||
Just ( first, rest ) ->
|
||||
String.toUpper (String.fromChar first) ++ String.toLower rest
|
||||
|
||||
Nothing ->
|
||||
""
|
||||
|
||||
capitalizeWord index word =
|
||||
if index == 0 then
|
||||
capitalizeFirst word
|
||||
|
||||
else if not (List.member (String.toLower word) lowercaseWords) then
|
||||
capitalizeFirst word
|
||||
|
||||
else
|
||||
String.toLower word
|
||||
in
|
||||
words
|
||||
|> List.indexedMap capitalizeWord
|
||||
|> String.join " "
|
||||
160
packages/website/frontend/src/Config/Helpers/Headers/Helpers.elm
Executable file
160
packages/website/frontend/src/Config/Helpers/Headers/Helpers.elm
Executable file
|
|
@ -0,0 +1,160 @@
|
|||
module Config.Helpers.Headers.Helpers exposing (headerMaker)
|
||||
|
||||
import Config.Helpers.Cards.Inner.Text exposing (divider)
|
||||
import Config.Helpers.Converters exposing (formatName)
|
||||
import Config.Helpers.Headers.Types as C exposing (Headerable(..))
|
||||
import Config.Helpers.Response exposing (contentContainer)
|
||||
import Config.Style.Colour.Helpers exposing (colourTheme)
|
||||
import Config.Style.Fonts
|
||||
exposing
|
||||
( defaultFontSize
|
||||
, headerFontSizeBig
|
||||
)
|
||||
import Element as E
|
||||
exposing
|
||||
( Element
|
||||
, centerX
|
||||
, column
|
||||
, el
|
||||
, fill
|
||||
, maximum
|
||||
, minimum
|
||||
, padding
|
||||
, paddingEach
|
||||
, paragraph
|
||||
, spacing
|
||||
, text
|
||||
, width
|
||||
)
|
||||
import Element.Font as F
|
||||
exposing
|
||||
( bold
|
||||
, center
|
||||
)
|
||||
|
||||
|
||||
headerMaker : Headerable msg -> Element msg
|
||||
headerMaker headerable =
|
||||
let
|
||||
headerTitleMaker : String -> Element msg
|
||||
headerTitleMaker title =
|
||||
el
|
||||
[ headerFontSizeBig
|
||||
, F.bold
|
||||
, width fill
|
||||
, F.center
|
||||
]
|
||||
<|
|
||||
paragraph [] [ text title ]
|
||||
|
||||
headerHelper : String -> List (Element msg) -> Element msg
|
||||
headerHelper title body =
|
||||
el
|
||||
[ width (fill |> minimum 100)
|
||||
, width (fill |> maximum 725)
|
||||
, padding 10
|
||||
, centerX
|
||||
]
|
||||
<|
|
||||
column
|
||||
[ width fill
|
||||
]
|
||||
[ headerTitleMaker title
|
||||
, divider
|
||||
, el
|
||||
[ E.height fill
|
||||
, E.width fill
|
||||
, centerX
|
||||
, spacing 8
|
||||
, paddingEach
|
||||
{ top = 10
|
||||
, bottom = 0
|
||||
, left = 0
|
||||
, right = 0
|
||||
}
|
||||
]
|
||||
<|
|
||||
el
|
||||
[ paddingEach
|
||||
{ top = 0
|
||||
, bottom = 0
|
||||
, left = 15
|
||||
, right = 15
|
||||
}
|
||||
, spacing 8
|
||||
, width fill
|
||||
]
|
||||
<|
|
||||
paragraph
|
||||
[ width fill
|
||||
, defaultFontSize
|
||||
, F.center
|
||||
]
|
||||
<|
|
||||
body
|
||||
]
|
||||
in
|
||||
case headerable of
|
||||
C.Arguments argument ->
|
||||
headerHelper argument.headerTitle argument.headerBody
|
||||
|
||||
C.BlogPage blog ->
|
||||
headerHelper blog.headerTitle blog.headerBody
|
||||
|
||||
C.CuckList cuck ->
|
||||
headerHelper cuck.headerTitle cuck.headerBody
|
||||
|
||||
C.Debate debate ->
|
||||
headerHelper debate.headerTitle debate.headerBody
|
||||
|
||||
C.Donate donate ->
|
||||
headerHelper donate.headerTitle donate.headerBody
|
||||
|
||||
C.Gibberish gibberish ->
|
||||
headerHelper gibberish.headerTitle gibberish.headerBody
|
||||
|
||||
C.Services service ->
|
||||
headerHelper service.headerTitle service.headerBody
|
||||
|
||||
C.Interviews interview ->
|
||||
headerHelper interview.headerTitle interview.headerBody
|
||||
|
||||
C.NutriDex nutriDex ->
|
||||
headerHelper nutriDex.headerTitle nutriDex.headerBody
|
||||
|
||||
C.Contact contact ->
|
||||
headerHelper contact.headerTitle contact.headerBody
|
||||
|
||||
C.Journal journal ->
|
||||
headerHelper journal.headerTitle journal.headerBody
|
||||
|
||||
|
||||
cardContentMaker : List (Element msg) -> Element msg
|
||||
cardContentMaker content =
|
||||
column
|
||||
[ spacing 8
|
||||
, width fill
|
||||
]
|
||||
content
|
||||
|
||||
|
||||
cardStuff : Element msg -> Element msg
|
||||
cardStuff content =
|
||||
el
|
||||
[ E.height fill
|
||||
, E.width fill
|
||||
, centerX
|
||||
, spacing 8
|
||||
]
|
||||
<|
|
||||
el
|
||||
[ paddingEach
|
||||
{ top = 0
|
||||
, bottom = 0
|
||||
, left = 15
|
||||
, right = 15
|
||||
}
|
||||
, spacing 8
|
||||
, width fill
|
||||
]
|
||||
content
|
||||
151
packages/website/frontend/src/Config/Helpers/Headers/Records.elm
Executable file
151
packages/website/frontend/src/Config/Helpers/Headers/Records.elm
Executable file
|
|
@ -0,0 +1,151 @@
|
|||
module Config.Helpers.Headers.Records exposing
|
||||
( argumentHeader
|
||||
, blogHeader
|
||||
, contactHeader
|
||||
, cuckListHeader
|
||||
, debateHeader
|
||||
, donateHeader
|
||||
, gibberishHeader
|
||||
, interviewHeader
|
||||
, journalHeader
|
||||
, nutriDexHeader
|
||||
, servicesHeader
|
||||
)
|
||||
|
||||
import Config.Helpers.Cards.Inner.Text exposing (detailBodyLink)
|
||||
import Config.Helpers.Headers.Types exposing (Header)
|
||||
import Config.Style.Colour.Helpers exposing (ThemeColor(..))
|
||||
import Element as E
|
||||
exposing
|
||||
( newTabLink
|
||||
, text
|
||||
)
|
||||
import Route.Path as Path
|
||||
|
||||
|
||||
argumentHeader : Header msg
|
||||
argumentHeader =
|
||||
let
|
||||
name =
|
||||
"Arguments"
|
||||
in
|
||||
{ headerTitle = String.toUpper name
|
||||
, headerBody = [ text "This page features arguments that I hold to be sound. I'm open to hearing all challenges, as I am ready to engage with and defend any argument listed." ]
|
||||
}
|
||||
|
||||
|
||||
blogHeader : Header msg
|
||||
blogHeader =
|
||||
let
|
||||
name =
|
||||
"Blog"
|
||||
in
|
||||
{ headerTitle = String.toUpper name
|
||||
, headerBody = [ text "This page features blog articles written by me, along with contributions from guest authors, covering topics primarily related to nutrition science, health science, and article." ]
|
||||
}
|
||||
|
||||
|
||||
cuckListHeader : Header msg
|
||||
cuckListHeader =
|
||||
let
|
||||
name =
|
||||
"Cucklist"
|
||||
in
|
||||
{ headerTitle = String.toUpper name
|
||||
, headerBody = [ text "This page features a list of morons who wrote cheques with their mouths that their asses couldn't cash. Each person included in this list has dodged debating me." ]
|
||||
}
|
||||
|
||||
|
||||
debateHeader : Header msg
|
||||
debateHeader =
|
||||
let
|
||||
name =
|
||||
"Debate"
|
||||
in
|
||||
{ headerTitle = String.toUpper name
|
||||
, headerBody = [ text "Here you will find links to various pages relevant to debate, such as formal arguments and a list of debate-dodging cucks." ]
|
||||
}
|
||||
|
||||
|
||||
donateHeader : Header msg
|
||||
donateHeader =
|
||||
let
|
||||
name =
|
||||
"Donate"
|
||||
in
|
||||
{ headerTitle = String.toUpper name
|
||||
, headerBody = [ text "My site, research, and content all cost time and money to run. If you find my contributions valuable, please consider supporting my work on any of the platforms listed below!" ]
|
||||
}
|
||||
|
||||
|
||||
gibberishHeader : Header msg
|
||||
gibberishHeader =
|
||||
let
|
||||
name =
|
||||
"Gibberish"
|
||||
in
|
||||
{ headerTitle = String.toUpper name
|
||||
, headerBody = [ text "This page is specifically for terms and ostensible concepts that I think are either nonsensical or so practically useless that its intelligiblity is irrelevant." ]
|
||||
}
|
||||
|
||||
|
||||
servicesHeader : Header msg
|
||||
servicesHeader =
|
||||
let
|
||||
name =
|
||||
"Services"
|
||||
in
|
||||
{ headerTitle = String.toUpper name
|
||||
, headerBody =
|
||||
[ text "Here are all the services I offer to interested clients. Feel free to "
|
||||
, newTabLink []
|
||||
{ url = Path.toString Path.Contact_Inquiry
|
||||
, label = detailBodyLink TextLightOrange "reach out"
|
||||
}
|
||||
, text " with any questions or to receive a quote for bundled purchases."
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
interviewHeader : Header msg
|
||||
interviewHeader =
|
||||
let
|
||||
name =
|
||||
"Interviews"
|
||||
in
|
||||
{ headerTitle = String.toUpper name
|
||||
, headerBody = [ text "This page showcases various podcasts and shows I've been on. If you’d like to have me as a guest on your podcast, feel free to reach out!" ]
|
||||
}
|
||||
|
||||
|
||||
nutriDexHeader : Header msg
|
||||
nutriDexHeader =
|
||||
let
|
||||
name =
|
||||
"The NutriDex"
|
||||
in
|
||||
{ headerTitle = String.toUpper name
|
||||
, headerBody = [ text "" ]
|
||||
}
|
||||
|
||||
|
||||
contactHeader : Header msg
|
||||
contactHeader =
|
||||
let
|
||||
name =
|
||||
"Contact"
|
||||
in
|
||||
{ headerTitle = String.toUpper name
|
||||
, headerBody = [ text "If you wish to contact me, please carefully choose from the following options before reaching out, to make sure that your communication ends up in the right place." ]
|
||||
}
|
||||
|
||||
|
||||
journalHeader : Header msg
|
||||
journalHeader =
|
||||
let
|
||||
name =
|
||||
"Journal"
|
||||
in
|
||||
{ headerTitle = String.toUpper name
|
||||
, headerBody = [ text "This page features blog articles on topics not necessarily related to nutrition science, such as technology, popular culture, veganism, etc." ]
|
||||
}
|
||||
26
packages/website/frontend/src/Config/Helpers/Headers/Types.elm
Executable file
26
packages/website/frontend/src/Config/Helpers/Headers/Types.elm
Executable file
|
|
@ -0,0 +1,26 @@
|
|||
module Config.Helpers.Headers.Types exposing
|
||||
( Header
|
||||
, Headerable(..)
|
||||
)
|
||||
|
||||
import Element exposing (Element)
|
||||
|
||||
|
||||
type Headerable msg
|
||||
= Arguments (Header msg)
|
||||
| BlogPage (Header msg)
|
||||
| CuckList (Header msg)
|
||||
| Debate (Header msg)
|
||||
| Donate (Header msg)
|
||||
| Gibberish (Header msg)
|
||||
| Services (Header msg)
|
||||
| Interviews (Header msg)
|
||||
| NutriDex (Header msg)
|
||||
| Contact (Header msg)
|
||||
| Journal (Header msg)
|
||||
|
||||
|
||||
type alias Header msg =
|
||||
{ headerTitle : String
|
||||
, headerBody : List (Element msg)
|
||||
}
|
||||
94
packages/website/frontend/src/Config/Helpers/Response.elm
Executable file
94
packages/website/frontend/src/Config/Helpers/Response.elm
Executable file
|
|
@ -0,0 +1,94 @@
|
|||
module Config.Helpers.Response exposing
|
||||
( contentContainer
|
||||
, pageList
|
||||
, pageListCenter
|
||||
, pageListFormat
|
||||
, topLevelContainer
|
||||
)
|
||||
|
||||
import Config.Style.Colour.Helpers exposing (colourTheme)
|
||||
import Element as E
|
||||
exposing
|
||||
( Attribute
|
||||
, Device
|
||||
, DeviceClass(..)
|
||||
, Element
|
||||
, Orientation(..)
|
||||
, alignTop
|
||||
, centerX
|
||||
, centerY
|
||||
, el
|
||||
, fill
|
||||
, height
|
||||
, maximum
|
||||
, minimum
|
||||
, padding
|
||||
, paddingXY
|
||||
, scrollbarY
|
||||
, spacing
|
||||
, width
|
||||
)
|
||||
import Element.Background as B exposing (color)
|
||||
import Html.Attributes exposing (style)
|
||||
|
||||
|
||||
topLevelContainer : Element msg -> Element msg
|
||||
topLevelContainer =
|
||||
el
|
||||
[ width fill
|
||||
, height fill
|
||||
, B.color colourTheme.backgroundLightGrey
|
||||
]
|
||||
|
||||
|
||||
pageListCenter : Device -> List (Attribute msg)
|
||||
pageListCenter device =
|
||||
[ centerY
|
||||
]
|
||||
++ pageListFormat device
|
||||
|
||||
|
||||
pageList : Device -> List (Attribute msg)
|
||||
pageList device =
|
||||
[ alignTop
|
||||
]
|
||||
++ pageListFormat device
|
||||
|
||||
|
||||
pageListFormat : Device -> List (Attribute msg)
|
||||
pageListFormat device =
|
||||
let
|
||||
pageListAttr =
|
||||
[ centerX
|
||||
, width fill
|
||||
, height fill
|
||||
, scrollbarY
|
||||
]
|
||||
in
|
||||
pageListAttr
|
||||
++ (case ( device.class, device.orientation ) of
|
||||
( Phone, Portrait ) ->
|
||||
[ spacing 0
|
||||
, paddingXY 10 30
|
||||
]
|
||||
|
||||
( Tablet, Portrait ) ->
|
||||
[ spacing 0
|
||||
, paddingXY 10 30
|
||||
]
|
||||
|
||||
_ ->
|
||||
[ spacing 20
|
||||
, paddingXY 30 30
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
contentContainer : Element msg -> Element msg
|
||||
contentContainer =
|
||||
el
|
||||
[ width (fill |> minimum 100)
|
||||
, width (fill |> maximum 875)
|
||||
, padding 10
|
||||
, centerX
|
||||
]
|
||||
16
packages/website/frontend/src/Config/Helpers/Viewport.elm
Executable file
16
packages/website/frontend/src/Config/Helpers/Viewport.elm
Executable file
|
|
@ -0,0 +1,16 @@
|
|||
module Config.Helpers.Viewport exposing
|
||||
( Msg
|
||||
, resetViewport
|
||||
)
|
||||
|
||||
import Browser.Dom as Dom exposing (setViewport)
|
||||
import Task exposing (attempt)
|
||||
|
||||
|
||||
type Msg
|
||||
= NoOp
|
||||
|
||||
|
||||
resetViewport : Cmd Msg
|
||||
resetViewport =
|
||||
Task.attempt (\_ -> NoOp) (Dom.setViewportOf "scroll-container" 0 0)
|
||||
26
packages/website/frontend/src/Config/Pages/Blogs/Journal/DigitalPrivacy.elm
Executable file
26
packages/website/frontend/src/Config/Pages/Blogs/Journal/DigitalPrivacy.elm
Executable file
|
|
@ -0,0 +1,26 @@
|
|||
module Config.Pages.Blogs.Journal.DigitalPrivacy exposing (articleDigitalPrivacy)
|
||||
|
||||
import Config.Pages.Blogs.Types exposing (BlogArticle)
|
||||
import Route.Path as Path
|
||||
|
||||
|
||||
articleDigitalPrivacy : BlogArticle
|
||||
articleDigitalPrivacy =
|
||||
{ articleName = ""
|
||||
, articleLink = Path.toString Path.Journal_Digitalprivacy
|
||||
, articleAuthor = "Nick Hiebert"
|
||||
, isNewTabLink = False
|
||||
, hasReferences = False
|
||||
, hasTableOfContents = True
|
||||
, articleImage = "digitalprivacy"
|
||||
, articlePublished = ""
|
||||
, articleBody = """"""
|
||||
, articleReferences =
|
||||
[ { author = ""
|
||||
, title = ""
|
||||
, journal = ""
|
||||
, year = ""
|
||||
, link = ""
|
||||
}
|
||||
]
|
||||
}
|
||||
2321
packages/website/frontend/src/Config/Pages/Blogs/MainBlog/BigFatSurprise.elm
Executable file
2321
packages/website/frontend/src/Config/Pages/Blogs/MainBlog/BigFatSurprise.elm
Executable file
File diff suppressed because it is too large
Load diff
1678
packages/website/frontend/src/Config/Pages/Blogs/MainBlog/EverettVegans.elm
Executable file
1678
packages/website/frontend/src/Config/Pages/Blogs/MainBlog/EverettVegans.elm
Executable file
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1,33 @@
|
|||
module Config.Pages.Blogs.MainBlog.FeldwitzFuckery exposing (..)
|
||||
|
||||
import Config.Pages.Blogs.Types exposing (BlogArticle)
|
||||
import Route.Path as Path
|
||||
|
||||
|
||||
articleFeldwitzFuckery : BlogArticle
|
||||
articleFeldwitzFuckery =
|
||||
{ articleName = ""
|
||||
, articleLink = Path.toString Path.Blog_Feldwitzfuckery
|
||||
, articleAuthor = "Nick Hiebert"
|
||||
, isNewTabLink = False
|
||||
, hasReferences = True
|
||||
, hasTableOfContents = True
|
||||
, articleImage = ""
|
||||
, articlePublished = ""
|
||||
, articleBody = """
|
||||
|
||||
|
||||
|
||||
![][image1]
|
||||
[image1]: /blog/feldwitzfuckery/image1.png
|
||||
|
||||
Thank you for reading! If you like what you've read and want help me create more content like this, consider pledging your [Support](https://www.uprootnutrition.com/donate). Every little bit helps! I hope you found the content interesting!"""
|
||||
, articleReferences =
|
||||
[ { author = ""
|
||||
, title = ""
|
||||
, journal = ""
|
||||
, year = ""
|
||||
, link = ""
|
||||
}
|
||||
]
|
||||
}
|
||||
246
packages/website/frontend/src/Config/Pages/Blogs/MainBlog/HunterGatherers.elm
Executable file
246
packages/website/frontend/src/Config/Pages/Blogs/MainBlog/HunterGatherers.elm
Executable file
|
|
@ -0,0 +1,246 @@
|
|||
module Config.Pages.Blogs.MainBlog.HunterGatherers exposing (articleHunterGatherers)
|
||||
|
||||
import Config.Pages.Blogs.Types exposing (BlogArticle)
|
||||
import Route.Path as Path
|
||||
|
||||
|
||||
articleHunterGatherers : BlogArticle
|
||||
articleHunterGatherers =
|
||||
{ articleName = "Should Modern Humans Eat Like Hunter-Gatherers?"
|
||||
, articleLink = Path.toString Path.Blog_Huntergatherers
|
||||
, articleAuthor = "Nick Hiebert"
|
||||
, isNewTabLink = False
|
||||
, hasReferences = True
|
||||
, hasTableOfContents = True
|
||||
, articleImage = "huntergatherers"
|
||||
, articlePublished = "May 14, 2021"
|
||||
, articleBody = """
|
||||
Many Paleo diet advocates claim that hunter-gatherer diets optimally promote the long-term health of human beings. There are typically two primary justifications for this claim— firstly, the fact that hunter-gatherer populations typically appear to be robustly healthy, and secondly, the fact that humans evolved eating these types of diets. While these are technically statements of fact, I find myself forced to take a page out of the Paleo-dieter's playbook, as I remind them that correlation doesn't equal causation. So, let's dig into why their reasoning is flawed.
|
||||
|
||||
Firstly, let me hit you with a thought experiment for a moment. Do you think that the elderly people within a given population would appear either more healthy or less healthy if that population _never_ had access to modern medical technology? Think about this for a moment. You may understandably intuit that their health would probably be worse, correct? But that probably isn't what would happen. They would probably appear healthier, and I'll explain why.
|
||||
|
||||
# SURVIVORSHIP BIAS
|
||||
|
||||
If a population never had access to modern medical technology, one of the things you couldn't reliably do is save sick or injured children. No matter what culture you observe, a sizable proportion of children will develop infectious illnesses. These illnesses, like bacterial or viral infections, are generally mundane by modern standards. However, without modern medicine many children who developed these types of illnesses would likely not survive them.
|
||||
|
||||
Those who are more prone to illness likely do not have the same chances of survival as those who are less prone to illness. As such, why wouldn't the elderly in this hypothetical population present with more robust health as a result? Without medical intervention, the environment is essentially selecting for the fittest possible individuals in our hypothetical population. This would likely generate the appearance of more robust health in the elderly. Consider this carefully for a moment. If you weed out all of the weaker people, of course the remaining population is going to appear stronger.
|
||||
|
||||
This presents a significant problem for Paleo diet advocates who choose to cite the robust health of hunter-gatherer populations as a justification for the Paleo diet, or as a justification for recommending the diet to others. Most Paleo-dieters do seem to be aware of the environmental adversity faced by hunter-gatherer populations. But they often don't seem to appreciate how this also produces significant challenges for their narrative.
|
||||
|
||||
For example, if you remind a Paleo-dieter that hunter-gatherers typically had an average life expectancy of around 30 years, they will often immediately retort by stating that those estimates are confounded by infant and child mortality. But therein lies the problem— they can't have it both ways. A Paleo diet advocate cannot use that argument without tacitly admitting that infant and child mortality is typically enormously high among hunter-gatherer populations. Which it most certainly is [[1](https://www.sciencedirect.com/science/article/abs/pii/S1090513812001237)].
|
||||
|
||||
![][image1]
|
||||
[image1]: /blog/huntergatherers/image1.png
|
||||
|
||||
Approximately 26.8% of infants and 48.8% of prepubescent children die in hunter-gatherer populations. With such a high proportion of children dying, how could it be the case that the apparent health of elderly hunter-gatherers is **not** coloured by this? Remember, hunter-gatherer populations likely appear healthier because the least resilient members of those populations are already dead. Paleo diet advocates cannot admit that hunter-gatherer populations had high rates of infant and child mortality without also admitting that the resulting population is a heavily biased sample.
|
||||
|
||||
This type of confounding is known as survivorship bias. Basically, survivorship bias is a type of selection bias that can occur when those who did not survive a selection event or process are overlooked in favour of those who did survive. For example, let's say we were trying to construct better body armour for soldiers to wear in combat. Perhaps we might conduct a study of the soldiers who returned from battle. We could collect bullet wound distribution pattern data to help ascertain where soldiers were most likely to get shot.
|
||||
|
||||
![][image2]
|
||||
[image2]: /blog/huntergatherers/image2.png
|
||||
|
||||
However, as we see in the graphic above, this sort of analysis would exclude all those who were shot and did **not** survive. It would also overlook the sorts of bullet wound distribution patterns that tended to lead to death, which would actually have given us a significantly clearer picture of how we might construct better body armour.
|
||||
|
||||
Likewise, when Paleo diet advocates claim that we should eat like hunter-gatherers because hunter-gatherers are robustly healthy, they're not appreciating how survivorship bias is confounding their appraisal of hunter-gatherer health. They are essentially overlooking the other fifty percent of the hunter-gatherer population that didn't survive.
|
||||
|
||||
For this reason, it is dubious to use the apparent good health of hunter-gatherers as the basis for the assumption that their diets are appropriate for modern humans. Until Paleo diet advocates can figure out a way to explain why survivorship bias would not be confounding in an evaluation of hunter-gatherer health, they cannot rely on the apparent good health of hunter-gatherer populations to determine the applicability of hunter-gatherer diets to modern humans. In reality, the degree to which hunter-gatherer diets are appropriate for modern humans remains unclear.
|
||||
|
||||
But this isn't the only erroneous argument that Paleo-dieters will use to justify their claims. Often times Paleo diet advocates will also suggest that since we evolved eating certain foods, it is absurd to believe that any of the foods that we evolved eating could pose a long-term health risk to the average person. This reasoning has been used to dismiss robust and well-studied diet-disease relationships, such as saturated fat and cardiovascular disease, red meat and cancer, or even sodium and hypertension [[2](https://pubmed.ncbi.nlm.nih.gov/32428300/)][[3](https://pubmed.ncbi.nlm.nih.gov/28487287/)][[4](https://pubmed.ncbi.nlm.nih.gov/27216139/)][[5](https://pubmed.ncbi.nlm.nih.gov/28655835/)].
|
||||
|
||||
Right off the bat it is quite easy to identify that this is a blatant appeal to nature fallacy, and can be outright dismissed on that basis alone. However, it is important to describe precisely why this line of reasoning fails. What we really want to know is whether or not foods are necessarily beneficial (or neutral) for long-term health merely because we evolved eating them.
|
||||
|
||||
To explore this question, let's first briefly consider how Darwinian natural selection works. Essentially, it is the process by which random gene mutations are selected for by different environmental challenges. Some mutations are better at dealing with certain environmental challenges than other mutations. As a result, these more adaptive mutations increase an organism's chances of producing offspring. These organisms subsequently pass on these adaptive mutations to their offspring as well.
|
||||
|
||||
![][image3]
|
||||
[image3]: /blog/huntergatherers/image3.png
|
||||
|
||||
In this image we see that black mice are less likely to get eaten by the bird than tan mice. For this reason, the random mutations that produces black mice rather than tan mice ends up being naturally selected for by the environment. However, environmental challenges like getting eaten aren't quite the same as environmental challenges that affect the long-term health of an organism.
|
||||
|
||||
# SELECTION SHADOW
|
||||
|
||||
Getting eaten when you're young is an acute event. Developing a life-threatening chronic disease in old-age, as a result of a life-long environmental exposure (like a food or nutrient), is a long, protracted event. It is unlikely that selection pressure applies to these two events symmetrically, because adaptations occur as a function of successful reproduction. As a result, the probability that _deleterious_ traits will be successfully selected against likely diminishes with age.
|
||||
|
||||
So, the question ends up being: how long after reproductive age does natural selection still robustly apply to human beings? Surely selection pressure doesn't end at reproductive age, because human children need human adults to raise them and care for them. But does selective pressure exist to a meaningful degree for those in the age ranges that typically associate with life-threatening chronic disease? Some scholars have attempted to estimate the force of natural selection as a function of age [[6](https://pubmed.ncbi.nlm.nih.gov/30124168/)].
|
||||
|
||||
![][image4]
|
||||
[image4]: /blog/huntergatherers/image4.png
|
||||
|
||||
Applying the above graph to human beings, our best estimations suggest that the forces of natural selection rapidly wane down to nil shortly after sexual maturity, which would be approximately 16 to 17 years of age. Around the ages of 30 to 40 is when humans likely enter the "selection shadow", which is the zone wherein natural selection no longer robustly applies.
|
||||
|
||||
It seems highly unlikely that the fate of a population could ever hinge on the fitness of middle-aged people who are past their prime. For fun, let's estimate the age range wherein peak human performance is likely to occur. Perhaps we could look at the average age range of Olympic athletes [[7](https://venngage.com/blog/olympics/)].
|
||||
|
||||
![][image5]
|
||||
[image5]: /blog/huntergatherers/image5.png
|
||||
|
||||
The average age range of Olympic athletes is between ~22.5 and ~25.5, which is well before the age range seen within the selection shadow. Which honestly makes sense if you think about it. As you age it becomes less likely that natural selection will select against deleterious traits, like losing athletic performance. Once inside the selection shadow, there is likely insufficient selective pressure to extend peak physical performance into higher and higher age ranges.
|
||||
|
||||
The selection shadow may actually be observable in some existing traditional populations as well, such as the Tsimané people of Bolivia. While they are technically hunter/forager-horticulturalists and not strictly hunter-gatherers, they are one of the only traditional populations for which we have decent data regarding the progression of chronic disease.
|
||||
|
||||
Using a measurement of atherosclerotic cardiovascular disease (ASCVD) progression known as coronary artery calcification (CAC) scoring, researchers were able to quantify the prevalence of ASCVD by age group among the Tsimané [[8](https://pubmed.ncbi.nlm.nih.gov/28320601/)].
|
||||
|
||||
![][image6]
|
||||
[image6]: /blog/huntergatherers/image6.png
|
||||
|
||||
It should also be noted that CAC scores are indicative of advanced ASCVD [[9](https://pubmed.ncbi.nlm.nih.gov/24530667/)]. The exclusive use of CAC scoring in this study of the Tsimané leaves us with many interpretive challenges. For example, if CAC scores are representative of advanced ASCVD (so called "hard plaques"), what proportion of less advanced ASCVD (so-called "soft plaque") might have been overlooked? It is difficult to say for sure. But the bottom line is that the Tsimané experience increases in chronic disease at approximately the same time as modern populations— well inside the selection shadow.
|
||||
|
||||
Granted, the prevalence of chronic disease in the Tsimané is overall lower than that of Western cultures. But, this could be expected given the fact that their diets and lifestyles are likely preferable to that of Western cultures as well. Not to mention the possible confounding due to survivorship bias, to which they are also not immune [[10](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3502712/)]. The Tsimané have infant mortality rates that are many fold higher than in Western cultures. This means that the Tsimané are vulnerable to the same type of confounding via survivorship bias that we discussed earlier, thus adding more layers of interpretive challenges.
|
||||
|
||||
The methods used to determine the age-ranges of the Tsimané were also questionable, and relied mostly on anecdote and personal judgement rather than objective measurements.
|
||||
|
||||
>_“Birth years were assigned based on a combination of methods including using known ages from written records, relative age lists, dated events, photo comparisons of people with known ages, and cross-validation of information from independent interviews of kin.”_
|
||||
|
||||
When compared to more objective measures of age, the methods described above would appear to overestimate ages as the age of the subjects increases [[11](https://pubmed.ncbi.nlm.nih.gov/27511193/)]. Below the age of 40, estimates appear to be rather accurate. However, the age estimations used by Kaplan et al. (2017) would seem to overestimate ages by approximately 15 years above the age of 60. After adjusting for this, it is unlikely that CAC prevalence among the Tsimané differs significantly from Western populations. In fact, it might actually be higher.
|
||||
|
||||
# ANTAGONISTIC PLEIOTROPY
|
||||
|
||||
It is also imperative to mention that foods to which we are adapted might actually be more likely to be harmful for us as we age. This is because of a concept in evolutionary biology called antagonistic pleiotropy, which is the most widely accepted explanation for the evolutionary origin of aging [[12](https://pubmed.ncbi.nlm.nih.gov/31870250/)][[13](https://pubmed.ncbi.nlm.nih.gov/30524730/)]. The theory of antagonistic pleiotropy essentially posits some genetic adaptations can trade long-term health for short-term reproductive success. However, it can be inferred that most genetic adaptations are antagonistically pleiotropic.
|
||||
|
||||
Essentially, human DNA tends to degrade over time when it doesn't rightfully need to, as evidenced by the existence of biologically immortal organisms. Human DNA repair is also regulated and gene-specific. Given these facts, the interaction between gene degradation and gene repair is likely to be adaptive. This assigns every gene in our DNA that tends to degrade more with time a single antagonistically pleiotropic trait. Since most DNA in the human genome degrades over time, we can infer that over 50% of genes are antagonistically pleiotropic.
|
||||
|
||||
Since adaptations to foods are no more or less genetic than any other adaptations, we can infer that most adaptations to food are also likely to be antagonistic pleiotropic as well. From here we just infer that antagonistic pleiotropy applies more to ancestral foods than it does to novel foods. Which would suggest that the foods to which we are most strongly adapted would tend to be most antagonistically pleiotropic. This increases the likelihood that ancestral foods trade long-term fitness for short-term reproductive success.
|
||||
|
||||
For example, perhaps adaptations to sodium and saturated fat consumption, like regulated changes in blood pressure or lipoprotein secretion from the liver, may help to carry people to reproductive age without incident. However, those adaptations might actually increase the risk of poorer health later in life if those dietary exposures persist too long. This is why we cannot assume that natural diets are actually appropriate for maintaining the long-term health of modern humans. These adaptations to diet are likely to be antagonistic pleiotropic.
|
||||
|
||||
Without scientific evidence to help inform our attitudes toward the relative health value of novel foods, the health value of those foods remains is a black box. Due to the principle of indifference, we have no particular reason to suspect that truly novel foods will be either beneficial or detrimental. However, if it can be demonstrated that both an ancestral food and a novel food have the same thriving potential during the reproductive years, we can actually infer that the novel food is to be favoured.
|
||||
|
||||
Novel foods do not belong to the domain of foods that have the potential to be antagonistic pleiotropic, since we did not evolve consuming them. Conversely, the ancestral food in our scenario is likely to be antagonistically pleiotropic. Thus, the novel food is to be favoured over the ancestral food in this case. This concept can be illustrated clearly with a couple of simple tables.
|
||||
|
||||
![][image7]
|
||||
[image7]: /blog/huntergatherers/image7.png
|
||||
|
||||
To summarize, we can infer that ancestral foods are likely to have both positive short-term health value, as well as negative long-term health value. However, in the absence of empirical data, our doxastic attitude toward the health value of novel foods should be one of agnosticism. When the thriving potential of novel foods and ancestral foods show non-inferiority, we infer that the novel foods is less likely to be detrimental for long-term health. Altogether, the argument can be summarized like this:
|
||||
|
||||
![][argument1]
|
||||
[argument1]: /blog/huntergatherers/argument1.png
|
||||
|
||||
Essentially, once you equalize advantages across a given novel food and a given ancestral food, the inherent disadvantages of antagonistic pleiotropy would leave us favouring the novel food over the ancestral food for long-term health. From here we can infer a priori that a diet that maximizes benefits and minimizes risks for the most amount of people is likely to be a diet that is on some level unnatural or non-ancestral. It is also important to discuss what this position is **not** arguing. It is **not** being argued that every novel food is going to be superior to every ancestral food, and it is **not** being argued that all ancestral foods are bad.
|
||||
|
||||
As an aside, one might point out that while ancestral foods like meat seem to increase the risk of many diseases, while other ancestral foods like fruit seem to decrease the risk of many diseases. So what gives? My arguments apply equally to fruit, and adaptations of fruit are also likely to be antagonistically pleiotropic. However, it is likely the case that the antagonistically pleiotropic pathways that are influenced by foods like fruit are less impactful than those influenced by foods like meat.
|
||||
|
||||
Diet is about substitutions. Replacing meat with fruit lowers risk, but that doesn't mean that fruit is without long-term harms or risks as well. Bearing this in mind, I posit that if we truly want to maximize the thriving potential of food, we must engineer our own food. Assuming that no diet of natural foods will actually lower risk to zero, if we wanted to improve the health value of food even more, how would we accomplish this without artificially manipulating those foods? In fact, we have evidence that the health value of natural foods can be improved, with examples like Golden rice.
|
||||
|
||||
# OPTIMAL DIETS
|
||||
|
||||
Lastly, it has also been suggested by some Paleo diet advocates that certain hunter-gatherer migrant studies provide us with a justification for why hunter-gatherer diets are appropriate for modern humans. This is due to the fact that these studies demonstrate that when certain hunter-gatherer populations transition from their traditional diets to more Westernized diets, they experience increases in chronic disease risk [[14](https://pubmed.ncbi.nlm.nih.gov/6937778/)][[15](https://pubmed.ncbi.nlm.nih.gov/7462380/)]. However, this is ultimately irrelevant to my point.
|
||||
|
||||
The fact that Western diets increase disease risk relative to certain hunter-gatherer diets does not actually lend any credibility to the notion that modern humans can achieve robust health that is equal to that of hunter-gatherers merely by emulating their diets. Perhaps the Western diet is so bad that it would negatively impact the health of any human population who ate it over the long-term. But, it could also be the case that hunter-gatherer diets are still inappropriate for modern humans in many ways— ways that may not be obvious for the reasons I've discussed throughout this article. These are not incompatible concepts.
|
||||
|
||||
The most I would have to grant is that a hunter-gatherer diet is likely an improvement over a Western diet. But that is a far cry from ascertaining that a hunter-gatherer diet is optimal for the long-term health of modern humans. This is just a gross overextrapolation from altogether irrelevant data.
|
||||
|
||||
The last inference is the icing on the cake, and a bit more convoluted, but it is necessary to argue it to an ancestral diet advocate. This is next argument cuts to the core of their epistemology regarding ancestral diets and health. All we need to do is prime the ancestral diet advocate for the inference by asking them if they identify as "**F**" (as defined below). If they do, then we proceed. If they don't, then their motivations for advocating for ancestral diets diets isn't clear at all.
|
||||
|
||||
![][argument2]
|
||||
[argument2]: /blog/huntergatherers/argument2.png
|
||||
|
||||
Essentially, if our interlocutor identifies as "**F**", then all we need to do is demonstrate to them that "**N**" exists, and we're essentially home free. If they accept that "**N**" exists and they also identify as "**F**", then they should be in favour of substituting such a novel food for such an ancestral food. If they don't, then they have a contradiction. This is where the ancestral diet advocate could face quite a dilemma.
|
||||
|
||||
However, there is a way around this for them, but it's absurd. They can simply reject the evidence for "**N**" existing. Which would be a hilarious move for them to make, but they can make it if they want. However, implicit in this move is the rejection of all evidence that supports "**N**" existing, regardless of the quality.
|
||||
|
||||
For example, if they maintain that animal fat consumption is more supportive of health than vegetable fat consumption, they'd need to reject the multiple meta-analyses and meta-regression analyses of randomized controlled trials on the subject, as well as the consistency of effect in seen in high internal validity epidemiology. The implications of taking such a position are hilarious, because they could very easily have to also reject many other diet/lifestyle-disease relationships that they likely take for granted on much weaker evidence. Such as exercise and alcohol consumption affecting cardiovascular disease risk.
|
||||
|
||||
It is likely that the vaunted "optimal human diet", which is to say a diet that maximizes long-term health for the greatest number of people, has actually yet to be discovered. Ultimately, to answer the question of what foods are healthy, we need science. We need robust outcome data on modern human beings, not speculation and appeal to nature fallacies. We need this science to teach us how to eat.
|
||||
|
||||
# UPDATE
|
||||
|
||||
Chris Masterjohn has apparently written a [lengthy response](https://chrismasterjohnphd.substack.com/p/ancestral-health-vs-antagonistic) to my position on antagonistic pleiotropy and how it relates to the long-term health value of ancestral foods. Many have asked me to rebut the article, but it's not clear to me why I should. He's not interacting with the argument at all. Let me give you an example to help illustrate my feelings in this matter. If I give someone an argument, and their response is to turn around and scream at a wall, should I feel any sort of drive to "rebut" the screaming? I don't think so.
|
||||
|
||||
Constructing a lengthy reply to Masterjohn's article would only serve to give readers the impression that he actually said anything of substance against my position, which he hasn't. When someone tells me that they disagree with an argument that I have presented, I take this to mean one of two things. Either they have an argument of their own that forms a conclusion that is the negation of at least one of my premises, or they give at least one of my premises such low credence that they just deny that it's true. Masterjohn didn't do either in his article.
|
||||
|
||||
Masterjohn just spends the article giving low credence to concepts that aren't even entailed from the argument itself, so why should I care? It's doubly hilarious to expect me to rebut his article when he actually signed off on the entailments of my position at least twice in our [debate](https://chrismasterjohnphd.substack.com/p/the-ancestral-health-debate) when he was actually interacting with the argument itself and not going off on tangents. Once at [58:26](https://youtu.be/n1I5xgvERbo?t=3506) and again at [1:39:16](https://youtu.be/n1I5xgvERbo?t=5956). Not sure what more there is to comment on here.
|
||||
|
||||
Thank you for reading! If you like what you've read and want help me create more content like this, consider pledging your [Support](https://www.uprootnutrition.com/donate). Every little bit helps! I hope you found the content interesting!
|
||||
|
||||
# BIBLIOGRAPHY"""
|
||||
, articleReferences =
|
||||
[ { author = "Anthony A. Volka and Jeremy A. Atkinson"
|
||||
, title = "Infant and child death in the human environment of evolutionary adaptation"
|
||||
, journal = "Evolution and Human Behavior"
|
||||
, year = "2013"
|
||||
, link = "https://www.sciencedirect.com/science/article/abs/pii/S1090513812001237"
|
||||
}
|
||||
, { author = "Lee Hooper, et al."
|
||||
, title = "Reduction in saturated fat intake for cardiovascular disease"
|
||||
, journal = "Cochrane Database Syst Rev"
|
||||
, year = "2020"
|
||||
, link = "https://pubmed.ncbi.nlm.nih.gov/32428300/"
|
||||
}
|
||||
, { author = "Arash Etemadi, et al."
|
||||
, title = "Mortality from different causes associated with meat, heme iron, nitrates, and nitrites in the NIH-AARP Diet and Health Study: population based cohort study"
|
||||
, journal = "BMJ"
|
||||
, year = "2017"
|
||||
, link = "https://pubmed.ncbi.nlm.nih.gov/28487287/"
|
||||
}
|
||||
, { author = "Andrew Mente, et al."
|
||||
, title = "Associations of urinary sodium excretion with cardiovascular events in individuals with and without hypertension: a pooled analysis of data from four studies"
|
||||
, journal = "Lancet"
|
||||
, year = "2016"
|
||||
, link = "https://pubmed.ncbi.nlm.nih.gov/27216139/"
|
||||
}
|
||||
, { author = "Rik H G Olde Engberink, et al."
|
||||
, title = "Use of a Single Baseline Versus Multiyear 24-Hour Urine Collection for Estimation of Long-Term Sodium Intake and Associated Cardiovascular and Renal Risk"
|
||||
, journal = "Circulation"
|
||||
, year = "2017"
|
||||
, link = "https://pubmed.ncbi.nlm.nih.gov/28655835/"
|
||||
}
|
||||
, { author = "Thomas Flatt and Linda Partridge"
|
||||
, title = "Horizons in the evolution of aging"
|
||||
, journal = "BMC Biol"
|
||||
, year = "2018"
|
||||
, link = "https://pubmed.ncbi.nlm.nih.gov/30124168/"
|
||||
}
|
||||
, { author = "Ryan McCready"
|
||||
, title = "For Olympic Athletes, Is 30 the New 20?"
|
||||
, journal = ""
|
||||
, year = "2016"
|
||||
, link = "https://venngage.com/blog/olympics/"
|
||||
}
|
||||
, { author = "Hillard Kaplan, et al."
|
||||
, title = "Coronary atherosclerosis in indigenous South American Tsimane: a cross-sectional cohort study"
|
||||
, journal = "Lancet"
|
||||
, year = "2017"
|
||||
, link = "https://www.thelancet.com/journals/lancet/article/PIIS0140-6736(17)30752-3/fulltext"
|
||||
}
|
||||
, { author = "Mahesh V Madhavan, et al."
|
||||
, title = "Coronary artery calcification: pathogenesis and prognostic implications"
|
||||
, journal = "J Am Coll Cardiol"
|
||||
, year = "2014"
|
||||
, link = "https://pubmed.ncbi.nlm.nih.gov/24530667/"
|
||||
}
|
||||
, { author = "Michael Gurven"
|
||||
, title = "Infant and fetal mortality among a high fertility and mortality population in the Bolivian Amazon"
|
||||
, journal = "Soc Sci Med"
|
||||
, year = "2012"
|
||||
, link = "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3502712/"
|
||||
}
|
||||
, { author = "Horvath et al."
|
||||
, title = "An epigenetic clock analysis of race/ethnicity, sex, and coronary heart disease"
|
||||
, journal = "Genome Biol"
|
||||
, year = "2016"
|
||||
, link = "https://pubmed.ncbi.nlm.nih.gov/27511193/"
|
||||
}
|
||||
, { author = "J Mitteldorf"
|
||||
, title = "What Is Antagonistic Pleiotropy?"
|
||||
, journal = "Biochemistry (Mosc)"
|
||||
, year = "2019"
|
||||
, link = "https://pubmed.ncbi.nlm.nih.gov/31870250/"
|
||||
}
|
||||
, { author = "He and Zhang"
|
||||
, title = "Toward a molecular understanding of pleiotropy"
|
||||
, journal = "Genetics"
|
||||
, year = "2006"
|
||||
, link = "https://pubmed.ncbi.nlm.nih.gov/16702416/"
|
||||
}
|
||||
, { author = "J M Stanhope and I A Prior"
|
||||
, title = "The Tokelau island migrant study: prevalence and incidence of diabetes mellitus"
|
||||
, journal = "N Z Med J"
|
||||
, year = "1980"
|
||||
, link = "https://pubmed.ncbi.nlm.nih.gov/6937778/"
|
||||
}
|
||||
, { author = "J M Stanhope and I A Prior"
|
||||
, title = "The Tokelau Island Migrant Study: serum lipid concentration in two environments"
|
||||
, journal = "J Chronic Dis"
|
||||
, year = "1981"
|
||||
, link = "https://pubmed.ncbi.nlm.nih.gov/7462380/"
|
||||
}
|
||||
]
|
||||
}
|
||||
415
packages/website/frontend/src/Config/Pages/Blogs/MainBlog/MeatApologetics.elm
Executable file
415
packages/website/frontend/src/Config/Pages/Blogs/MainBlog/MeatApologetics.elm
Executable file
|
|
@ -0,0 +1,415 @@
|
|||
module Config.Pages.Blogs.MainBlog.MeatApologetics exposing (articleMeatApologetics)
|
||||
|
||||
import Config.Pages.Blogs.Types exposing (BlogArticle)
|
||||
import Route.Path as Path
|
||||
|
||||
|
||||
articleMeatApologetics : BlogArticle
|
||||
articleMeatApologetics =
|
||||
{ articleName = "A Systematic Appraisal of Pro-meat Apologetics"
|
||||
, articleLink = Path.toString Path.Blog_Meatapologetics
|
||||
, articleAuthor = "Nick Hiebert"
|
||||
, isNewTabLink = False
|
||||
, hasReferences = True
|
||||
, hasTableOfContents = True
|
||||
, articleImage = "meatapologetics"
|
||||
, articlePublished = "Apr 13, 2022"
|
||||
, articleBody = """
|
||||
Recently, a controversial paper reviewing both the health and environmental benefits of animal foods was published to the journal, Animal [[1](https://pubmed.ncbi.nlm.nih.gov/35158307/)]. This was brought to my attention by one of my patrons, who specifically requested that I respond to the first section of the article, titled "why the nutritional case against animal source foods may be overstated". My response was originally supposed to be a reaction video for my patrons. But, the more of the paper that I read, the more I realized that this would require a much more systematic appraisal.
|
||||
|
||||
Although I have only reviewed one section of the paper, I am told that the rest of the paper is also filled with questionable claims, falsehoods, half-truths, and dubious reasoning. As such, I will leave it to people with more domain knowledge to comment on the latter sections of the paper. As for the section that I was tasked with critiquing, I'm completely comfortable with systematically evaluating the claims contained within it. So, let's get into it.
|
||||
|
||||
>_Even though advocacy for moderate to heavy restriction [of animal foods] is echoed by various public heath institutions worldwide, suggesting apparent consensus, the scientific debate is not settled as the evidence has been challenged by various scientists, both for red meat (Truswell, 2009; Hite et al., 20100; Alexander et al., 2015; Klurfeld, 2015; Kruger & Zhou, 2018; Händel et al., 2020; Hill et al., 2020; Johnston et al., 2019; Leroy and Cofnas, 2020; Sholl et al., 2021)_
|
||||
|
||||
**Weasel words:**
|
||||
|
||||
Citing a couple of authors to represent the "public heath institutions" that advocate for animal food restriction, whilst also citing ten authors who challenge this notion, is a painfully misleading move. The evidence for reducing most animal foods is actually extensive, with only a small handful of exceptions. Not only that, but it's also questionable whether or not any public health institutions actually advocate for the moderate or heavy restriction of these exceptions. It's unclear, because the terms "moderate" and "heavy" are not clearly defined.
|
||||
|
||||
**Motte and Bailey:**
|
||||
|
||||
The paragraph began by referencing the presumed attitudes of "public health institutions" toward animal foods more broadly. A truly extraordinary claim that is not supposed by any of the their reference material. They then follow it up by citing authors who have pushed back specifically on these institutions' attitudes toward red meat and saturated fat. Most public health institutions that are concerned with nutrition do indeed advocate for the restriction of these foods.
|
||||
|
||||
>_...and saturated fat, which is not exclusive to animal source foods (Astrup et al., 2020; Krauss & Kris Etherton, 2020)._
|
||||
|
||||
**Red herring:**
|
||||
|
||||
While there are some plant foods that are high in saturated fat, we need not consume them. Those sources of saturated fat can be avoided on an animal food restricted diet. This is less true of the animal foods that these authors are specifically attempting to defend. Not only that, but no public health institutions are advocating for the consumption of plant foods like coconut or palm oil. So, I'm not even sure what this point is meant to address.
|
||||
|
||||
# EPIDEMIOLOGY THO
|
||||
|
||||
>_Among other concerns, one of the objections is that pleas for restriction are based on conflicting findings and observational relationships that are not necessarily causal, suffering from confounding and bias (Grosso et al., 2017; Händel et al., 2020; Hill et al., 2020; Leroy & Barnard, 2020; Nordhagen et al., 2020)._
|
||||
|
||||
**Potential contradiction:**
|
||||
|
||||
Confounding is a causal concept. All posited confounders need to be validated as genuine confounders using evidence that meets these authors' bar for causal inference. Otherwise we don't have a reason to consider them confounders at all. The truth is that virtually all accepted confounders in this domain are validated via epidemiological data itself. I can formalize the argument like this:
|
||||
|
||||
![][argument1]
|
||||
[argument1]: /blog/meatapologetics/argument1.png
|
||||
|
||||
In the above syllogism, the authors could very easily be affirming P and ¬P. If the authors are rejecting epidemiological evidence while simultaneously positing confounders that will be validated with epidemiological evidence, their position would entail a contradiction.
|
||||
|
||||
>_Unwarranted use of causal language is nonetheless widespread in the interpretation of nutritional epidemiological data, thereby posing a systemic problem and undermining the field’s credibility (Cofield et al., 2010; Ioannidis, 2018)._
|
||||
|
||||
**Red herring:**
|
||||
|
||||
Firstly, there is no reference for the claim that causal language is widespread in the interpretation of nutritional epidemiological data. Secondly, even if it were true, nutritional epidemiology has excellent validation for both its results as well as the underpinning methodology, considering its limitations and shortcomings.
|
||||
|
||||
If the goalpost for causal inference is human experiments, then the use of causal language is likely to be warranted more often than it is unwarranted. This is due to the high degree of concordance between the results of nutritional epidemiology and randomized controlled trials [[2](https://pubmed.ncbi.nlm.nih.gov/34526355/)][[3](https://pubmed.ncbi.nlm.nih.gov/23700648/)][[4](https://pubmed.ncbi.nlm.nih.gov/34308960/)]. Regardless, it's not clear how the widespread use of causal language poses either a systemic problem or undermines the field's credibility. Again, it just isn't clear what the point of these claims is supposed to be.
|
||||
|
||||
>_Moreover, the associations between red meat and metabolic disease have not only been evaluated as weak..._
|
||||
|
||||
**Red herring:**
|
||||
|
||||
It is not true that these associations are weak. When meta-analytically summated the associations are often close to linear. Not only for total mortality but also for many major chronic diseases [[5](https://pubmed.ncbi.nlm.nih.gov/28446499/)][[6](https://pubmed.ncbi.nlm.nih.gov/29039970/)][[7](https://pubmed.ncbi.nlm.nih.gov/28397016/)]. The associations generally only appear weak when there are certain sources of bias present, such as inadequate exposure contrasts, follow-up times, participant numbers, or even overadjustment for mediators.
|
||||
|
||||
>_...translating into small absolute risks based on low to very low certainty evidence (Johnston et al., 2019)..._
|
||||
|
||||
**Red herring:**
|
||||
|
||||
Absolute risk and certainty are concepts that don't strongly interact. You can have low absolute risks and a high degree of certainty, such as with successful human trials with event-based stopping conditions. You can also have high absolute risks and low certainty, such as with underpowered human studies with high event rates.
|
||||
|
||||
It's also not clear why the authors would choose to favour absolute risk over relative risk, considering that the maximum possible absolute risk differences are going to be dictated by event rates in the comparator population. This concept can be easily illustrated referring to populations that have longer follow-up times, such as with the literature on LDL and cardiovascular disease risk [[8](https://pubmed.ncbi.nlm.nih.gov/30571575/)].
|
||||
|
||||
![][image1]
|
||||
[image1]: /blog/meatapologetics/image1.png
|
||||
|
||||
The distance between the two green lines represents the absolute risk difference between low and high LDL over 10 years. Whereas the distance between the two red lines represents the absolute risk difference between low and high LDL over 30 years. Here we can see that if insufficient follow-up is observed, absolute risk differences will inevitably be smaller. This is because event rates naturally increase with time.
|
||||
|
||||
The meta-analysis by Vernooij et al. (2019) that the authors cited to support the claim of "small" absolute risk differences with red meat had a median follow-up time of 10.5 years for cardiovascular disease [[9](https://pubmed.ncbi.nlm.nih.gov/31569217/)]. Despite this limitation, Vernooij et al. did not appear to have made any substantive attempt to explore the heterogeneity between their included studies with subgroup analyses or meta-regression analyses. Had they done so, they could have subgrouped by follow-up time and inevitably found that the absolute risks were higher in cohorts with longer follow-ups.
|
||||
|
||||
But we can take it a step further. We can reveal the inconsistency in their reasoning by formalizing their argument against nutritional epidemiology, and showing that their criticisms apply to, say, human experiments as well.
|
||||
|
||||
![][argument2]
|
||||
[argument2]: /blog/meatapologetics/argument2.png
|
||||
|
||||
Using the authors' own logic, we can show that they would have to dismiss human experimental evidence on the same basis. This is because human experimental evidence is vulnerable to the same types of limitations that the authors are positing as presumably invalidating for nutritional epidemiology.
|
||||
|
||||
>_Associations are particularly noticeable in North America, where meat is often consumed through a fast-food window and where high-meat consumers tend to also eat less healthy diets and follow less healthy lifestyles in general. In a Canadian study, eating more meat was only associated with more all-cause cancer incidence for the subpopulation eating the lowest amounts of fruits and vegetables (Maximova et al., 2020)._
|
||||
|
||||
**Potential contradiction:**
|
||||
|
||||
Again, the authors appear to be dismissing nutritional epidemiological evidence on the basis of confounding, without justifying their asymmetrical attitudes toward the supporting evidence for the confounders they're positing. What is true of the evidence between fruits and vegetables and cancer and the evidence between meat and cancer, such that we can infer causality for one and not the other?
|
||||
|
||||
**Equivocation:**
|
||||
|
||||
This is the second time the authors have shifted the goalpost regarding what types of animals foods that are in question. First they were discussing animal foods simpliciter, only to shift the goalpost to red meat. Now they were talking about red meat, and have shifted goalposts to meat as a broad category. Whether this is intentional or just the result of sloppy writing, it is not a good look for the authors.
|
||||
|
||||
>_Several large-scale population-based studies, performed in individuals with ‘healthy lifestyles’, such as the Oxford-EPIC Study (Key et al., 2003) and the 45-and-Up Study (Mihrshahi et al., 2017), also find that the negative effects of red meat consumption on all-cause mortality become benign._
|
||||
|
||||
**Red Herring:**
|
||||
|
||||
From the wider literature, the typical threshold for harm with meat is at approximately 100g/day on average [[5](https://pubmed.ncbi.nlm.nih.gov/28446499/)].
|
||||
|
||||
![][image2]
|
||||
[image2]: /blog/meatapologetics/image2.png
|
||||
|
||||
The Oxford-EPIC cohort lacks power in those ranges [[10](https://pubmed.ncbi.nlm.nih.gov/23497300/)]. Data on the exposure contrasts in the 45-and-Up Study are even more unpersuasive [[11](https://pubmed.ncbi.nlm.nih.gov/28040519/)]. We have far more robust data than this, with better internal validity, follow-up times, and measurements.
|
||||
|
||||
In this Japanese cohort with a follow-up of 14 years, diet and lifestyle covariates were largely balanced across the quantiles of red meat intake [[12](https://pubmed.ncbi.nlm.nih.gov/33320898/)]. In fact, many covariates we'd suspect to be detrimental actually favoured meat consumption. Despite this, total meat was still associated with a statistically significant 21% increase in all-cause mortality among men between the ages of 65 and 79 years old, and a borderline-significant 41% increase in all-cause mortality risk among women between the ages of 45 and 54 years old.
|
||||
|
||||
![][image3]
|
||||
[image3]: /blog/meatapologetics/image3.png
|
||||
|
||||
These results could indicate that meat consumption is more likely to lead to premature death due to an unmeasured cause earlier in life than with men. Perhaps the seemingly premature increase in mortality could plausibly be attributed to an unmeasured female-specific endpoint, such as breast cancer [[13](https://pubmed.ncbi.nlm.nih.gov/31389007/)].
|
||||
|
||||
Again, just to hammer the point home, we can actually defeat the authors' position with a simple modus tollens.
|
||||
|
||||
![][argument3]
|
||||
[argument3]: /blog/meatapologetics/argument3.png
|
||||
|
||||
Given the weight and strength of the evidence in favour of meat restriction for longevity, it would be quite hilarious to see the authors attempt to reject P2. The evidence they referenced from the Oxford-EPIC cohrot and the 45-and-Up Study could be used in an attempt to reject P2. However, that evidence is very easily superseded by higher internal validity evidence with greater power, not to mention in populations that don't suffer from the same supposed confounding.
|
||||
|
||||
>_If red meat were indeed causally driving the associations, one would anticipate finding stronger effects in systematic reviews looking specifically at red meat intake (able to evaluate a large intake gradient) compared to dietary pattern studies (smaller intake gradient) (Johnston et al., 2018)._
|
||||
|
||||
**Potential contradiction:**
|
||||
|
||||
The association between all-cause mortality and red meat consumption is stronger than the inverse association between all-cause mortality and fruit and vegetable consumption in the most well-done systematic reviews [[5](https://pubmed.ncbi.nlm.nih.gov/28446499/)]. Again, what is true of the association between fruits and vegetables and all-cause mortality and red meat and all-cause mortality, such that we can infer causality for one and not the other?
|
||||
|
||||
>_On the contrary, the absolute risk reductions from both reviews specific to intake versus dietary pattern (Johnston et al., 2019) were very similar in their magnitude of effect, indicating the possibility that, even after adjustment, a multitude of other diet or lifestyle components may be confounding the associations irrespective of whether they are negative or positive (Zeraatkar & Johnston, 2019)._
|
||||
|
||||
**Red herring:**
|
||||
|
||||
This literally just doesn't make any sense. Similar effect sizes are not indicators of multicollinearity or interaction between exposures. I have no idea how the authors come to this conclusion. If I punch people in the face on Mondays and kick people in the balls on Wednesdays, the risk of injury is equal between both Mondays and Wednesdays, but Mondays and Wednesdays aren't the same thing. Just as dietary patterns and individual foods aren't the same thing.
|
||||
|
||||
Just because the contribution of meat and diet/lifestyle factors have similar magnitudes of effect doesn't mean a mutual adjustment would do anything to either effect. Both exposures could be interacting with the outcome without interacting with each other. This is easily one of the most bizarre claims in the entire paper. They're also comparing effect sizes between analyses investigating different populations. It's just unfounded speculation.
|
||||
|
||||
>_While such troubling incongruity can be partially ascribed to differences in methodological set-up between studies, it has been hypothesised that the associations found in the West could at least partially be seen as cultural constructs generated by responses to norms of eating right (Hite, 2018)._
|
||||
|
||||
**Red herring:**
|
||||
|
||||
Again, these associations are seen in populations that are not consuming Westernized diets [[12](https://pubmed.ncbi.nlm.nih.gov/33320898/)]. I'm not entirely sure why the authors seem to believe that these associations are limited to Western populations eating Western diets with Western attitudes toward health.
|
||||
|
||||
>_An important question to consider, therefore, is "whether intake of animal and plant proteins is a marker of overall dietary patterns or of social class" (Naghshi et al., 2020). Upper-middle classes, who are particularly sensitive to the ideologies of eating virtuous, tend to eat less red meat and saturated fat because of what they symbolise, and because of what they are being told by authorities and moralising societal discourse (Leroy & Hite, 2020). However, those same people are also more educated, wealthier, and healthier in general (Leroy & Cofnas, 2020)._
|
||||
|
||||
**Equivocation:**
|
||||
|
||||
Yet again, the authors have shifted their goalpost. They went from animal foods to red meat, from red meat to meat, and now from meat to animal protein. Again, it's unclear if this is intentional or just really atrocious writing on the part of the authors. But, I will attempt to keep my rebuttals relevant to the authors' most recently stated goalpost.
|
||||
|
||||
**Bullshit:**
|
||||
|
||||
These associations are seen even when socioeconomic status are largely balanced across the quantiles of animal protein intake [[14](https://pubmed.ncbi.nlm.nih.gov/33624505/)]. In fact, in this analysis of the Women's Health Initiative Observational Study by Sun et al. (2021), those who consumed the most plant protein were typically in the lower socioeconomic strata. This is in direct opposition to their speculation about socioeconomic status confounding. Additionally, replacing animal protein with plant protein associates with a reduced risk of all-cause mortality even in populations that are situated in a higher socioeconomic stratum [[15](https://pubmed.ncbi.nlm.nih.gov/27479196/)].
|
||||
|
||||
>_Even if multivariable models are used to account for such confounding effects as smoking, alcohol consumption, or obesity, it may not be possible to disentangle the effects of all dietary and lifestyle factors involved, especially given the low certainty of evidence._
|
||||
|
||||
**Potential contradiction:**
|
||||
|
||||
Yet again, we find ourselves needing to ask the authors what is true of the evidence between smoking/alcohol/obesity and health outcomes and animal foods/red meat/meat/animal protein and health outcomes such that we can infer causality for one and not the other? Thus far, the authors have not divulged any clear answers to this question in their paper.
|
||||
|
||||
>_Therefore, WHO (2015) mentions that eating unprocessed red meat "has not yet been established as a cause of cancer” (emphasis added)..._
|
||||
|
||||
**Appeal to authority:**
|
||||
|
||||
Causal inference is an epistemic question, informed and largely adjudicated by statistics. It's rather interesting that the authors tend to offer next to no critical appraisal of methodology or interpretation when the results concord with their (obvious) biases. So far any evidence against animal food consumption as been scrutinized extensively, albeit fallaciously, but the same attempt at rigour is not extended to the counterevidence.
|
||||
|
||||
>_...while IARC (2015) stated that "chance, bias, and confounding could not be ruled out” with respect to the association between red meat intake and colorectal cancer. According to some (e.g., Hite, 2018), nutritional epidemiology of chronic disease is thus at risk of capturing cultural artefacts and health beliefs within observational relationships, rather than reliably quantifying actual health effects. Such observations are then used to reinforce dietary advice, potentially creating a positive feedback loop (Leroy & Hite, 2020)._
|
||||
|
||||
**Red herring:**
|
||||
|
||||
This is true of any association, as per the Duhem-Quine thesis [[16](https://en.wikipedia.org/wiki/Duhem%E2%80%93Quine_thesis)]. Causal inference is a separate consideration, and the fact that auxiliary hypotheses can be proposed is tangential. The authors imply that the ability to appeal to these auxiliary hypotheses presents a barrier to reliably quantifying actual health effects. What type of evidence do they propose needs to be used, then? Because no scientific evidence is free from this limitation.
|
||||
|
||||
>_This problem is further underlined by the lack of support from intervention trials (O’Connor et al., 2017; Turner & Lloyd, 2017; Leroy & Cofnas, 2020), which are designed to account for known and unknown confounders, and the fact that the mechanistic rationale for red meats remains speculative at best (Delgado et al., 2020; Leroy & Barnard, 2020)._
|
||||
|
||||
**Equivocation:**
|
||||
|
||||
The authors' references don't support the claim. Until this point they were discussing the impact of meat products on disease outcomes, not disease risk markers or biochemical mechanisms. However, one of the only studies that did attempt to replace animal foods in the diet also showed one of the largest effect sizes in reducing the risk of acute myocardial infarction [[17](https://pubmed.ncbi.nlm.nih.gov/7911176/)]. On top of that, the most well-controlled human mechanistic studies also support the inference that meat increases CVD risk factors [[18](https://pubmed.ncbi.nlm.nih.gov/31161217/)].
|
||||
|
||||
>_Taken together, various public health organisations make a case for the reduction of animal source foods based on their interpretation of the prevailing scientific evidence. Others, however, argue that conclusive proof for (some of) these recommendations is missing, particularly given the contribution of animal source foods to closing essential micronutrient gaps (Leroy & Barnard, 2020)._
|
||||
|
||||
**Potential contradiction:**
|
||||
|
||||
The authors need to define "conclusive proof", and demonstrate how it has been shown for all variables that they are positing as confounding. However, it's beginning to sound as though they're getting close to planting their goalpost at human experimental evidence. However, this would be a mistake, as they've already posited a number of confounders for which we have no human experimental evidence for causal interaction with the outcomes that have been discussed.
|
||||
|
||||
# NATURAL THO
|
||||
|
||||
>_Arguing for strong reductions contradicts common-sense approaches, especially from an anthropological perspective (Gupta, 2016; Leroy et al., 2020a). Meat, marrow, and seafood are evolutionary components of the human diet, even if they may have displayed some nutritional and biochemical differences compared to what is produced today in intensified operations, e.g., with respect to fat composition (Kuipers et al., 2010; Manzano-Baena & Salguero-Herrera 2018) and the presence of phytochemicals (van Vliet et al., 2021a, and 2021b). The health impact of these differences may be significant but remains difficult to quantify, though polyunsaturated fatty acids/saturated fatty acids and omega 3/6 ratios of wild ruminants living in current times are similar to pasture-raised (grass-fed) beef, but dissimilar to grain-fed beef (Cordain et al., 2002b). Be that as it may, the abundant consumption of animal source foods over 2.5 million years has resulted in an adapted human anatomy, metabolism, and cognitive capacity that is divergent from other apes (Milton, 2003; Mann, 2018). Also, many hunter-gatherer populations consume far larger amounts of meat and other animal source foods (sometimes > 300 kg/p/y), than what is now consumed in the West (around 100 kg/p/y). This is likely still much below what was once valid for early humans preying on megafauna (Ben-Dor & Barkai, 2020). On a caloric basis, the animal:plant ratio of Western diets (about 1:2 in the US; Rehkamp, 2016) is the inverse of most pre-agricultural diets (mean of 2:1; Cordain et al., 2000). Such high amounts of animal source foods are not necessarily indicative of a health advantage, but it can be assumed that animal source foods are at least compatible with good health._
|
||||
|
||||
**Equivocation:**
|
||||
|
||||
Apparently we've gone from talking about animal foods to talking about red meat, from talking about red meat to talking about meat, from talking about meat to talking about animal protein, and now from talking about animal protein to to talking about meat, marrow, and seafood. This is truly astonishing. Especially considering that now they're including seafood, which no major public health institution recommends that we eschew.
|
||||
|
||||
**Appeal to nature:**
|
||||
|
||||
Just because meat is an integral part of our evolutionary history does not actually mean that it is necessarily beneficial for the long-term health of modern humans. In fact, there are valid reasons to suspect that foods to which we are most strongly adapted may actually be more detrimental for long-term health, via antagonistic pleiotropy. I discuss this in a previous blog article [[19](https://www.the-nutrivore.com/post/should-we-eat-like-hunter-gatherers)].
|
||||
|
||||
Appeal to nature fallacies basically affirm that because something is natural (or in this case, "evolutionary"), it then follows that it is good. However, taking this position leads to hilarious consequences. Let me demonstrate by formalizing the authors' position once more.
|
||||
|
||||
![][argument4]
|
||||
[argument4]: /blog/meatapologetics/argument4.png
|
||||
|
||||
It should be obvious straight away why this is problematic. There are plenty of things that are natural or "evolutionary" that we also consider to be undesirable, and we can illustrate that with a reductio ad absurdum.
|
||||
|
||||
![][argument5]
|
||||
[argument5]: /blog/meatapologetics/argument5.png
|
||||
|
||||
If animal foods are good by virtue of them being natural or "evolutionary", the authors will have to explain to me why something like rape is not good. As they share the same property of being evolutionary.
|
||||
|
||||
>_So-called "diseases of modernity" were rare in ancestral communities, in contrast to what is now seen in regions where Western diets rich in energy-dense foods and (sedentary) lifestyles prevail. In the US, 71% of packaged foods are ultraprocessed (Baldridge et al., 2019)..._
|
||||
|
||||
**Red herring:**
|
||||
|
||||
There are a number of epistemic barriers that challenge inferences about the long-term health value of more primitive living conditions for modern humans, such as survivorship bias [[20](https://pubmed.ncbi.nlm.nih.gov/25489027/)]. Primitive cultures tend to have very high rates of infant and child mortality, which modern medicine can rescue. When those children are _not_ saved, the population will appear more robust by weeding out less resilient people. When those children _are_ saved, you increase the number of less resilient people within the population.
|
||||
|
||||
>_Even if this has been described as a "paradox” (Cordain et al., 2002a), it mainly indicates that today’s assumptions about healthy diets, as being de facto low in red meat and saturated fat, are flawed and represent a romanticised Western viewpoint._
|
||||
|
||||
**Strawman:**
|
||||
|
||||
No public health institutions are suggesting that healthy diets are _defined_ by the absence of red meat and saturated fat. Rather, diets lower in red meat and saturated fat tend to be healthier than diets that are higher in red meat and saturated fat. But, this doesn't mean that other factors don't also matter. These dietary patterns have many other characteristics that contribute to healthfulness that have nothing to do with red meat or saturated fat.
|
||||
|
||||
>_To sum up, although animal source foods are primary components of the Western diet, they are also evolutionary foods to which the human body is anatomically and metabolically adapted, up to the level of the microbiome (Sholl et al., 2021), and has always obtained key nutrients from._
|
||||
|
||||
**Appeal to nature:**
|
||||
|
||||
The status of red meat as an evolutionary food is tangential to the question of whether or not red meat increases long-term disease risk in modern populations. Investigations into the health status of primitive cultures is insufficient to inform this question.
|
||||
|
||||
>_Although further research may be needed, their role in chronic diseases could as well be a mere artefact based on association with the actual damage from other dietary and lifestyle factors. It is uncertain yet possible that high intake of red meat could become problematic in a contemporary Western context._
|
||||
|
||||
**Red herring:**
|
||||
|
||||
Again, this is true of any association. Causal inference is a separate consideration, and the fact that auxiliary hypotheses can be proposed is, again, tangential.
|
||||
|
||||
**Potential contradiction:**
|
||||
|
||||
For the last time, posited confounders require validation that meets the authors' bar for causal inference. Thus far, no such bar has been provided and no validation was offered for any of the confounders that were posited. That which is stated without evidence can be dismissed without evidence. Anyone can baselessly speculate.
|
||||
|
||||
# TSIMANE THO
|
||||
|
||||
>_Moreover, contemporary cultures that have maintained traditional diets and lifestyles typically have low burdens of chronic disease (e.g., Kaplan et al., 2017)._
|
||||
|
||||
**Red herring:**
|
||||
|
||||
The authors reference a cross-sectional analysis of the Tsimane population conducted by Kaplan et al. (2017) [[21](https://pubmed.ncbi.nlm.nih.gov/28320601/)]. It's questionable whether or not their results qualify as low burdens of chronic disease for that population in the first place.
|
||||
|
||||
![][image4]
|
||||
[image4]: /blog/meatapologetics/image4.png
|
||||
|
||||
This is made even more questionable after accounting for ~15-year age overestimations that were likely to have biased their results [[22](https://immunityageing.biomedcentral.com/articles/10.1186/s12979-019-0165-8)][[23](https://pubmed.ncbi.nlm.nih.gov/27511193/)][[24](https://pubmed.ncbi.nlm.nih.gov/34038540/)]. After this adjustment, the cardiovascular disease burden within the Tsimane is likely largely comparable with the results of the MESA cohort.
|
||||
|
||||
![][image5]
|
||||
[image5]: /blog/meatapologetics/image5.png
|
||||
|
||||
Here on the chart above we see Tsimane age estimates using DNA methylation on the Y axis, against Tsimane age estimates using the methods of Kaplan et al. on the X axis. Kaplan et al. (2017) estimated the ages of the Tsimane participants using written records, relative age lists, dated events, photo comparisons of people with known ages, and cross-validation of information from independent interviews of kin.
|
||||
|
||||
Apparently such methodology would appear to introduce a fair amount of bias, as the more objective measures of age tend not to agree with them. Furthermore, all of these more robust measures of age seem to point to overestimations on the party of Kaplan et al. that are all roughly in the same ballpark of 10-20 years.
|
||||
|
||||
**Equivocation:**
|
||||
|
||||
The category of "chronic disease" is a superset, including many individual diseases. The only disease endpoint investigated in the authors' reference was cardiovascular disease progression (measured by coronary artery calcification). So, I'm not sure why they feel justified in referring to chronic disease as a broad category with this single reference.
|
||||
|
||||
To wrap this up, I'd just like to say that I've never before seen a peer-reviewed publication that was so densely packed with logical fallacies and inconsistencies. Mind you this is only the first section, related to disease risk. I was only responsible for appraising this section, but from what I've been told about the remainder of the paper it could potentially be even more absurd. Which is scary to me.
|
||||
|
||||
Altogether the authors were guilty of eleven red herrings, six potential contradictions, five equivocations, and eight other assorted fallacies. From what I've read, no truly persuasive arguments were offered in favour of their view, and their attempts to criticize the prevailing paradigm were uniformly hollow and superficial.
|
||||
|
||||
Ultimately, the authors actually describe the absurdity of their approach better than I could in the introduction of their paper. Truly astonishing.
|
||||
|
||||
>_Due to constraints in format, we restrict ourselves to generating a perspective that favours concepts over details and methodological data._
|
||||
|
||||
Thank you for reading! If you like what you've read and want help me create more content like this, consider pledging your [Support](https://www.uprootnutrition.com/donate). Every little bit helps! I hope you found the content interesting!
|
||||
|
||||
# BIBLIOGRAPHY"""
|
||||
, articleReferences =
|
||||
[ { author = "Leroy, Frédéric, et al."
|
||||
, title = "Animal Board Invited Review: Animal Source Foods in Healthy, Sustainable, and Ethical Diets - An Argument against Drastic Limitation of Livestock in the Food System"
|
||||
, journal = "Animal: An International Journal of Animal Bioscience"
|
||||
, year = "2022"
|
||||
, link = "https://doi.org/10.1016/j.animal.2022.100457"
|
||||
}
|
||||
, { author = "Schwingshackl, Lukas, et al."
|
||||
, title = "Evaluating Agreement between Bodies of Evidence from Randomised Controlled Trials and Cohort Studies in Nutrition Research: Meta-Epidemiological Study"
|
||||
, journal = "BMJ (Clinical Research Ed.)"
|
||||
, year = "2021"
|
||||
, link = "https://doi.org/10.1136/bmj.n1864"
|
||||
}
|
||||
, { author = "Moorthy, Denish, et al."
|
||||
, title = "Concordance Between the Findings of Epidemiological Studies and Randomized Trials in Nutrition: An Empirical Evaluation and Citation Analysis: Nutritional Research Series, Vol. 6"
|
||||
, journal = "Agency for Healthcare Research and Quality (US)"
|
||||
, year = "2013"
|
||||
, link = "http://www.ncbi.nlm.nih.gov/books/NBK138246/"
|
||||
}
|
||||
, { author = "Beyerbach, Jessica, et al."
|
||||
, title = "Evaluating Concordance of Bodies of Evidence from Randomized Controlled Trials, Dietary Intake, and Biomarkers of Intake in Cohort Studies: A Meta-Epidemiological Study"
|
||||
, journal = "Advances in Nutrition (Bethesda, Md.)"
|
||||
, year = "2022"
|
||||
, link = "https://doi.org/10.1093/advances/nmab095"
|
||||
}
|
||||
, { author = "Schwingshackl, Lukas, et al."
|
||||
, title = "Food Groups and Risk of All-Cause Mortality: A Systematic Review and Meta-Analysis of Prospective Studies"
|
||||
, journal = "The American Journal of Clinical Nutrition"
|
||||
, year = "2017"
|
||||
, link = "https://doi.org/10.3945/ajcn.117.153148"
|
||||
}
|
||||
, { author = "Bechthold, Angela, et al."
|
||||
, title = "Food Groups and Risk of Coronary Heart Disease, Stroke and Heart Failure: A Systematic Review and Dose-Response Meta-Analysis of Prospective Studies"
|
||||
, journal = "Critical Reviews in Food Science and Nutrition"
|
||||
, year = "2019"
|
||||
, link = "https://doi.org/10.1080/10408398.2017.1392288"
|
||||
}
|
||||
, { author = "Schwingshackl, Lukas, et al."
|
||||
, title = "Food Groups and Risk of Type 2 Diabetes Mellitus: A Systematic Review and Meta-Analysis of Prospective Studies"
|
||||
, journal = "European Journal of Epidemiology"
|
||||
, year = "2017"
|
||||
, link = "https://doi.org/10.1007/s10654-017-0246-y"
|
||||
}
|
||||
, { author = "Abdullah, Shuaib M., et al."
|
||||
, title = "Long-Term Association of Low-Density Lipoprotein Cholesterol With Cardiovascular Mortality in Individuals at Low 10-Year Risk of Atherosclerotic Cardiovascular Disease"
|
||||
, journal = "Circulation"
|
||||
, year = "2018"
|
||||
, link = "https://doi.org/10.1161/CIRCULATIONAHA.118.034273"
|
||||
}
|
||||
, { author = "Vernooij, Robin W. M., et al."
|
||||
, title = "Patterns of Red and Processed Meat Consumption and Risk for Cardiometabolic and Cancer Outcomes: A Systematic Review and Meta-Analysis of Cohort Studies"
|
||||
, journal = "Annals of Internal Medicine"
|
||||
, year = "2019"
|
||||
, link = "https://doi.org/10.7326/M19-1583"
|
||||
}
|
||||
, { author = "Rohrmann, Sabine, et al."
|
||||
, title = "Meat Consumption and Mortality--Results from the European Prospective Investigation into Cancer and Nutrition"
|
||||
, journal = "BMC Medicine"
|
||||
, year = "2013"
|
||||
, link = "https://doi.org/10.1186/1741-7015-11-63"
|
||||
}
|
||||
, { author = "Mihrshahi, Seema, et al."
|
||||
, title = "Vegetarian Diet and All-Cause Mortality: Evidence from a Large Population-Based Australian Cohort - the 45 and Up Study"
|
||||
, journal = "Preventive Medicine"
|
||||
, year = "2017"
|
||||
, link = "https://doi.org/10.1016/j.ypmed.2016.12.044"
|
||||
}
|
||||
, { author = "Saito, Eiko, et al."
|
||||
, title = "Association between Meat Intake and Mortality Due to All-Cause and Major Causes of Death in a Japanese Population"
|
||||
, journal = "PloS One"
|
||||
, year = "2020"
|
||||
, link = "https://doi.org/10.1371/journal.pone.0244007"
|
||||
}
|
||||
, { author = "Lo, Jamie J., et al."
|
||||
, title = "Association between Meat Consumption and Risk of Breast Cancer: Findings from the Sister Study"
|
||||
, journal = "International Journal of Cancer"
|
||||
, year = "2020"
|
||||
, link = "https://doi.org/10.1002/ijc.32547"
|
||||
}
|
||||
, { author = "Sun, Yangbo, et al."
|
||||
, title = "Association of Major Dietary Protein Sources With All-Cause and Cause-Specific Mortality: Prospective Cohort Study"
|
||||
, journal = "Journal of the American Heart Association"
|
||||
, year = "2021"
|
||||
, link = "https://doi.org/10.1161/JAHA.119.015553"
|
||||
}
|
||||
, { author = "Song, Mingyang, et al."
|
||||
, title = "Association of Animal and Plant Protein Intake With All-Cause and Cause-Specific Mortality"
|
||||
, journal = "JAMA Internal Medicine"
|
||||
, year = "2016"
|
||||
, link = "https://doi.org/10.1001/jamainternmed.2016.4182"
|
||||
}
|
||||
, { author = "Duhem–Quine Thesis"
|
||||
, title = "Duhem–Quine Thesis"
|
||||
, journal = "Wikipedia"
|
||||
, year = "2022"
|
||||
, link = "https://en.wikipedia.org/w/index.php?title=Duhem%E2%80%93Quine_thesis&oldid=1065410241"
|
||||
}
|
||||
, { author = "de Lorgeril, M., et al."
|
||||
, title = "Mediterranean Alpha-Linolenic Acid-Rich Diet in Secondary Prevention of Coronary Heart Disease"
|
||||
, journal = "Lancet (London, England)"
|
||||
, year = "1994"
|
||||
, link = "https://doi.org/10.1016/s0140-6736(94)92580-1"
|
||||
}
|
||||
, { author = "Bergeron, Nathalie, et al."
|
||||
, title = "Effects of Red Meat, White Meat, and Nonmeat Protein Sources on Atherogenic Lipoprotein Measures in the Context of Low Compared with High Saturated Fat Intake: A Randomized Controlled Trial"
|
||||
, journal = "The American Journal of Clinical Nutrition"
|
||||
, year = "2019"
|
||||
, link = "https://doi.org/10.1093/ajcn/nqz035"
|
||||
}
|
||||
, { author = "Hiebert, Nick"
|
||||
, title = "Should Modern Humans Eat Like Hunter-Gatherers?"
|
||||
, journal = "The Nutrivore"
|
||||
, year = "2021"
|
||||
, link = "https://www.the-nutrivore.com/post/should-we-eat-like-hunter-gatherers."
|
||||
}
|
||||
, { author = "Perrin, James M., et al."
|
||||
, title = "The Rise in Chronic Conditions among Infants, Children, and Youth Can Be Met with Continued Health System Innovations"
|
||||
, journal = "Health Affairs (Project Hope)"
|
||||
, year = "2014"
|
||||
, link = "https://doi.org/10.1377/hlthaff.2014.0832"
|
||||
}
|
||||
, { author = "Kaplan, Hillard, et al."
|
||||
, title = "Coronary Atherosclerosis in Indigenous South American Tsimane: A Cross-Sectional Cohort Study"
|
||||
, journal = "Lancet (London, England)"
|
||||
, year = "2017"
|
||||
, link = "https://doi.org/10.1016/S0140-6736(17)30752-3"
|
||||
}
|
||||
, { author = "Li, Mingde, et al."
|
||||
, title = "Age Related Human T Cell Subset Evolution and Senescence"
|
||||
, journal = "Immunity & Ageing"
|
||||
, year = "2019"
|
||||
, link = "https://doi.org/10.1186/s12979-019-0165-8"
|
||||
}
|
||||
, { author = "Horvath, Steve, et al."
|
||||
, title = "An Epigenetic Clock Analysis of Race/Ethnicity, Sex, and Coronary Heart Disease"
|
||||
, journal = "Genome Biology"
|
||||
, year = "2016"
|
||||
, link = "https://doi.org/10.1186/s13059-016-1030-0"
|
||||
}
|
||||
, { author = "Irimia, Andrei, et al."
|
||||
, title = "The Indigenous South American Tsimane Exhibit Relatively Modest Decrease in Brain Volume With Age Despite High Systemic Inflammation"
|
||||
, journal = "The Journals of Gerontology. Series A, Biological Sciences and Medical Sciences"
|
||||
, year = "2021"
|
||||
, link = "https://doi.org/10.1093/gerona/glab138"
|
||||
}
|
||||
]
|
||||
}
|
||||
332
packages/website/frontend/src/Config/Pages/Blogs/MainBlog/NagraGoodrich.elm
Executable file
332
packages/website/frontend/src/Config/Pages/Blogs/MainBlog/NagraGoodrich.elm
Executable file
|
|
@ -0,0 +1,332 @@
|
|||
module Config.Pages.Blogs.MainBlog.NagraGoodrich exposing (articleNagraGoodrich)
|
||||
|
||||
import Config.Pages.Blogs.Types exposing (BlogArticle)
|
||||
import Route.Path as Path
|
||||
|
||||
|
||||
articleNagraGoodrich : BlogArticle
|
||||
articleNagraGoodrich =
|
||||
{ articleName = "Grading Tucker Goodrich: A Lesson in Debate Etiquette"
|
||||
, articleLink = Path.toString Path.Blog_Nagragoodrich
|
||||
, articleAuthor = "Nick Hiebert"
|
||||
, isNewTabLink = False
|
||||
, hasReferences = False
|
||||
, hasTableOfContents = True
|
||||
, articleImage = "nagragoodrich"
|
||||
, articlePublished = "May 12, 2022"
|
||||
, articleBody = """
|
||||
Back in August of 2021, I invited [Tucker Goodrich](https://twitter.com/TuckerGoodrich) to a debate about the health value of seed oils. Tucker agreed to participate immediately, but after a brief back-and-forth (which resulted in Tucker [contradicting himself](https://twitter.com/The_Nutrivore/status/1428064287059324929?s=20&t=rmYpT72-5Tan31MnU_ptlw)), he eventually [withdrew](https://twitter.com/TuckerGoodrich/status/1428062578668830720?s=20&t=rmYpT72-5Tan31MnU_ptlw) without an explicit justification. Shortly thereafter he wrote a [blog article](https://yelling-stop.blogspot.com/2021/12/thoughts-on-nick-hieberts-comprehensive.html), wherein he paints a caricature of the events that transpired, which included everything from exaggerations to full-throated lies. Despite this, I reinvited him to debate multiple times since the incident, with either no response or outright refusals in reply.
|
||||
|
||||
My initial invitation was prompted by my discovery that Tucker was actually just straight up [fabricating evidence](https://twitter.com/The_Nutrivore/status/1489863311155810304?s=20&t=DhYUMrwmqG260Ft7uNHozg) in a debate with a friend of mine, [Alan Flanagan](https://www.alineanutrition.com/about/). Needless to say, Tucker appears to be a particularly dishonest actor and a coward. When he wants to engage with me he does so in the safety of his blog, and critiques my writings and public statements with strawman arguments and red herrings, as well as just attacking very low-hanging fruit. At this point I don't think it's unfair to speculate that he conducts himself in this manner because he knows his arguments would not withstand scrutiny in a debate against me.
|
||||
|
||||
Recently I was invited to set the record straight and shed some light on some of Tucker's more misleading claims on [Mark Bell's Power Project](https://www.youtube.com/watch?v=omzCi2CGoxo). Naturally Tucker felt compelled to write [a response](http://yelling-stop.blogspot.com/2022/02/thoughts-on-nick-hiebert-on-mark-bells.html) that was also particularly low-level and ultimately did not provide any stable defeaters for any of my positions. That didn't stop him from writing the article as though my arguments had been thoroughly dispatched, despite his counterarguments not even meaningfully interacting with what I had said to begin with.
|
||||
|
||||
At this point I figured that enough was enough. So, I contacted an acquaintance of mine (who through this whole ordeal would become a friend), [Matthew Nagra](https://drmatthewnagra.com). I knew Matt was experienced in empirical debate and didn't hold any whacky heterodox views about seed oils, so I asked him if he'd be interested in debating Tucker. Matt agreed and promptly extended an invitation to Tucker. After Tucker agreed to a debate against Matt on [Simon Hill](https://twitter.com/theproof)'s [podcast](https://theproof.com/podcast/), it was time to get to work. With some help from [Matthew Madore](https://twitter.com/MattMadore576) over at [My Nutrition Science](https://www.mynutritionscience.com/authors-page/), we developed about 200 pages worth of debate-prep, syllogisms, and dialogue trees over approximately six weeks.
|
||||
|
||||
As you will see throughout this article, our hard work paid off in the sweetest way possible. Matt was able to tease an absolutely enormous amount of dodges, strawman arguments, and straight up contradictions out of Tucker. It was more than any of us could have hoped for, and it truly reveals just how weak Tucker's arguments really are. The number of self-defeating bullets Tucker tried to bite in order to stay ahead in the debate was exquisite— a true treat. All in all, I'm very pleased with the results. Matt did a truly phenomenal job. Enjoy!
|
||||
|
||||
# DEBATE
|
||||
|
||||
Let's start. Tucker and Matt both agree to the following:
|
||||
|
||||
**Debate Rules:**
|
||||
|
||||
1) The debate will be open and conversation-style.
|
||||
|
||||
2) Both parties will avoid talking over one another.
|
||||
|
||||
3) Both parties must answer questions directly.
|
||||
|
||||
4) Both parties will make and address one claim at a time.
|
||||
|
||||
5) Both parties will refrain from using personal insults.
|
||||
|
||||
6) Both parties will provide adequate time for response.
|
||||
|
||||
**Matt's Debate Proposition:**
|
||||
|
||||
>_It is more reasonable to believe that seed oils are beneficial, rather than harmful, for coronary heart disease risk._
|
||||
|
||||
**Tucker's Definition of Seed Oils:**
|
||||
|
||||
>_Oils made from seeds, like canola oil, soybean oil, sunflower oil, etc. Not the fleshy part of the fruit, like olive oil, palm oil, avocado oil, or coconut oil. With the primary focus being high linoleic acid oils._
|
||||
|
||||
# NUTRITIONAL EPIDEMIOLOGY
|
||||
|
||||
**Rule violation (**[**30:20**](https://youtu.be/5nZSV-DyVRM?t=1820)**,** [**30:38**](https://youtu.be/5nZSV-DyVRM?t=1838)**):**
|
||||
|
||||
Tucker breaks rule three twice. Matt provides evidence from three independent analyses that shows a concordance rate of 65-67% between nutritional epidemiology and nutritional randomized controlled trials (RCTs). Matt then asks Tucker if nutritional epidemiological evidence is concordant with nutritional RCTs two thirds of the time, which is a yes or no question. Tucker responds by saying its irrelevant due to being a tangent. However, it's not clear exactly how Matt's question is an irrelevant tangent, since it directly interacts with Tucker's opening claim at the beginning of the debate.
|
||||
|
||||
**Strawman (**[**32:09**](https://youtu.be/5nZSV-DyVRM?t=1929)**):**
|
||||
|
||||
Tucker finally answers "no" in response to Matt's question. When Matt asks why not, Tucker responds by saying "it's just a meta-analysis", which doesn't provide us with any clarity on why he provided the answer that he did. Tucker further elaborates with a strawman of Matt's position, stating that the data provided by Matt doesn't provide us with any information about the likelihood of a high-LA intervention being beneficial. However, this wasn't Matt's point. Matt's point was that Tucker's characterization of nutritional epidemiology on the whole was a red herring and false.
|
||||
|
||||
# MINNESOTA CORONARY EXPERIMENT
|
||||
|
||||
**Rule violation (**[**37:24**](https://youtu.be/5nZSV-DyVRM?t=2239)**):**
|
||||
|
||||
Tucker breaks rule three for the third time. Matt shows Tucker the power calculation from MCE, and demonstrates that the trial was actually underpowered. Matt then asks Tucker if the trial had adequate power. Tucker again says that the question is irrelevant, stating that when a trial shows harm, it shouldn't be discounted based on a P-value. This is a truly bizarre answer, as Matt has yet to discount the trial.
|
||||
|
||||
**Rule violation (**[**38:50**](https://youtu.be/5nZSV-DyVRM?t=2330)**):**
|
||||
|
||||
Tucker breaks rule four. Instead of resolving Matt's point about MCE, Tucker wants to pivot to the LA Veterans Administration Hospital Trial (LAVAT).
|
||||
|
||||
**Rule violation (**[**43:20**](https://youtu.be/5nZSV-DyVRM?t=2600)**):**
|
||||
|
||||
Tucker breaks rule three for the fourth time. Matt presents a subgroup analysis from MCE that shows that older subjects who maintained the intervention diet for more one year tended to see a benefit when compared to the control diet. Matt asks Tucker if the older subjects in MCE who were consuming the intervention diet for longer saw a benefit compared to the control diet. Tucker rejects the question, saying that Matt is citing a "sub-population" analysis, and that it is superseded by the total outcome. This answer doesn't interact with Matt's question.
|
||||
|
||||
**Rule violation (**[**42:56**](https://youtu.be/5nZSV-DyVRM?t=2576)**,** [**43:30**](https://youtu.be/5nZSV-DyVRM?t=2610)**):**
|
||||
|
||||
Tucker breaks rule three for the fifth time. Matt rephrases his question, asking Tucker if harm would be more likely if subjects were to maintain the intervention diet for a longer period of time as opposed to a shorter period of time in MCE. Tucker again, dismisses a yes-or-no question as being irrelevant without any clarifying explanation.
|
||||
|
||||
**Rule violation (**[**44:06**](https://youtu.be/5nZSV-DyVRM?t=2646)**):**
|
||||
|
||||
Tucker breaks rule two. Matt wants to elaborate on why his question is important, but Tucker cuts him off. Matt allows it, but Tucker shouldn't have done it to begin with.
|
||||
|
||||
**Rule violation (**[**48:18**](https://youtu.be/5nZSV-DyVRM?t=2898)**):**
|
||||
Tucker breaks rule one and three. Tucker attempts an explanation for why MCE showed benefit for older subjects over two years. When Matt asks for further clarification, Tucker refuses to provide it. Not only is this directly dodging a question, this behaviour also calls into question whether or not Tucker is actually there for an open, conversation-style debate.
|
||||
|
||||
**Rule violation (**[**49:07**](https://youtu.be/5nZSV-DyVRM?t=2947)**):**
|
||||
|
||||
Tucker breaks rule four again. Instead of resolving Matt's point about MCE, Tucker wants to pivot to the Oslo Diet-Heart Study (ODHS).
|
||||
|
||||
|
||||
**Strawman (**[**50:34**](https://youtu.be/5nZSV-DyVRM?t=3034)**):**
|
||||
|
||||
Tucker offers a strawman of Matt's position, claiming that Matt's conclusions were based on ODHS. In fact, Matt's position was not based on ODHS, and Matt even said that the evidence underpinning his position is virtually the same if ODHS is omitted completely.
|
||||
|
||||
**Strawman (**[**51:52**](https://youtu.be/oYsRgsJoZc4?t=3112)**):**
|
||||
|
||||
Tucker offers a strawman of Matt's position, claiming that the composition of fats in margarines would need to be known in order to conclude that trans-fats (TFA) were confounding in MCE. This isn't Matt's position. Matt's position was that TFA confounding is likely based on two pieces of evidence. Firstly, the vast majority of margarines during that time period contained TFA. Secondly, there was disagreement between the observed cholesterol changes and the predicted cholesterol changes in MCE. From these data Matt infers that TFA confounding was likely, which is merely a truism that can be soundly inferred a priori. Matt doesn't conclude that TFA confounding did in fact occur. He merely takes the position that is likely.
|
||||
|
||||
**Rule violation (**[**55:27**](https://youtu.be/oYsRgsJoZc4?t=3327)**):**
|
||||
|
||||
Tucker breaks rule three. Matt asks Tucker if he thinks that a cooking oil with 1% TFA would be equivalent to a cooking oil with 15% TFA, which is a yes or no question. Tucker responds by saying that TFA confounding would have to be a systematic issue across all of the RCTs using Matt's assumptions. However, this doesn't interact with Matt's question.
|
||||
|
||||
**Rule violation (**[**1:02:00**](https://youtu.be/oYsRgsJoZc4?t=3720)**):**
|
||||
|
||||
Tucker breakers rule three again. Tucker cites a result from the LAVAT that is incongruent with Matt's figures, so Matt asks him what Tucker's figure is representing. After Matt finishes explaining the incongruency, he asks Tucker where he is getting the number from. Instead of answering, Tucker just asks him what his point is.
|
||||
|
||||
**Potential contradiction (**[**1:08:00**](https://youtu.be/oYsRgsJoZc4?t=4080)**):**
|
||||
|
||||
Tucker concedes that LAVAT showed a slight benefit for vegetable oils compared to animal fats. However, earlier he characterized MCE as showing "harm", but it wasn't qualified as slight. However, LAVAT showed a statistically significant 49% increase in CVD mortality risk in the control group, but MCE showed a non-significant 24% increase in CVD mortality risk in the intervention group. If a non-significant 24% increase in CVD mortality is noteworthy in Tucker's view, why is a statistically significant 49% increase in CVD mortality risk only slight in his view as well?
|
||||
|
||||
Without further elaboration, would have to either accept that the increase in CVD mortality in LAVAT is noteworthy, or accept that the CVD mortality increase in MCE is at least just as unnoteworthy as LAVAT, if he wishes to stay consistent. We can syllogize the logical entailments of accepting the CVD mortality risk in MCE as "not slight" like this:
|
||||
|
||||
![][argument1]
|
||||
[argument1]: /blog/nagragoodrich/argument1.png
|
||||
|
||||
# LA VETERANS ADMINISTRATION HOSPITAL STUDY
|
||||
|
||||
**Rule violation (**[**1:08:22**](https://youtu.be/oYsRgsJoZc4?t=4102)**,** [**1:08:34**](https://youtu.be/oYsRgsJoZc4?t=4114)**):**
|
||||
|
||||
Tucker breaks rule three two more times. Matt presented data from LAVAT that divulged that the intervention diet resulted in statistically significant benefits to CVD mortality and all-cause mortality. Matt asked Tucker if he though the data shows that the intervention diet in LAVAT resulted in a benefit to CVD mortality and all-cause mortality, which is again a yes or no question. First, Tucker dismisses the question, saying that LAVAT also saw an increase in cancer. When Matt asks again, Tucker says that he doesn't agree that studies can be "sliced and diced", which doesn't interact with Matt's question.
|
||||
|
||||
**Rule violation (**[**1:10:44**](https://youtu.be/oYsRgsJoZc4?t=4244)**,** [**1:14:22**](https://youtu.be/oYsRgsJoZc4?t=4462)**):**
|
||||
|
||||
Tucker breaks rule four two more times. Instead of resolving Matt's point about LAVAT, Tucker tries to pivot to talking about the standard American diet (SAD), which is tangential to the claim being discussed at that moment. When asked again, Tucker responds by talking about rates of acute myocardial infarction (AMI) in Africans, which is also tangential to the claim being discussed at that moment.
|
||||
|
||||
**Rule violation (**[**1:18:03**](https://youtu.be/QGNNsiINehI?t=4683)**):**
|
||||
|
||||
Tucker breaks rule three yet again. Matt attempts an internal critique by asking if Tucker would believe that adding vegetable oils to the SAD would be a benefit, based on the results of LAVAT. Tucker replies by saying that Lee Hooper would conclude that there is little to no benefit. A truly bizarre reply that doesn't interact with Matt's question at all.
|
||||
|
||||
**Potential contradiction (**[**1:21:11**](https://youtu.be/QGNNsiINehI?t=4871)**):**
|
||||
|
||||
Matt responds to ecological data that Tucker presented earlier, stating that he disagrees with the notion that it can be used to determine independent effects of seed oils. Tucker denies that he is making such a claim, and clarifies that he is speculating off that data. However, earlier in the debate Tucker objected to Matt's speculation regarding TFA confounding in MCE. Why is it OK for Tucker to submit speculation as evidence but not OK for Matt to submit speculation as evidence?
|
||||
|
||||
Without further elaboration, it's unclear why Tucker would not be OK with a priori inferences about the potentially confounding effects of TFA in MCE being used in debate, when he also relies on such a priori inferences. Such as when he infers from ecological data that seed oils are likely to be detrimental. We can syllogize the logical entailments of accepting the use of a priori inferences in debate like this:
|
||||
|
||||
![][argument2]
|
||||
[argument2]: /blog/nagragoodrich/argument2.png
|
||||
|
||||
# LYON DIET-HEART STUDY
|
||||
|
||||
**Rule violation (**[**1:32:15**](https://youtu.be/QGNNsiINehI?t=5535)**):**
|
||||
|
||||
Tucker breaks rule four once more. At this point, both are discussing Lyon Diet-Heart Study (LDHS), and the differential effects of the various dietary modifications that were made in that study, such as the reduction in LA. Matt takes the position that it is unlikely the the 73% reduction in AMI risk seen in LDHS is attributable to LA-reduction due to many other dietary variables changing alongside the reduction in LA. Tucker takes the position that reduction in LA explains the majority of the effect. Instead of resolving Matt's point about LDHS, Tucker wants to pivot to discussing the mechanisms of atherosclerosis.
|
||||
|
||||
**Potential contradiction (**[**1:35:45**](https://youtu.be/QGNNsiINehI?t=5745)**):**
|
||||
|
||||
Tucker holds the view that alpha-linolenic acid reduces risk, but he also holds the view that risk is mediated solely by LA-specific metabolites. However, this is true of all non-LA fatty acids. If the metabolites that confer harm are LA-specific, then shouldn't all non-LA fatty acids be equally non-atherogenic? He tries to reconcile this by saying that ALA "blocks" the negative effects of LA. Does that mean that ALA is an antioxidant? Does the mean that ALA detoxifies LA-specific metabolites somehow? He offers no further explanation.
|
||||
|
||||
**Rule violation (**[**1:47:53**](https://youtu.be/QGNNsiINehI?t=6473)**):**
|
||||
|
||||
Tucker breaks both rule two and rule six. In response to an objection from Tucker, Matt wanted to ask a question so that he could have specific clarity on Tucker's position, but Tucker cut Matt off before Matt could ask.
|
||||
|
||||
# LOW DENSITY LIPOPROTEINS
|
||||
|
||||
**Potential contradiction (**[**1:39:20**](https://youtu.be/QGNNsiINehI?t=5960)**):**
|
||||
|
||||
Matt uses one of Tucker's references to present an internal critique. The reference appears to contradict Tucker's model of CVD by stating that hyperlipidemia is sufficient to explain the development of CVD in all its manifestations. Tucker objects to this, saying that the paper is referring to the "genetic hypothesis" of CVD, which involves CVD risk being conferred via genetically mediated concentrations of LDL. Tucker elaborates by stating that if the hypothesis were true, there wouldn't be observable differences in CVD rates between people with the same genetic background between different environments. This appears to be discounting the possibility that LDL can vary between individuals within a genetically homogenous group. Yet, here he affirms that environmental factors like dietary modification can affect LDL levels.
|
||||
|
||||
**Strawman (**[**1:49:00**](https://youtu.be/QGNNsiINehI?t=6540)**):**
|
||||
|
||||
Matt claims that oxidation of LDL is virtually inevitable after LDL are irreversibly retained within the subendothelial space. Tucker objects, saying it is not inevitable. Matt asks for clarification, requesting evidence that oxidation can be abolished in the subendothelial space. Tucker informs Matt that the fat composition of the diet can influence LDL oxidation rates. After Matt tells Tucker that this isn't what he's asking about, Tucker insists that this is indeed what Matt is asking about, without any further explanation.
|
||||
|
||||
**Potential contradiction (**[**1:53:46**](https://youtu.be/QGNNsiINehI?t=6826)**):**
|
||||
|
||||
Tucker correctly states that the LA-derived metabolite, malondialdehyde (MDA), is responsible for oxidative modification of LDL particles. However, he also states that ALA can produce this metabolite as well. If Tucker's position is that MDA-mediated oxidative modification of LDL particles initiates CVD, then why would it matter if an intervention involves both LA and ALA? At **58:32**, Tucker states that the inclusion of ALA confounded LAVAT.
|
||||
|
||||
If Tucker wants to remain consistent, he'll have to explain why the atherogenic properties of ALA that are entailed from his stated position don't seem to matter. He seems to singling out LA based on characteristics that he admits are shared by ALA. Without further elaboration, Tucker should have to accept ALA as atherogenic, and the reasoning can be syllogized like this:
|
||||
|
||||
![][argument3]
|
||||
[argument3]: /blog/nagragoodrich/argument3.png
|
||||
|
||||
**Direct contradiction (2:18:19):**
|
||||
|
||||
Tucker directly contradicts himself when he suggests that corn oil is not a seed oil. At **1:43:50**, he cited two primary interventions that demonstrate that seed oils produce harm, but the sole oil used in those trials was corn oil.
|
||||
|
||||
![][argument4]
|
||||
[argument4]: /blog/nagragoodrich/argument4.png
|
||||
|
||||
# TUCKER CONCEDES
|
||||
|
||||
**Potential contradiction (**[**2:09:08**](https://youtu.be/QGNNsiINehI?t=7748)**):**
|
||||
|
||||
Tucker again concedes that LAVAT showed a "fairly small" benefit of vegetable oils compared to animal fats. Earlier in the debate, Tucker stated that other trials such as MCE as showed "harm". However, LAVAT showed a statistically significant 49% increase in CVD mortality risk in the control group, but MCE showed a non-significant 24% increase in CVD mortality risk in the intervention group. If a non-significant 24% increase in CVD mortality is noteworthy in Tucker's view, why is a statistically significant 49% increase in CVD mortality risk only "fairly small" in Tucker's view as well?
|
||||
|
||||
**Rule violation (**[**2:10:08**](https://youtu.be/QGNNsiINehI?t=7808)**,** [**2:10:41**](https://youtu.be/QGNNsiINehI?t=7841)**):**
|
||||
|
||||
Tucker breaks rule three another three times. After Tucker implies that the benefits seen in LAVAT are inconsequential, Matt once again presents the findings of LAVAT. Matt asks Tucker if he believes that a 33% reduction to all-cause mortality and a 35% reduction to CVD mortality is "small", which is a yes or no question. Rather than answering, Tucker starts talking about Christopher Ramsden's meta-analysis. When Matt asks again, Tucker continues talking about the Ramsden meta-analysis.
|
||||
|
||||
**Rule violation (**[**2:10:52**](https://youtu.be/QGNNsiINehI?t=7852)**):**
|
||||
|
||||
Tucker breaks rule one again. Matt attempts to explain what his question for Tucker is, but Tucker mind-reads and tries to tell Matt what he means instead of listening.
|
||||
|
||||
**Direct contradiction (**[**2:10:59**](https://youtu.be/QGNNsiINehI?t=7859)**):**
|
||||
|
||||
Tucker objects to Matt's use of LAVAT to demonstrate a potential benefit of seed oils, saying that "you can't take one single RCT and prove an effect". However, this is the exact manner in which Tucker relies on LDHS to demonstrate the benefits of LA reduction in the context of high ALA. There is no other study that included such an intervention.
|
||||
|
||||
Without additional clarification, Tucker would need to reject his own reliance on LDHS to prove the effect of LA-reduction in the context of an ALA-rich diet. Such an entailment can be syllogized like this:
|
||||
|
||||
![][argument5]
|
||||
[argument5]: /blog/nagragoodrich/argument5.png
|
||||
|
||||
**Rule violation (**[**2:13:03**](https://youtu.be/QGNNsiINehI?t=7983)**):**
|
||||
|
||||
In an astonishing feat, Tucker breaks rules two, four, five, and six all at the same time. Rather than engaging with Matt's question about the clinical significance of the LAVAT results, Tucker dodges by attacking Matt's intellectual integrity. When Matt attempts to interject, Tucker cuts Matt off, attempting to pivot to discussing meta-analyses despite agreeing to systematically discuss the relevant trials one by one.
|
||||
|
||||
**Strawman (**[**2:14:21**](https://youtu.be/QGNNsiINehI?t=8061)**):**
|
||||
|
||||
Tucker finishes his rant by suggesting that the LAVAT results don't show that increasing seed oils can "reduce heart disease by 30%", which was not at all what Matt was suggesting. All Matt asked Tucker was whether or not Tucker believed that the effects observed in LAVAT were small.
|
||||
|
||||
**Strawman (**[**2:14:33**](https://youtu.be/QGNNsiINehI?t=8073)**):**
|
||||
|
||||
Tucker claims that Matt agreed that you cannot "prove" something based on one study, and in fact meta-analysis is required for proof. Matt never committed himself to such a concept for causal inference. This is a truly bizarre move on Tucker's part.
|
||||
|
||||
# HOOPER 2020 META-ANALYSIS
|
||||
|
||||
**Rule violation (**[**2:16:32**](https://youtu.be/QGNNsiINehI?t=8192)**):**
|
||||
|
||||
Tucker breaks rules two and six again. Now discussing the paper by Hooper et al. (2020), Tucker asks Matt where in the paper can the evidence for his claims be found. Matt attempts to respond, but Tucker cuts Matt off again by asking the exact same question he just asked, but with a slightly more crazed inflection.
|
||||
|
||||
**Rule violation (**[**2:19:30**](https://youtu.be/QGNNsiINehI?t=8370)**,** [**2:19:38**](https://youtu.be/QGNNsiINehI?t=8378)**,** [**2:19:45**](https://youtu.be/QGNNsiINehI?t=8385)**):**
|
||||
|
||||
Tucker breaks rule three three more times. Tucker criticizes the Hooper (2020) meta-analysis by stating that the analysis found "little to no effect" of reducing saturated fat on CVD mortality. Not only is this tangential, but Matt humours the objection long enough to make the point that events is a much more sensitive endpoint than mortality, and events is where the benefit can be seen. Matt follows up by asking Tucker if he thinks reducing total CVD events is beneficial if all else was held equal, which is a simple yes or no question. Rather than answering, Tucker starts painting a caricature of Matt's question instead. When it is clear that Matt is not getting a straight answer, the moderator interjects and allows the yes-or-no question to be asked again. Again, Tucker dodges.
|
||||
|
||||
**Direct contradiction (**[**2:21:19**](https://youtu.be/QGNNsiINehI?t=8479)**):**
|
||||
|
||||
Tucker takes the position that silent and non-fatal AMIs are not important outcomes and we need not care about them. Yet, at [**1:16:22**](https://youtu.be/QGNNsiINehI?t=4582), Tucker makes it clear that silent and non-fatal AMIs are important and that we should care about them.
|
||||
|
||||
This one is pretty straight forward. Either silent and non-fatal AMIs are important and we should care about them, or they are not important and we shouldn't care about them. If Tucker wishes to remain consistent while also preserving his own arguments, we'd need to accept that silent and non-fatal AMIs are important, and that we should care about them. This entailment can by syllogized like this:
|
||||
|
||||
![][argument6]
|
||||
[argument6]: /blog/nagragoodrich/argument6.png
|
||||
|
||||
**Rule violation (**[**2:25:20**](https://youtu.be/QGNNsiINehI?t=8720)**):**
|
||||
|
||||
Tucker breaks rule four for the seventh time. After agreeing to discuss the results of Hooper (2020), Tucker suddenly attempts to steer the debate toward some sort of meta-level discussion about seed oil consumption in the general population.
|
||||
|
||||
**Rule violation (**[**2:30:31**](https://youtu.be/QGNNsiINehI?t=9031)**):**
|
||||
|
||||
Tucker breaks both rules four and six. The moderator poses a question to both Matt and Tucker, and gets a satisfactory answer from both Matt and Tucker. However, rather than returning the floor to the moderator or continuing with the debate, Tucker takes the opportunity to address points that Matt hasn't even made yet in the debate, and doesn't give Matt any amount of time to respond.
|
||||
|
||||
**Rule violation (**[**2:37:06**](https://youtu.be/QGNNsiINehI?t=9426)**):**
|
||||
|
||||
Tucker breaks rules two and four again. The moderator recognizes that Tucker's incoherent flow-of-consciousness monologue has been going on for nearly ten minutes, and the moderator tries to interject. Tucker cuts the moderator off and proceeds to ramble about vitamin E for another minute.
|
||||
|
||||
# ECOLOGICAL STUDIES
|
||||
|
||||
**Rule violation (**[**2:38:42**](https://youtu.be/QGNNsiINehI?t=9522)**):**
|
||||
|
||||
Tucker can't help but break rule four again. Tucker interjects, before Matt can even finish a single sentence, in order to tell Matt that ecological studies are the worst form of epidemiology. At this point it is fair to say that Tucker is breaking rule one as well. It's clear that Tucker is no longer here for an "open, conversation-style" debate.
|
||||
|
||||
**Direct contradiction (**[**2:38:50**](https://youtu.be/QGNNsiINehI?t=9530)**):**
|
||||
|
||||
Tucker takes the position that ecological studies are of critical importance, superseding all other forms of epidemiology. Yet, only moments earlier, Tucker took the position that ecological studies are the worst form of epidemiological evidence.
|
||||
|
||||
Again, we have another relatively simple inconsistency to address. In order for Tucker to make his case against seed oils, he systematically rejected all nutritional epidemiology except for ecological studies. Yet, claiming that ecological studies are the worst form of epidemiology entails a contradiction, as it means that Tucker is simultaneously holding the view that it is both the best and the worst form of epidemiology at the same time. If Tucker wished to resolve the inconsistency, he'd probably have to acknowledge that ecological studies are not the worst form of epidemiology. This can be syllogized like this:
|
||||
|
||||
![][argument7]
|
||||
[argument7]: /blog/nagragoodrich/argument7.png
|
||||
|
||||
# SYDNEY DIET-HEART STUDY
|
||||
|
||||
**Direct contradiction (**[**2:42:37**](https://youtu.be/QGNNsiINehI?t=9757)**):**
|
||||
|
||||
Tucker makes the claim that we can't know whether or not the margarine used in Sydney Diet-Heart Study (SDHS) contained TFA. Moments later, at [**2:44:23**](https://youtu.be/QGNNsiINehI?t=9863) he suggests that it is valid to argue that we absolutely can know the margarine in SDHS did not contain TFA.
|
||||
|
||||
If Tucker maintains that it cannot be known whether or not TFA was confounding in SDHS, then he cannot posit that it can be known one way or the other. Either position that Tucker took could work for his argument on this subject, but they're just not compatible with each other, and that can be illustrated like this:
|
||||
|
||||
![][argument8]
|
||||
[argument8]: /blog/nagragoodrich/argument8.png
|
||||
|
||||
|
||||
**Rule violation (**[**2:57:59**](https://youtu.be/QGNNsiINehI?t=10679)**,** [**2:58:53**](https://youtu.be/QGNNsiINehI?t=10733)**):**
|
||||
|
||||
Tucker breaks rule three two more times. While discussing a paper that models substitutions of olive oil for various other fats, Matt asks Tucker if he has any problems with the paper. Rather than answering, Tucker starts discussing issues he has with another paper published by the same group investigating dairy fat. Matt attempts to interject, but Tucker continues to discuss previous research on potatoes that was also published by this group.
|
||||
|
||||
|
||||
**Rule violation (**[**2:59:44**](https://youtu.be/QGNNsiINehI?t=10784)**):**
|
||||
|
||||
Tucker breaks rules two, three, and four again. Matt once again asks Tucker if he has any issues with the olive oil substitution analysis. Rather than answering, Tucker cuts Matt off before he can finish asking his question, and Tucker starts asking why Matt included the paper in his references.
|
||||
|
||||
|
||||
**Rule violation (**[**3:00:44**](https://youtu.be/QGNNsiINehI?t=10844)**):**
|
||||
|
||||
Tucker once again breaks rule three. Matt asks his yes-or-no question yet again, to which Tucker responds by stating that the mechanisms favour his position. This is just another dodge.
|
||||
|
||||
|
||||
**Rule violation (**[**3:00:53**](https://youtu.be/QGNNsiINehI?t=10853)**,** [**3:02:18**](https://youtu.be/QGNNsiINehI?t=10938)**):**
|
||||
|
||||
Tucker breaks rule three again, despite it now being enforced by the moderator. The moderator notices that Matt is not getting an answer to his question, and the moderator steps and reminds Tucker of the question being asked. Rather than answering the question, Tucker continues to discuss mechanisms. The moderator again notices that this doesn't answer Matt's question, and implores Tucker to answer. Again, Tucker dodges the question and starts talking about the paper itself, rather than addressing Matt's question about Tucker's interpretation of the paper.
|
||||
|
||||
|
||||
**Rule violation (**[**3:06:00**](https://youtu.be/QGNNsiINehI?t=11160)**):**
|
||||
|
||||
Tucker breaks rules one and six again. Not even one minute after Tucker grants Matt the floor to make a point about mechanistic data, Tucker interrupts Matt on the basis that Matt's point isn't relevant. Though, only moments before, the moderator gave Matt the floor to complete his point. It is clear that Tucker has no respect for the moderator's wishes, nor the debate parameters.
|
||||
|
||||
|
||||
**Rule violation (**[**3:06:52**](https://youtu.be/QGNNsiINehI?t=11212)**):**
|
||||
|
||||
Tucker breaks rules one and six again. For the second time, Tucker interrupts Matt when he's been given the floor by the moderator to complete his point.
|
||||
|
||||
# OLIVE OIL SUBSTITUTION ANALYSIS
|
||||
|
||||
**Rule violation (**[**3:13:34**](https://youtu.be/QGNNsiINehI?t=11614)**):**
|
||||
|
||||
Tucker breaks rules two again. Rather than letting Matt complete his point about the olive oil substitution analysis, Tucker interrupts him.
|
||||
|
||||
**Direct contradiction (**[**3:15:10**](https://youtu.be/QGNNsiINehI?t=11710)**):**
|
||||
|
||||
Tucker concedes that margarine and mayonnaise are not the same thing as isolated vegetable oils. However, at [**3:14:30**](https://youtu.be/QGNNsiINehI?t=11670), Tucker rejects that there are differences between margarine, mayonnaise, and isolated vegetable oils. Another layer of hilarity would be to point out that if Tucker maintains that mayonnaise is the same as an isolated seed oil, he'd be holding the position that corn oil is not a seed oil, but mayonnaise is.
|
||||
|
||||
![][argument9]
|
||||
[argument9]: /blog/nagragoodrich/argument9.png
|
||||
|
||||
# DISCUSSION
|
||||
|
||||
This is where the debate portion of the episode ends, with Matt and Tucker both giving their closing statements. Altogether, Tucker violated the rules at least 50 times and committed at least 18 fallacies, and that's not counting the various hilarious empirical and epistemic claims that Tucker made. For anyone interested in reading more about Tucker's errors, Matt published a comprehensive rebuttal to his personal blog, which can be found on [Matt's blog](https://drmatthewnagra.com/seed-oil-debate-with-tucker-goodrich/). From what I could tell, Matt did not really break the rules at all, except for perhaps a few minor instances when he attempted to interject when Tucker was rambling. Other than that, he conducted himself according to the rules.
|
||||
|
||||
Whether you're skeptical, supportive, or unsure of Tucker's work, I hope that this debate, as well as the breakdown contained within this article, gives you a decent perspective on just how bad his arguments actually are. I'm truly failing to imagine any good reasons for why someone with a stable position, which is truly robust to scrutiny, should struggle this hard to stay consistent in a debate. Tucker's performance was truly terrible, and should be eye-opening to anyone who thought that he might have even a scrap of credibility within this domain.
|
||||
|
||||
Thank you for reading! If you like what you've read and want help me create more content like this, consider pledging your [Support](https://www.uprootnutrition.com/donate). Every little bit helps! I hope you found the content interesting!"""
|
||||
, articleReferences =
|
||||
[ { author = ""
|
||||
, title = ""
|
||||
, journal = ""
|
||||
, year = ""
|
||||
, link = ""
|
||||
}
|
||||
]
|
||||
}
|
||||
1391
packages/website/frontend/src/Config/Pages/Blogs/MainBlog/PlantBasedMeta.elm
Executable file
1391
packages/website/frontend/src/Config/Pages/Blogs/MainBlog/PlantBasedMeta.elm
Executable file
File diff suppressed because it is too large
Load diff
333
packages/website/frontend/src/Config/Pages/Blogs/MainBlog/QuackSmashing.elm
Executable file
333
packages/website/frontend/src/Config/Pages/Blogs/MainBlog/QuackSmashing.elm
Executable file
|
|
@ -0,0 +1,333 @@
|
|||
module Config.Pages.Blogs.MainBlog.QuackSmashing exposing (articleQuackSmashing)
|
||||
|
||||
import Config.Pages.Blogs.Types exposing (BlogArticle)
|
||||
import Route.Path as Path
|
||||
|
||||
|
||||
articleQuackSmashing : BlogArticle
|
||||
articleQuackSmashing =
|
||||
{ articleName = "The Hitchhiker's Guide to Quack-Smashing"
|
||||
, articleLink = Path.toString Path.Blog_Quacksmashing
|
||||
, articleAuthor = "Nick Hiebert"
|
||||
, isNewTabLink = False
|
||||
, hasReferences = True
|
||||
, hasTableOfContents = True
|
||||
, articleImage = "quacksmashing"
|
||||
, articlePublished = "Dec 24, 2022"
|
||||
, articleBody = """
|
||||
By no stretch of the imagination is there any shortage of quackery on social media. Chances are excellent that if you’ve spent any appreciable amount of time on social media, you have encountered some number of quacks and some sort of quackery that they espouse. You might not even be aware that you’re looking at quackery while you’re being exposed to it. So, the aim of this article will be to attempt to simplify the processes of both identifying quackery and dealing with quackery.
|
||||
|
||||
Fundamentally, the issue is not merely that quacks are just interpreting studies incorrectly or affirming crazy beliefs. Those are just symptoms of the problem, rather than being the root cause of the problem. Typically, the problem is occurring within their epistemic framework, and is the very thing that is actually leading them to form their crazy beliefs to begin with. As such, a universally efficacious way to get under a quack’s position and expose them as a raving lunatic is to press them on their epistemic standards in one way or another. That is to say, subject their belief-formation process to a thorough stirring, so that their insanity is allowed to bubble to the surface for all to see.
|
||||
|
||||
This means dragging them down to a level that is inferentially prior to their current understanding, and away from the level of research and studies. Just like the scientific method is inferentially prior to studies or study design, scientific epistemology is inferentially prior to the scientific method. If your starting point is on the level of studies and study design, following the inferential lineage backward will eventually bring you to a level where the premises will all be principles, virtues, or axioms. This is the level we need to bring the quack to in order to address the fundamental flaws in their reasoning.
|
||||
|
||||
The ultimate aim of this process is to expose errors in the quack’s reasoning, not to necessarily convince them of anything. Of course, the hope is that they correct the complications in their belief-formation process, such that they cease to be a quack by the end of the discussion. However, this isn’t a very likely outcome, but this is nonetheless the outcome that you should be aiming for in order to have the best good faith conversation possible. To explore why this outcome isn’t particularly likely, we’ll have to explore what a quack is, and why they’re typically so immovable. So, let’s get into some definitions.
|
||||
|
||||
# QUACK DEFINITION
|
||||
|
||||
>_A quack is a type of scientific delinquent— one who brandishes the trappings of science, yet whose scientific standards are obstinately in violation of those considered most virtuous within the contemporary philosophy of science._
|
||||
|
||||
It was no easy task to get to the bottom of what is so objectionable about the quack’s behaviour. It took interviewing multiple domain experts and trashing dozens of revisions, but I think I finally have something that is workable and minimally assailable for the time being. Essentially, the trait that quantifies over all quacks is a fundamental lack of respect for the rules of scientific inquiry.
|
||||
|
||||
If we were to think of science as a country with laws, a quack would be a contemptuous sort of outlaw within that country. But, quacks are not only rule-breakers by nature, they also actively turn their noses up at the rules— almost relishing in their own intransigence. Despite the commonalities, quacks can usually be categorized in at least one of three distinct ways: **deranged**, **dense**, or **dishonest**.
|
||||
|
||||
**Deranged**
|
||||
|
||||
1. **The Zealot**: one who has assimilated quackery into their identity, and will be emotionally damaged if the quackery is challenged.
|
||||
|
||||
2. **The Contrarian**: one who espouses quackery due to strong anti-establishment and/or conspiratorial and/or paranoid tendencies.
|
||||
|
||||
3. **The Narcissist**: one who is simply so self-assured of their own infallibility that they cannot fathom that their beliefs could be quackery.
|
||||
|
||||
4. **The Aggrieved**: one who feels wronged by some conventional scientific paradigm and is seeking vindication or revenge through quackery.
|
||||
|
||||
5. **The JAQ-off**: one who slyly hat-tips to quackery, often in an ostentatious or cheeky manner, but claims to be just asking questions when challenged.
|
||||
|
||||
6. **The Circlejerker**: one who is deeply impressionable and merely forms the beliefs of whatever community will accept them.
|
||||
|
||||
|
||||
**Dense**
|
||||
|
||||
1. **The Zombie**: one who has made little to no effort to form their own beliefs, but rather just recapitulates the beliefs of influential people.
|
||||
|
||||
2. **The Imbecile**: one who lacks the requisite intelligence and/or cognitive faculties to form rational beliefs of their own accord.
|
||||
|
||||
|
||||
**Dishonest**
|
||||
|
||||
1. T**he Grifter**: one who espouses quackery, not necessarily because they believe it to be true, but rather for some ulterior motive such as money or clout.
|
||||
|
||||
2. **The Yo-Yo**: one who spouses both quackery and non-quackery, often to the point of self-contradiction, depending on the context.
|
||||
|
||||
|
||||
This probably isn’t an exhaustive list of quack species and subspecies, and will likely be updated in the future. For now, these are the most common types of quacks you’re likely to encounter online or on social media. Most quacks you will encounter will be of the deranged variety, and of them, the majority will be either contrarian or narcissistic. The narcissistic quacks are hardly worth engaging with, unless it is for the benefit of an audience. But other than that, you’ll never convince them of anything because they’re cocksure of their own perfection. Contrarians may be swayed by reason, but it is not particularly likely.
|
||||
|
||||
Much like the narcissistic quack, the dishonest quacks are also not likely to be worth engaging with, except for the benefit of onlookers to whom you seek to reveal the quack’s dishonesty. Dishonest quacks, especially grifters, will tend to sway their affirmations in lockstep with the trends of the time. For example, many grifters who were pushing low carbohydrate diets back in 2017 are now pushing raw, grassfed carnivore diets in 2022. It just depends on what’s trending at the moment. It’s a game to them. Engaging is typically pointless and you’re justified in disengaging, in my opinion.
|
||||
|
||||
Altogether, you have the best chance of convincing dense quacks, because they’re less likely to be as intransigent as other varieties. These types of quacks don’t typically believe quackery due to some emotional commitment or ulterior motives. Usually they’re just either uneducated or dumb. However, if they’re too dumb to understand the difference between good evidence and bad evidence, convincing them may be ultimately beyond your reach. But it is nonetheless worthwhile to attempt reasoning with them. The best discussions will likely be had with the zombie variety of quack, as they’re usually the closest to just being truly naive, and they’re not necessarily dumb.
|
||||
|
||||
Now that we have a bit of a handle on what constitutes a quack, let’s move on to the next definition we need to cover:
|
||||
|
||||
# QUACKERY DEFINITION
|
||||
|
||||
>_Any ostensible hypothesis that either fails to satisfy any critical theoretical virtue of a scientific hypothesis (i.e., testability, fruitfulness, scope, parsimony, conservativism) or satisfies fewer theoretical virtues compared to the prevailing scientific hypotheses against which it is intended to compete._
|
||||
|
||||
Given that a proposition is a statement that can be either true or false, a scientific hypothesis can be thought of as basically being an empirically testable proposition. For example, say that we wanted to develop a theory to explain the rising of the sun each morning. We could generate a few different hypotheses. Hypothesis A might suppose that the sun rises because God is pulling it across the sky. Hypothesis B might suppose that the sun rises because it is revolving around the Earth. Hypothesis C might suppose that the sun rises because the Earth is spinning.
|
||||
|
||||
Let’s linger on hypothesis A for a moment to discuss some of its issues. Firstly, it’s completely unclear how hypothesis A could be tested, so whether or not it genuinely qualifies as a hypothesis is questionable. Those with a background in science have likely been exposed to the principle that unfalsifiable hypotheses are to be avoided, and hypothesis A is an example of that. Testability is arguably the most important aspect of a scientific hypothesis. Without testability, there is no empirical investigation. Without an empirical investigation, there is no science. The hypothesis ends up being completely ad hoc (which we will discuss later).
|
||||
|
||||
On the other hand, hypothesis B certainly has the capacity to make predictions. One could create a model wherein the sun travels around the Earth, and observations can certainly be made that are consistent with that model. Hypothesis C could be tested similarly. One could construct a model wherein the Earth is spinning and the sun is fixed in place, and observations can be made to see if that model pans out.
|
||||
|
||||
So far, hypothesis B and hypothesis C don’t seem to underdetermine phenomena differently, and the observations seem equally expected on both hypotheses. However, what if we also made the observation that there are other planets out there in space, and we also observe that those planets seem to move in relationship to the sun in a way that suggests that the sun is a fixed object. This observation is more expected on hypothesis C than hypothesis B. The observed phenomena are underdetermined on hypothesis B, and thus hypothesis C would come out on top until there is a better hypothesis to supplant it.
|
||||
|
||||
Great! We have established what it takes for a proposition to be a scientific hypothesis, as well as what it takes for one scientific hypothesis to prevail over another. Now let’s move on to discuss the different criteria that such hypotheses need to satisfy in order for them to be competitive within the domain of science. These are the epistemic virtues we touched on earlier— the standards by which the viability of a tentatively competing scientific hypothesis will be measured. [¹](https://www.oxfordbibliographies.com/display/document/obo-9780195396577/obo-9780195396577-0409.xml) [²](https://books.google.ca/books/about/How_to_Think_About_Weird_Things_Critical.html?id=YR4iAAAAQBAJ&redir_esc=y)
|
||||
|
||||
# THEORETICAL VIRTUES
|
||||
|
||||
1. **Testability**: A hypothesis is scientific only if it is testable, that is, only if it predicts something more than what is predicted by the background theory alone.
|
||||
|
||||
2. **Fruitfulness**: Other things being equal, the best hypothesis is the one that is the most fruitful, that is, makes the most successful novel predictions.
|
||||
|
||||
3. **Scope**: Other things being equal, the best hypothesis is the one that has the greatest scope, that is, that explains and predicts the most diverse phenomena.
|
||||
|
||||
4. **Parsimony**: Other things being equal, the best hypothesis is the simplest one, that is, the one that makes the fewest assumptions.
|
||||
|
||||
5. **Conservatism**: Other things being equal, the best hypothesis is the one that is the most conservative, that is, the one that fits best with established beliefs.
|
||||
|
||||
|
||||
All else equal, if an alternative hypothesis fails to outcompete a prevailing hypothesis on any of these measures, why form the belief that the alternative hypothesis is more likely to be true compared to the prevailing hypothesis? Beyond the testability of a hypothesis, the extent to which a hypothesis fails to satisfy any of these theoretical virtues will determine the “ad-hocness” of that hypothesis. An ad hoc hypothesis is also known as a “just-so story”, which is a phrase you may have heard before.
|
||||
|
||||
While it goes without saying that ad-hocness is undesirable in science, it is important to emphasize that this is the crux of the quack’s rhetoric. Quackery is like an artichoke of idiocy, and just-so story-telling is at the heart of it. You have to peel it slowly to expose the fuckery. This sort of delinquent fabulism takes many forms, and it’s not always obvious when a hypothesis is ad-hoc and failing to satisfy one or more theoretical virtues compared to another hypothesis. But, hopefully your intuitions can be adequately primed with a few examples. Let’s examine this scientific hypothesis:
|
||||
|
||||
>_Vegetable oils are the cause of heart disease._
|
||||
|
||||
At first glance, this hypothesis appears to be extremely attractive in its parsimony. It appears to be making very few assumptions, as it is reducing the cause of heart disease down to a single variable. However, this is an illusion. This hypothesis must actually bootstrap an enormous number of assumptions in order to compensate for its lack of scope and fruitfulness. Not only does the totality of the empirical evidence weigh heavily against this hypothesis, it’s not clear what novel predictions the hypothesis has generated, if any at all.
|
||||
|
||||
The primary issue is that the hypothesis is lacking in scope because it does not account for the majority of our observations regarding vegetable oils and heart disease. Typically, the quack will attempt to compensate for this shortcoming by casting doubt on existing research— “those findings are wrong because epidemiology is pseudoscience”. What the quack doesn’t realize is that this actually decreases the parsimony of their hypothesis. This leaves them with an ad-hoc story that is not particularly unifying, fruitful, or parsimonious. Let’s examine another hypothesis:
|
||||
|
||||
>_Ancestral foods protect against all illnesses.”
|
||||
|
||||
On the face of it, this hypothesis might appear similar to the first in that it lacks scope and fruitfulness, and in turn compromises its own parsimony. However, it may be even worse than that. If ancestral foods are referring to foods that humans consumed during some prehistoric time period, then the hypothesis is actually untestable. Humans no longer have access to those foods, and as such the hypothesis is almost entirely ad hoc, and the theoretical virtues that it upholds are few to none.
|
||||
|
||||
The more sensitive you become to when a hypothesis is failing in its virtuousness, the more straightforward it will be to identify and dispatch quackery. For instance, consider what has been described above in previous examples, and examine these other quack hypotheses carefully:
|
||||
|
||||
> _Red meat protects against mental illness._
|
||||
> _Sunlight protects against skin cancer._
|
||||
> _Blueberries cure Alzheimer’s disease._
|
||||
> _Refined carbohydrates cause obesity._
|
||||
> _Milk products impair bone health._
|
||||
> _Soy products feminize men._
|
||||
> _Vegan diets cure cancer._
|
||||
|
||||
Remember that quacks fundamentally don’t care about scientific rigour, and virtually all quackery will follow a similar structure at its core— an utter lack of respect for the rules we just discussed. Thus, there is a virtually universally efficacious way of uprooting quackery. Simply interrogate the quack about how their hypothesis better conforms to the rules compared to other hypotheses, and watch them crumble.
|
||||
|
||||
Once you start scrutinizing quackery like this on this basis, you will quickly realize that quacks are just master fabulists— iron chefs of word salads. Mind you, quacks will never admit to this. Even when their bullshit has been revealed to them point blank, the exact lack of rigour that got them to be in their current state will end up keeping them smiling through their humiliation.
|
||||
|
||||
# THE QUACK'S TRICHOTOMY
|
||||
|
||||
At this point it would be worthwhile to discuss the **Quack’s Trichotomy**. This concept has been borrowed from Lance Bush’s anti-realist metaethical thesis. While it was originally a way of categorizing different types of moral realism, it would appear to be highly applicable to categorizing different types of quackery as well.
|
||||
|
||||
Basically, quackery will ultimately reduce down into one of three categories: **false**, **trivial**, or **unintelligible**. As discussed above, most quackery will end up being false (or at least more likely to be false than true). But, there are some other common cases to explore. Identifying just what kind of utterances the quack is making will be helpful in figuring out whether or not it’s even worth entertaining their madness. Consider the following three interpretations of this hypothesis:
|
||||
|
||||
>_Red meat is healthy._
|
||||
|
||||
**False Interpretation**
|
||||
|
||||
Perhaps the tentative quack cashes out the term “healthy” into some sort of claim about red meat not increasing the risk of heart disease. This can be tested, and it turns out that when the best available data is aggregated together, across multiple domains, red meat consumption reliably associates with an increased risk of heart disease. This means that this hypothesis would just be false, or more likely false than true.
|
||||
|
||||
**Trivial Interpretation**
|
||||
|
||||
Let’s just say that all the tentative quack means by “healthy” is that they themselves just feel really good on a diet that is high in red meat. In this case, the hypothesis is actually going to be “I feel really good on a diet that is high in red meat.” This is not anything that anyone would contest, as it’s clearly true. However, it’s trivially true, and a pointless proposition to utter. We need not debate this. This claim may not necessarily make them a quack, but we should probably just leave this idiot to their fuzzy feelings and move on.
|
||||
|
||||
**Unintelligible Interpretation**
|
||||
|
||||
In this case, we’ll imagine that the tentative quack doesn’t unpack the utterance any further, and just continues to insist that red meat is “healthy”, over and over. If no further clarification is offered, this interpretation of the hypothesis is just gibberish. What is healthy supposed to mean? To me, “healthy” is a relational concept that joins many relata— X is healthy for Y compared to W relative to standard Z (where healthy is defined as an exposure that increases the lag-time to the onset of illness compared to a different exposure). Unless their meaning is unpacked in an intelligible way, their utterance doesn’t even rise to the level of being a proposition. They’re literally just gibberating, and we need not debate their ramblings. Leave them to their delusions.
|
||||
|
||||
In an exceedingly small minority of cases that fall outside of the scope of the **Quack’s Trichotomy**, the tentative quack’s proposition will be true and convincing, rather than being false, trivial, or unintelligible. In this case, the proposition likely isn’t quackery and you likely just mistook the proposition as quackery due to miscommunication. If this happens, you should just accept the proposition and feel good that you learned a new fact today. Enjoy it when it happens. But again, this almost never happens.
|
||||
|
||||
There is one final trope we need to explore, though. Every so often, you will encounter someone who is committed to extraordinarily high standards of evidence. For example, quacks in the nutrition blogosphere will sometimes claim the following:
|
||||
|
||||
> “Evidence cannot be obtained in nutrition science unless you have studied the effects of a food in a multi-generational, quadruple-blind randomized controlled metabolic ward crossover trial in human clones.”
|
||||
|
||||
This is not really a hypothesis. It’s just a claim that directly pertains to scientific epistemology itself, which means we must deal with this in a unique way. In this case, we should simply ask them what theoretical virtue would be either violated or unable to be satisfied unless we had such evidence for our hypothesis? As such, it would be worthwhile to get into a few definitions regarding what constitutes evidence.
|
||||
|
||||
# EVIDENCE DEFINITION
|
||||
|
||||
>_That which is more expected on a given hypothesis compared to the negation of that hypothesis._
|
||||
|
||||
On this definitions, falling short of achieving a trial design like the one described above does not bar us from making discoveries that are more or less expected on different hypotheses. Thus, failing to achieve such a trial design is not a barrier to discovering any sort of evidence. If a short trial with a limited number of people finds an effect of some intervention, that effect is still going to be expected on a hypothesis that predicts it. So, it’s still evidence.
|
||||
|
||||
Now we’re ready to start tackling quackery ourselves. Next up, we’ll go through a universally applicable procedures for smashing quackery. The beauty is that the procedures leave the burden of proof squarely on the quack, and pressure test their epistemic standards. This means that you probably don’t even need to show up with studies of your own if you don’t want to. The ball will mostly be in their court, and the burden of proof will be squarely theirs. By the end they’ll find themselves looking up from within their own grave and they will have nobody but themselves to blame for them being there.
|
||||
|
||||
Before we move on to the quack-smashing debate procedure, it's recommended that you download the included [dialogue tree](https://drive.google.com/file/d/1QQaN6HRwzp3kY2DAcnHVBxeX6jBhrvkw/view?usp=share_link) and refer to it while reading.
|
||||
|
||||
# PHASE ONE: CLARIFICATION
|
||||
|
||||
**Step 1: Ask for a proposition**
|
||||
|
||||
Essentially, a proposition is what is known as a truth-apt statement. Meaning that it is a statement that can be either true or false. You can think of a proposition like a claim. A common tactic among quacks is to dance around some implied commitment without ever actually explicitly making any claims.
|
||||
|
||||
Quacks are notoriously unclear when they communicate. Sometimes quacks will simply gesture in your direction with a series of vague utterances that merely have the appearance of communicating disagreement. For example, a quack might say to you:
|
||||
|
||||
> _Read the studies you idiot!_
|
||||
> _Follow the money to know the truth!_
|
||||
> _We’ve been lied to for over fifty years!_
|
||||
|
||||
Notice how vague these statements are. Quackery thrives on vagueness. You must straightforwardly ask the quack for their position— “I’m sorry, I just want to understand what you mean. What do you think is true that people who believe this study think is false?” Be firm, and stand your ground. Press them until they give you an utterance that at least has the appearance of something propositional.
|
||||
|
||||
**Step 2: Evaluate their ostensible proposition**
|
||||
|
||||
Once you have a proposition, we begin the clarification phase. During this step you are aiming to demystify anything that you find unclear. If there are terms over which there may be disagreement, such as relational terms with missing relata, you must ask for clarification.
|
||||
|
||||
If clarification is required, proceed to **step 2.1**. If clarification is not required, proceed to **step 2.2**.
|
||||
|
||||
**Step 2.1: Ask for clarification**
|
||||
|
||||
Essentially what we need from the quack is a clear, contestable proposition. Scrutinize every word in their proposition if necessary. This is not to bog down the debate, but to make sure that there is as close to a complete, unambiguous shared understanding of the terms being used by the quack as possible. In the vast majority of cases, asking the quack simple clarifying questions about their proposition will make it fall apart on the spot.
|
||||
|
||||
If the tentative quack’s explanation devolves into bullshit like rambling or gibberish, just walk away from the idiot. If it appears intelligible and it’s just some trivial utterance that isn’t worth discussing, we can start assessing its truth value.
|
||||
|
||||
# PHASE TWO: ARGUMENTATION
|
||||
|
||||
**Step 2.2: Check for modal claims**
|
||||
|
||||
If we manage to obtain an intelligible proposition from the quack, we can begin checking for modal language. Modal language typically refers to concepts like impossibility, necessity, possibility, or contingency. Be sensitive to when your interlocutor is using words that function as synonyms for any of these terms. For example, words like “can”, “able”, “may”, “could”, or “capable” should all be taken as synonyms for the modal term “possible”, whereas words like “unable”, “cannot”, “couldn’t”, “unable”, “incapable”, should all be taken as synonyms for the modal term “impossible”.
|
||||
|
||||
Additionally, if your interlocutor suggests that something is necessarily the case, that should be taken as just another way of saying that the contrary is impossible. As such, impossibility and necessity are modal terms that can essentially be captured by the same modal operator. Similarly, if your interlocutor suggests that something is possible, all they’re saying is that it's necessarily not impossible, which is to say that it's contingent upon something else. So, much like impossibility and necessity, possibility and contingency can also be interpreted interchangeably, under the same modal operator. At the end of the day the terms can ultimately be cashed out into what is impossible or possible.
|
||||
|
||||
To be clear, these terms are just operators, and don’t mean much unless they’re in reference to a given modality. Modalities are just means by which these modal operators can be understood. There are two primary modalities that are commonly discussed in the philosophy literature— physical and logical. For example, something is logically impossible if it entails a contradiction, and something is physically impossible if it violates a law of physics.
|
||||
|
||||
Of course there are other modalities. In fact, there are probably infinite numbers of modalities on which an operator like impossible can be understood. For instance, while it’s certainly logically and physically possible to murder someone in any country, it is legally impossible to murder someone in most countries. Though we don’t really use modal language in this way.
|
||||
|
||||
Overall, impossibility can be interpreted as something that is incompatible with a given rule/standard or set of rules/standards, and possibility can just be interpreted as something that is compatible with a given rule/standard or rule/standard set.
|
||||
|
||||
In most cases, if the modal operator they’re invoking relates to possibility, then it’s probably not even worth continuing the discussion. In the vast majority of cases it’s just trivial to claim something is possible. If the proposition contains a modal operator related to impossibility, proceed to **step 2.3**. If their proposition does not contain a modal operator, proceed to **step 2.4**.
|
||||
|
||||
**Step 2.3: Ask which law is broken on their stated modality**
|
||||
|
||||
This step is pretty straightforward. If your interlocutor is claiming something is impossible, ask them on what modality is it impossible. If necessary, explain to them what modalities and modal operators are, just so they’re both clear on what you’re asking of them and what kind of claim they’ve actually made.
|
||||
|
||||
If they cannot unpack the modality and the law that’s violated on that modality first give them the opportunity to amend their claim. If they refuse to amend the claim or are unable to unpack the claim, then proceed to **step 6**. If they actually manage to unpack the modality and the law that’s violated on that modality, and it’s convincing to you, you should probably just concede.
|
||||
|
||||
**Step 2.4: Ask for a goalpost**
|
||||
|
||||
Assuming there were no modal claims in our tentative quack’s proposition, we can proceed to the first step in the actual debate— requesting a goalpost. Basically, you will merely ask them what evidence would be required for them to affirm that their proposition is false. This is different than asking them what evidence it would take for them to reject their proposition. We want to know what it would take for them to affirm their proposition’s negation.
|
||||
|
||||
This step isn’t vital, so it’s not a huge concern if our tentative quack doesn’t render a goalpost to you. However, keep in mind that if they can’t tell you their goalpost for affirming their proposition’s negation, they are essentially telling you that they don’t even know why they believe that their proposition is true. So, it’s up to you if you want to proceed further. If you want to stop here, just shame them for being a sophist and disengage.
|
||||
|
||||
If you decide to continue, proceed to **step 3**.
|
||||
|
||||
**Step 3: Ask for an inference for their proposition**
|
||||
|
||||
This step is pretty straightforward. You’re just straight up asking for the argument for the proposition. After you’ve obtained a clear, contestable proposition from the quack, you must then ask them what the evidence is for their proposition. Asking the quack for evidence is perfectly fair. Don’t let them try to convince you otherwise. They bear the burden of proof, and the onus is solely on them to demonstrate the merits of their proposition.
|
||||
|
||||
If they actually manage to render an argument, you can proceed to **step 3.1**. If they refuse to render an argument, proceed to **step 6**.
|
||||
|
||||
**Step 3.1: Identify the type of inference**
|
||||
|
||||
Basically there are two broad categories of inference someone can make. Either their inference is going to be a posteriori or it is going to be a priori. Both a posteriori and a priori inferences are forms of deductive arguments. However, in contrast to an a priori inference, an a posteriori inference requires synthesizing prior experience of the world. The truth or falsity of an a posteriori inference will rest on empirical evidence.
|
||||
|
||||
**A Posteriori**
|
||||
|
||||
> **P1)** An unmarried person is more likely to be depressed.
|
||||
> **P2)** Jim is unmarried.
|
||||
> **C)** Therefore, Jim is more likely to be depressed.
|
||||
|
||||
An a priori inference doesn’t require prior experience of the world, and the truth of falsity of the inference will hinge on the definitions or meaning of the terms used.
|
||||
|
||||
**A Priori**
|
||||
|
||||
> **P1)** An unmarried man is a bachelor.
|
||||
> **P2)** Jim is an unmarried man.
|
||||
> **C)** Therefore, Jim is a bachelor.
|
||||
|
||||
For the purposes of this article, we’ll just be focusing on a posteriori inferences. If you are interested in how to address a priori inference, please refer to the included dialogue tree at the top of this section. Otherwise, proceed to **step 3.2**.
|
||||
|
||||
**Step 3.2: Check for modal claims**
|
||||
|
||||
Generally speaking, if their inference is a posteriori and it contains a modal operator, they’re likely to be referring to a physical modality (but they could be referring to another modality).
|
||||
|
||||
If they are invoking an operator that is related to impossibility, proceed to **step 3.3**. Once again, if the invoke a modal operator related to possibility, then it’s probably worthwhile to just agree and disengage, as it’s typically just trivial to claim that things are possible. If there are no modal operators in their claim, proceed to **step 3.4**.
|
||||
|
||||
**Step 3.3: Ask which law is broken on their stated modality**
|
||||
|
||||
The overall procedure is identical to **step 2.3**. If the quack can’t unpack the claim or they refuse to amend the claim, then proceed to **step 6**. If they actually manage to unpack their the modality and the law that’s violated on that modality, and it’s convincing to you, you should probably just concede.
|
||||
|
||||
**Step 3.4: Evaluate their empirical evidence**
|
||||
|
||||
During this step, it pays to have some critical appraisal skills to fall back on, but it’s not necessary. The most important thing to remember is that you have to be honest about what you find convincing and you have to be honest enough to amend your views according to new evidence.
|
||||
|
||||
Keep the definitions of evidence that we discussed earlier in mind going forward. After the quack has rendered their evidence, examine it carefully. In the vast majority of cases it will be unclear how this evidence should be more expected on their hypothesis as opposed to some other hypothesis, even another hypothesis that you literally dream up on the spot as a counter explanation (which we will be covered in later steps). Consider the following proposition:
|
||||
|
||||
>_Carnivorous diets made humans more intelligent._
|
||||
|
||||
A bold proposition like this certainly requires substantial evidence, which is perfectly reasonable to request of the quack. Let’s say you ask for the evidence, and the quack renders something along the lines of this in response:
|
||||
|
||||
>_Because plant agriculture decreased human brain size by 11%._
|
||||
|
||||
Bearing all of the above in mind, critically evaluate their evidence and think hard about the assumptions it makes. If you don’t find anything objectionable, it is perfectly OK to admit that sufficient evidence for the proposition has been rendered, and that you concede the proposition on that basis.
|
||||
|
||||
If the quack managed to render a goalpost to you in **step 2.4**, then proceed to **step 3.5**. If they did not render a goalpost to you, and their evidence is not convincing to you, then proceed to **step 5**.
|
||||
|
||||
**Step 3.5: Compare their evidence to their goalpost**
|
||||
|
||||
Check to see if their empirical evidence is actually consistent with the goalpost they described. If their empirical evidence is either consistent or stronger than the sort of evidence described in their goalpost, then simply proceed to **step 5**. However, if their empirical evidence is _weaker_ than the sort of evidence they described in their goalpost, then the quack has just straightforwardly contradicted themselves and you can proceed straight to **step 6**.
|
||||
|
||||
**Step 5: Propose an alternative hypothesis**
|
||||
|
||||
As with **step 3.4**, it pays to have some critical appraisal skills, but it is again not actually necessary. The only thing that you really require to proceed with this step is the creativity to dream up alternative hypotheses. But not just any alternative hypothesis. Your alternative hypothesis has to make the same prediction as their hypothesis, but also be mutually incompatible with their hypothesis.
|
||||
|
||||
In reference to the evidence presented in **step 3.4**, while this evidence may sound hilarious to us, it may actually be convincing to some people, so contesting it is probably still a good idea. Don’t dismiss it outright. At this point, it may be true that the quack has already put their foot in their mouth. But continue to be a fair interlocutor, and give the quack an opportunity to either swallow it or pull it out. Hit them back with an alternative hypothesis that makes the same prediction:
|
||||
|
||||
>_Perhaps agriculture actually increased the efficiency of the human brain, and there was actually no change in intelligence._
|
||||
|
||||
Remember that it’s not at all clear why plant agriculture decreasing human brain size by 11% would necessarily, or even probably, be evidence for carnivorous diets making humans more intelligent. Perhaps plant agriculture increased the efficiency of our brains, such that our brains could achieve the same level of intelligence using less tissue. So, why would plant agriculture decreasing human brain size by 11% be more expected on the quack’s hypothesis as opposed to your alternative hypothesis?
|
||||
|
||||
Now the quack is in a tough position, because he has to actually explain why the evidence in question is more expected on their hypothesis than the one you just cooked up on the spot. In the vast majority of cases, the quack will not be able to produce any compelling reason for why one hypothesis has more explanatory power over the other.
|
||||
|
||||
Notice as well that we’re not asking them to substantiate their evidence, and we’re not scrambling to find studies of our own to refute their evidence. We’re just asking the quack why their hypothesis is more virtuous than ours. This is not a strategy that virtually any quacks are going to be prepared to deal with (because if they were, they probably wouldn’t propose stuff as stupid as they typically do).
|
||||
|
||||
In the vast majority of cases, merely asking the quack why the evidence in question is more expected on their hypothesis, rather than your own hypothesis, will lead them to fold like a chair, right on the spot.
|
||||
|
||||
If your interlocutor actually can demonstrate that the evidence they brought to the table is indeed more expected on their hypothesis than some alternative hypothesis, you have a few options. You retry **step 5**, and attempt to create another alternative hypothesis that will challenge the strength of their evidence even harder. Alternatively, you can concede the proposition for the time being and come back to it later, even if you don’t find it convincing. Just be honest. Conceding the debate doesn’t mean that your interlocutor was correct.
|
||||
|
||||
Remember, you can always be agnostic (even about your own alternative hypotheses), and try to remember that you don’t need to affirm the negation of their proposition. The onus is not on you to prove anything in this exchange. Not a goddamn thing. Remember that.
|
||||
|
||||
Assuming they’re unable to answer your question, it must be reiterated that it is very important to never allow the quack to flip the burden of proof on you. It’s their proposition, and the burden of proof is theirs and only theirs. A tip for identifying when the quack is trying to flip the burden of proof is when they attempt to ask questions that are not clarifying questions. Any question other than a clarifying question is always a dodge when you hold the line of questioning, and your line of questioning is only over when you’ve obtained all of the answers you require.
|
||||
|
||||
If the quack rejects your alternative hypothesis, proceed to **step 5.1**. If the quack accepts your alternative hypothesis and admits that he has no justification for why their evidence is more expected on their hypothesis than your hypothesis, then proceed to **step 6**.
|
||||
|
||||
**Step 5.1: Ask what’s wrong with your alternative hypothesis**
|
||||
|
||||
Rejecting your alternative hypothesis could mean a couple different things. Either they’re calling the alternative hypothesis itself into question, or they are going to explain why their evidence is more expected on their hypothesis than your hypothesis. If they’re rejecting your alternative hypothesis, just ask them for the explanation. If their explanation is convincing to you, there are a couple of different options. You can either concede or return to **step 5** and press them with an even stronger hypothesis. It just depends on how comfortable you are giving it another shot.
|
||||
|
||||
Alternatively (and altogether more likely), if they can’t give you a clear explanation as to why their evidence is more expected on your hypothesis, then proceed to **step 6**.
|
||||
|
||||
# PHASE THREE: STEAMROLLING
|
||||
|
||||
**Step 6: Demand that they concede their proposition**
|
||||
|
||||
Once you find yourself in a position where you have not conceded the proposition and the quack is unable to render an argument in favour of the proposition, you’ve obtained all you need from the quack to begin steamrolling. Just refuse to proceed until you obtain either an argument for the proposition or a concession on the proposition itself. Anything other than these outcomes is not satisfactory. Don’t accept any “agree to disagree” cop-outs. Hold their feet to the fire and press the issue.
|
||||
|
||||
The quack may try to spiral down on some tangent that isn’t germane to any of the previous questions you have asked them. In this event, redirect them immediately after their ramble. If their ramble is excessively long, feel free to cut them off. Tangents waste time, and it’s inappropriate to let tangents go to completion. Most quacks are bad faith actors, so concessions are too optically intolerable for them and rendering an argument for their claim is usually beyond their capabilities. Most will simply just disengage once you’ve gotten this far.
|
||||
|
||||
Lastly, we have to talk about an exceptionally rare outcome you will almost never encounter on your quack smashing journey— the quack concedes the proposition. Congratulate and praise the quack for their honesty. In fact, they may not even be a quack anymore. You may have rescued them from utter insanity, and that’s certainly worth a pat on the back for both of you.
|
||||
|
||||
Thank you for reading! If you like what you've read and want help me create more content like this, consider pledging your [Support](https://www.uprootnutrition.com/donate). Every little bit helps! I hope you found the content interesting!
|
||||
|
||||
# BIBLIOGRAPHY"""
|
||||
, articleReferences =
|
||||
[ { author = ""
|
||||
, title = "Theoretical Virtues in Science"
|
||||
, journal = "Obo"
|
||||
, year = "N/A"
|
||||
, link = "https://www.oxfordbibliographies.com/display/document/obo-9780195396577/obo-9780195396577-0409.xml"
|
||||
}
|
||||
, { author = "Theodore Schick, Lewis Vaughn"
|
||||
, title = "How to Think About Weird Things: Critical Thinking for a New Age: Seventh Edition"
|
||||
, journal = "N/A"
|
||||
, year = "2013"
|
||||
, link = "https://books.google.ca/books/about/How_to_Think_About_Weird_Things_Critical.html?id=YR4iAAAAQBAJ&redir_esc=y"
|
||||
}
|
||||
]
|
||||
}
|
||||
598
packages/website/frontend/src/Config/Pages/Blogs/MainBlog/SapienDiet.elm
Executable file
598
packages/website/frontend/src/Config/Pages/Blogs/MainBlog/SapienDiet.elm
Executable file
|
|
@ -0,0 +1,598 @@
|
|||
module Config.Pages.Blogs.MainBlog.SapienDiet exposing (articleSapienDiet)
|
||||
|
||||
import Config.Pages.Blogs.Types exposing (BlogArticle)
|
||||
import Route.Path as Path
|
||||
|
||||
|
||||
articleSapienDiet : BlogArticle
|
||||
articleSapienDiet =
|
||||
{ articleName = "The Sapien Diet: Peak Human or Food Lies?"
|
||||
, articleLink = Path.toString Path.Blog_Sapiendiet
|
||||
, articleAuthor = "Nick Hiebert"
|
||||
, isNewTabLink = False
|
||||
, hasReferences = True
|
||||
, hasTableOfContents = True
|
||||
, articleImage = "sapiendiet"
|
||||
, articlePublished = "Aug 24, 2022"
|
||||
, articleBody = """
|
||||
[Brian Sanders](https://www.sapien.org/brian) is an entrepreneur and filmmaker who advocates for an "ancestral" diet he has coined the Sapien Diet™. This diet is characterized by high intakes of animal products and considerably strict abstinence from processed food consumption. His diet is supposedly based on the teaching of [Weston Price](https://en.wikipedia.org/wiki/Weston_A._Price), a dentist and nutritional anthropologist of the early 1900s who also advocated for the consumption of animal products. Right off the bat, we can tell that Brian's diet is marinated in quackery, as Price's methods and inferences were [questionable at best](https://quackwatch.org/related/holisticdent/).
|
||||
|
||||
Whatever the case, Brian publicly advocated for his diet back in 2020 during a talk at [Low Carb Down Under](https://lowcarbdownunder.com.au) entitled ["Despite what you've been told COWS CAN SAVE THE WORLD"](https://www.youtube.com/watch?v=VYTjwPcNEcw). In this talk, he describes the benefits and virtues of animal food production and consumption, and also touches on the supposed pitfalls and fallacies of veganism and plant-based diets. He structures his talk into three sections, which serve as direct rebuttals to three propositions that he characterizes as mainstream:
|
||||
|
||||
- Red meat is harmful to human health.
|
||||
|
||||
- Cows are harmful to the environment.
|
||||
|
||||
- It's unethical to kill animals for food.
|
||||
|
||||
|
||||
Brian's talk is riddled with half-truths, misunderstandings, bald-faced lies, and other idiocy. To go through everything individually would take far too long, so in this article I will only be addressing the primary points that Brian makes throughout his presentation. Some of the quotes that I will be referencing will be paraphrased to account for Brian's unclear manner of speaking, but I nonetheless believe that I have represented his beliefs fairly. So, let's dive in!
|
||||
|
||||
# HEALTH CLAIMS
|
||||
|
||||
**Claim #1 (**[**4:52**](https://youtu.be/VYTjwPcNEcw?t=292)**):**
|
||||
|
||||
>_Hong Kong eats the most amount of meat and animal foods in the world and has the longest life expectancy._
|
||||
|
||||
**Post-hoc Fallacy**
|
||||
|
||||
This is just a post-hoc fallacy and a misunderstanding of the evidence being presented. Firstly, Brian's argument doesn't even get off the ground unless there is an assessment of what is causing the differences in longevity, and how the mortality stats are calculated. In this case, Brian is suggesting temporal connections that can't be verified to exist based on the data provided. More to the point, differential ecological associations between populations can't really tell us anything about differences in outcomes between individuals consuming the least meat versus individuals consuming the most meat.
|
||||
|
||||
For example, there is a positive ecological association between smoking and life expectancy [[1](http://www.thefunctionalart.com/2018/07/visualizing-amalgamation-paradoxes-and.html)]. But, we wouldn't infer from this association that cigarette consumption increases longevity. Those sorts of inferences are what prospective cohort studies and randomized controlled trials are for, as they are actually equipped to assess individual-level exposure and outcomes.
|
||||
|
||||
![][image1]
|
||||
[image1]: /blog/sapiendiet/image1.png
|
||||
|
||||
**Base Rate Fallacy**
|
||||
|
||||
According to Brian's source, Hong Kong's meat intake has been steadily increasing and didn't reach UK-levels of intake in 1972 and US-levels of intake in 1967 [[2](https://www.nationalgeographic.com/what-the-world-eats/)]. If the hypothesis is that meat causes higher mortality via chronic disease, then people who started eating that much meat during those time periods would barely even be old enough to contribute substantially higher mortality statistics at the time of this report anyway. So, while it's true that Hong Kong now eats a lot of meat and enjoys longer lifespans, Brian is not appreciating the base rate of historical meat consumption for this population.
|
||||
|
||||
As an aside, it is also interesting to note that those in Hong Kong who followed a non-ancestral "Portfolio diet" (which is characterized by low saturated fats, sodium, and dietary cholesterol, as well as higher plant proteins, vegetable oils, high fruits, vegetables, and whole grains) were at a lower risk of dying from all causes, as well as dying of CVD or cancer [[3](https://pubmed.ncbi.nlm.nih.gov/34959911/)]. In fact, multiple sensitivity analyses were done to remove the possibility for reverse causality, and the reductions in risk are still apparent.
|
||||
|
||||
**Claim #2 (**[**5:13**](https://youtu.be/VYTjwPcNEcw?t=313)**):**
|
||||
|
||||
>_There is an inverse association between red meat and total mortality in Asian populations._
|
||||
|
||||
**Red Herring**
|
||||
|
||||
The aggregated difference in the lowest to highest red meat intake in this pooled analysis was ~60g/day, which is approximately two bites [[4](https://pubmed.ncbi.nlm.nih.gov/23902788/)]. It's unclear how this is capable of informing our judgements about the health value of red meat in the context of something like a Sapien Diet™. Not only that, but the contrast is occurring primarily at lower levels of intake.
|
||||
|
||||
![][image2]
|
||||
[image2]: /blog/sapiendiet/image2.png
|
||||
|
||||
Generally speaking, contrasts in red meat intake exceeding 80-100g/day are typically required on a per-cohort basis to reveal the increased risk of cardiovascular disease mortality or even all-cause mortality. Contrasts that fall below this threshold often do not provide for the statistical power that is necessary to obtain a statistically significant estimate.
|
||||
|
||||
Brian's own reference also confirms that meat intake in Asian populations is generally quite a bit lower than the United States.
|
||||
|
||||
![][image3]
|
||||
[image3]: /blog/sapiendiet/image3.png
|
||||
|
||||
>_Per capita beef consumption has decreased to some degree in the past decade in the United States but still remains substantially higher than that in Asian countries. Beef consumption increased in China, Japan, and Korea from 1970 to 2007._
|
||||
|
||||
In actuality, when we select Asian populations with the widest contrasts in red meat intake, with sound multivariable adjustment models, appropriate population ages, and adequate follow-up time, we see the increase in total mortality with red meat very clearly [[5](https://pubmed.ncbi.nlm.nih.gov/33320898/)]. Even when diet and lifestyle covariates are balanced between ranges of intake. These results are also consistent with results we see in American cohorts that also balance diet and lifestyle covariates reasonably well, such as the Nurse's Health Study [[6](https://pubmed.ncbi.nlm.nih.gov/22412075/)].
|
||||
|
||||
**Potential Contradiction**
|
||||
|
||||
Additionally, Brian has [stated publicly](https://twitter.com/FoodLiesOrg/status/1419347985935257601?s=20&t=_2uz8-vTlkgxnFPP4DCqtg) that steak is a good source of iron and can protect against iron deficiency. This claim is in accord with the available evidence on red meat consumption and iron deficiency anemia, with unprocessed red meat associating with a 20% decreased risk of anemia in the UK Biobank cohort [[7](https://pubmed.ncbi.nlm.nih.gov/33648505/)]. Interestingly, unprocessed red meat was also associated with a statistically significant increase in the risk of many other diseases as well.
|
||||
|
||||
![][image4]
|
||||
[image4]: /blog/sapiendiet/image4.png
|
||||
|
||||
If the methods were sensitive enough to detect the inverse association with iron deficiency anemia, why not also conclude that the methods were also sensitive enough to detect the effect on heart disease as well? Why form differential beliefs about the causal nature of these associations?
|
||||
|
||||
Furthermore, the association between red meat intake and heart disease is observable when meta-analyzed as well [[8](https://pubmed.ncbi.nlm.nih.gov/34284672/)]. For every 50g/day increase in red meat intake, there was a statistically significant dose-dependent relationship between red meat intake and heart disease.
|
||||
|
||||
Almost all of the most highly powered studies found positive associations between heart disease risk and red meat. Altogether, those studies also had the highest contrast in red meat, with Asian countries having the lowest contrast, as mentioned earlier. The majority of the included studies included adjustments for diet quality, used validated food frequency questionnaires, and had adequate follow-up time. The greatest increase in risk was found among studies with follow-up times exceeding 10 years. Removing all of the more poorly powered cohorts leaves us with a remarkably consistent relationship overall.
|
||||
|
||||
![][image5]
|
||||
[image5]: /blog/sapiendiet/image5.png
|
||||
|
||||
This one change results in a 38.3% attenuation in the I², going from 41.3% to 13%. Which suggests that of the variance that was attributable to heterogeneity, poor statistical power could explain about 68% of it.
|
||||
|
||||
Lastly, when cohort studies from around the world are meta-analyzed, we see the same thing for all cause mortality [[9](https://pubmed.ncbi.nlm.nih.gov/24148709/)]. Overall, there is a non-significant increase in all-cause mortality risk when comparing the lowest red meat intakes to the highest red meat intakes. Whiteman, et al. (1999) was the only study that found a statistically significant decrease in risk, and is the sole reason for the non-significant finding.
|
||||
|
||||
However, Whiteman, et al. also had one of the shortest follow-up times, one of the youngest populations (and thus one of the lowest death rates), and used a very poor adjustment model (only adjusting for three confounders). If a leave-one-out analysis is performed that excludes Whiteman, et al., a different picture is painted.
|
||||
|
||||
![][image6]
|
||||
[image6]: /blog/sapiendiet/image6.png
|
||||
|
||||
Anybody who wishes to complain about this reanalysis is free to try to explain to me why increasing the potential for bias with poor multivariable adjustment is a desirable thing. But, it probably doesn't matter anyway. This meta-analysis was published in 2014, and more cohort studies have been published since then. If we add those results to the original forest plot conducted by Larsson et al., we would still get significant results.
|
||||
|
||||
![][image7]
|
||||
[image7]: /blog/sapiendiet/image7.png
|
||||
|
||||
**Claim #3 (**[**5:22**](https://youtu.be/VYTjwPcNEcw?t=322)**):**
|
||||
|
||||
>_We cannot use correlational studies to try to say that meat is bad._
|
||||
|
||||
**Category Error**
|
||||
|
||||
It's unclear what this means. As per the Duhem-Quine thesis, all scientific findings are correlational in one way or another [[10](https://en.wikipedia.org/wiki/Duhem%E2%80%93Quine_thesis)]. As such, the state of being "correlational" is not a differential property between any two modes of scientific investigation. For example, intervention studies are a form of observational study, because you're observing what happens when you intervene. So this objection just seems like confusion, because if there ever was a study that showed meat to be "bad", it would be straightforwardly correlational in nature. Assuming that what Brian means by "correlational studies" is actually just nutritional epidemiology, even that would still be wrong.
|
||||
|
||||
In 2021, Shwingshakl et al. published an enormous meta-analysis that compared the results of 950 nutritional randomized controlled trials to results from 750 prospective cohort studies [[11](https://pubmed.ncbi.nlm.nih.gov/34526355/)]. In the aggregate, results from nutritional epidemiology are consistent with results from nutritional randomized controlled trials approximately 92% of the time when comparing intakes to intakes (omitting supplements).
|
||||
|
||||
![][image8]
|
||||
[image8]: /blog/sapiendiet/image8.png
|
||||
|
||||
Across 23 comparisons of meta-analytically summated findings from both bodies of evidence, only 2 comparisons showed discordance. This means that nutritional epidemiology tends to replicate in randomized controlled trials in the supermajority of cases.
|
||||
|
||||
If not randomized controlled trials, I have no idea where Brian plants his goalpost for high evidential quality. Nevertheless, current evidence suggests that nutritional epidemiology is highly validated methodology if randomized controlled trials are used as the standard. If one places high credence in randomized controlled trials, it's unclear why they wouldn't also place high credence in nutritional epidemiology.
|
||||
|
||||
**Claim #4 (**[**5:36**](https://youtu.be/VYTjwPcNEcw?t=336)**):**
|
||||
|
||||
>_73% of hunter gatherers get over 50% of their diet from animal foods._
|
||||
|
||||
**Non Sequitur**
|
||||
|
||||
I'm not sure why we should care. If this isn't cashing out into some sort of health claim, then it seems very much like a non sequitur. Assuming this is implying something about the health value of hunter-gatherer diets, it is also misleading. I've discussed [here](https://www.the-nutrivore.com/post/should-we-eat-like-hunter-gatherers) why positions like this ultimately fail.
|
||||
|
||||
**Claim #5 (**[**5:51**](https://youtu.be/VYTjwPcNEcw?t=351)**):**
|
||||
|
||||
>_We have beef as this highly bioavailable, easily digestible protein, and beans is one example of something that is touted as a pretty high protein food. But this is not the case._
|
||||
|
||||
**False Claim**
|
||||
|
||||
This is just whacky, and it seems to be based on data from a 1950s textbook to which I cannot get access. However, we don't really need to in order to address this claim. Let's take a look at this table that Brian has generated.
|
||||
|
||||
![][image9]
|
||||
[image9]: /blog/sapiendiet/image9.png
|
||||
|
||||
First of all, if these two foods are weight-standardized, then the protein content of navy beans only makes sense if the navy beans were considered raw. Navy beans can't even be consumed raw because they're hard as fucking rocks. So, immediately this table is potentially misleading, having possibly presented an unrealistic comparison between these two foods. But, that's not the most egregious part of Brian's table. It's actually completely unnecessary to consider digestibility and biological value separately as Brian has [[12](https://pubmed.ncbi.nlm.nih.gov/26369006/)].
|
||||
|
||||
> _"The PDCAAS value should predict the overall efficiency of protein utilization based on its two components, digestibility and biological value (BV; nitrogen retained divided by digestible nitrogen). The principle behind this approach is that the utilization of any protein will be first limited by digestibility, which determines the overall amount of dietary amino acid nitrogen absorbed, and BV describes the ability of the absorbed amino acids to meet the metabolic demand."_
|
||||
|
||||
Biological value is inherently captured by both of the standard protein quality scores, the protein digestibility-corrected amino acid score (PDCAAS) and the digestible indispensable amino acid score (DIAAS). This means that if you want to represent all the things that matter for a given protein in isolation (such as digestibility, biological value, and limiting amino acids), all you need is either a PDCAAS or DIAAS value for the proteins in question. But, the DIAAS is probably better.
|
||||
|
||||
![][image10]
|
||||
[image10]: /blog/sapiendiet/image10.png
|
||||
|
||||
Aggregating DIAAS data across multiple protein foods paints a completely different picture than the one that Brian cobbled together [[13](https://pubmed.ncbi.nlm.nih.gov/28748078/)][[14](https://pubmed.ncbi.nlm.nih.gov/33333894/)][[15](https://pubmed.ncbi.nlm.nih.gov/34476569/)][[16](https://onlinelibrary.wiley.com/doi/full/10.1002/fsn3.1809)]. Some plant proteins actually do quite well. But what are these numbers really representing? Ultimately the scores are going to be truncated by limiting amino acids more than any other parameter, and pairing complementary proteins will increase the DIAAS value [[17](https://pubmed.ncbi.nlm.nih.gov/34685808/)]. In fact, this is also true of the PDCAAS, as combining different lower-scoring plant proteins will often result in perfect scores [[18](https://www.2000kcal.cz/lang/en/static/protein_quality_and_combining_pdcaas.php)].
|
||||
|
||||
![][image11]
|
||||
[image11]: /blog/sapiendiet/image11.png
|
||||
|
||||
If beef is awesome in virtue of it getting a perfect score for protein digestibility, biological value, and limiting amino acids, then navy beans and wild rice must also be awesome too. If not, then I don't know what the hell Brian is talking about, or why he even brings the point up. It's also worth pointing out that certain animal foods, like collagen, actually score a zero on the PDCAAS as well.
|
||||
|
||||
As an aside, even if plant protein was generally inferior to animal protein by some evaluative standard (such as the PDCAAS or DIAAS), it would not necessarily mean that it would be more desirable to consume animal protein over plant protein. That would depend on one's goals. In fact, animal protein is associated with a number of chronic diseases in a dose-dependent manner, whereas plant protein is inversely associated, also in a dose-dependent manner [[19](https://pubmed.ncbi.nlm.nih.gov/32699048/)]. This also holds true for Japanese populations, by the way [[20](https://pubmed.ncbi.nlm.nih.gov/31682257/)].
|
||||
|
||||
**Claim #6 (**[**6:35**](https://youtu.be/VYTjwPcNEcw?t=395)**):**
|
||||
|
||||
>_744 studies were excluded from consideration in the WHO's evaluation of meat as a carcinogen._
|
||||
|
||||
**Red Herring**
|
||||
|
||||
Here, Brian is referring to an analysis on red meat and colorectal cancer risk that was conducted by the International Agency for Research on Cancer (IARC) [[21](https://pubmed.ncbi.nlm.nih.gov/26514947/)]. If you dig into the IARC's methods, you can see that they had very specific, sound inclusion-exclusion criteria, which involved selecting cohort studies with the widest contrasts in red meat intake, clear definitions, sufficient event rates and participant numbers, and adequate adjustment models.
|
||||
|
||||
>_A meta-analysis including data from 10 cohort studies reported a statistically significant dose-response association between consumption of red meat and/or processed meat and cancer of the colorectum. The relative risks of cancer of the colorectum were 1.17 (95% CI, 1.05-1.31) for an increase in consumption of red meat of 100 g/day and 1.18 (95% CI, 1.10-1.28) for an increase in consumption of processed meat of 50 g/day. Based on the balance of evidence, and taking into account study design, size, quality, control of potential confounding, exposure assessment, and magnitude of risk, an increased risk of cancer of the colorectum was seen in relation to consumption of red meat and of processed meat."
|
||||
|
||||
This is very sensible methodology for anyone familiar with epidemiology. Additionally, this is not the only reason Brian's claim is misleading, because there are not 744 cohort studies or RCTs combined on this question. Full stop. I can only imagine that he is referring to mechanistic studies or other weaker forms of evidence. He's never fully unpacked this claim, to my knowledge.
|
||||
|
||||
**Claim #6 (**[**7:05**](https://youtu.be/VYTjwPcNEcw?t=425)**):**
|
||||
|
||||
> _There were 15 studies showing that red meat was good and 14 studies showing that red meat was bad. I mean, it's basically a toss-up._
|
||||
|
||||
**Red Herring**
|
||||
|
||||
Again, the IARC had very strict inclusion-exclusion criteria, and of the studies that met those criteria, the majority of them found statistically significant associations between red meat and colorectal cancer. This is after multivariable adjustment for known confounders and covariates, in populations that we'd expect to have an increased risk. It's straight up expected that not all of the available studies on a given research question will be included in a meta-analysis.
|
||||
|
||||
**Red Herring**
|
||||
|
||||
Brian then goes on to claim that the results are a toss-up simply because there were 15 studies ostensibly showing that red meat was "good" and 14 studies ostensibly showing that red meat was "bad". To imply that this is necessarily a "toss up" is just pure confusion. Even if you have double the studies showing that red meat is "good", that doesn't necessarily mean there is a lower probability that red meat is "bad". It depends on the strength of the studies included. Consider this forest plot.
|
||||
|
||||
![][image12]
|
||||
[image12]: /blog/sapiendiet/image12.png
|
||||
|
||||
Here we see that despite the fact that there is a 2:1 ratio of studies that show a decreased risk with red meat to studies that show an increased risk with red meat, the summary effect measure still points toward a statistically significant increase in risk. This is because not every study has equal power or precision. Some findings are just less certain than others.
|
||||
|
||||
**Claim #7 (**[**7:22**](https://youtu.be/VYTjwPcNEcw?t=442)**):**
|
||||
|
||||
>_The risk factor of cancer from meat is 0.18%, whereas the risk factor of cancer from smoking is 10-30%._
|
||||
|
||||
**Unintelligible**
|
||||
|
||||
This is truly bizarre. It's incredibly unclear what Brian is trying to say here, and he was unable to unpack it to me in [our verbal debate](https://www.youtube.com/watch?v=S8p39Gwct1Y), so I'm not even sure he knowns what the fuck he means. His use of the term "risk factor" here makes the utterance appear like a category error. However, if I really stretch my imagination, I may be able to cobble together an interpretation that isn't gibberish.
|
||||
|
||||
**Equivocation**
|
||||
|
||||
Firstly, this appears to be just a straight up equivocation of cancer types. Colorectal cancer and lung cancer are two different diseases, and the prevalence of these diseases are different in the general population. If Brian's criticism is that the relative risk of lung cancer from smoking is higher than the relative risk of colorectal cancer from red meat, then he's just confused. Massive differences in the magnitude of those effect estimates are expected, as the prevalence of a given disease will determine the maximum possible relative risk [[22](https://pubmed.ncbi.nlm.nih.gov/21402371/)].
|
||||
|
||||
![][image13]
|
||||
[image13]: /blog/sapiendiet/image13.png
|
||||
|
||||
Let's take a look at the prevalence of these diseases in Canada [[23](https://cancer.ca/en/cancer-information/cancer-types)]. The prevalence of lung cancer among Canadian non-smokers is 1 in 84 (1.19% prevalence). Prevalence of colorectal cancer, assuming red meat has nothing to do with colorectal cancer, is 1 in 16 (6.25% prevalence). The baseline prevalence of lung cancer is much smaller than the baseline prevalence of colorectal cancer, so comparing the two is dubious.
|
||||
|
||||
In the case of lung cancer and colorectal cancer, the maximum possible relative risks would be ~53 and ~16, respectively. So it's not even mathematically possible for the relative risk of colorectal cancer from red meat to even approach the upper bounds for the relative risk of lung cancer from smoking that Brian submitted (assuming he meant 30x and not 30%).
|
||||
|
||||
For this reason, it's best that we do an apples to apples comparison. In a massive 2009 analysis by Huxley, et al., which helped inform the IARC's analysis on meat and cancer, 26 cohort studies were included in their meta-analytic summation [[24](https://pubmed.ncbi.nlm.nih.gov/19350627/)]. Overall they showed a statistically significant 21% increase in risk of colorectal cancer with unprocessed red meat.
|
||||
|
||||
However, they also included an analysis on smoking, which found a statistically significant 16% increase in the risk of colorectal cancer with smoking as well. Yes, that is right— there was a slightly stronger association between red meat and colorectal cancer than there was between smoking and colorectal cancer. But the two were likely non-inferior. Huxley et al. also found around the same magnitude of effect for many other exposures.
|
||||
|
||||
![][image14]
|
||||
[image14]: /blog/sapiendiet/image14.png
|
||||
|
||||
What's the symmetry breaker? Why form a causal belief with regards to smoking or physical inactivity or obesity and not red meat? If Brian argues that he doesn't infer causality for any of the exposures with non-inferior effect sizes to red meat, then the appropriate thing to do is honestly just to laugh at his absurdity and move on.
|
||||
|
||||
If Brian argues that red meat has never been studied in the context of a junk-free diet, then we could just argue it in the opposite direction. For example, the smoking literature is also notoriously unadjusted for dietary covariates (which is something not many people appreciate about that body of evidence). As such, smoking arguably has never been studied in the context of a meat-free diet either, so perhaps the data on smoking is simply biased by red meat. Again, we need symmetry breakers.
|
||||
|
||||
**Claim #8 (**[**7:37**](https://youtu.be/VYTjwPcNEcw?t=457)**):**
|
||||
|
||||
> _Ancestral foods are better than processed foods._
|
||||
|
||||
**Appeal to Nature**
|
||||
|
||||
Why should we be using anthropological data about ancestral diets to inform best practice in terms of modern diets for modern humans? And why is the property of being ancestral a reasonable sufficiency criteria for a food to be "better" than processed foods? This seems like a non sequitur.
|
||||
|
||||
Favouring whole foods is heuristic, and not a rule. There are plenty of examples of processed foods being superior to whole foods, even foods that we could identify as ancestral. In fact, there are been specific analyses investigating the differential contributions of animal-based foods (red meat, poultry, fish, dairy, and eggs) and ultra-processed foods to disease risk within the context of a health-conscious population [[25](https://pubmed.ncbi.nlm.nih.gov/35199827/)].
|
||||
|
||||
![][image15]
|
||||
[image15]: /blog/sapiendiet/image15.png
|
||||
|
||||
Overall, ultra-processed foods and animal foods are non-inferior to one another for CVD mortality and cancer mortality risk. Animal based foods also seem to associate with the risk of endocrine disorders like T2DM, whereas ultra-processed foods did not. Once again, we require symmetry-breakers. Why form the belief that ultra-processed foods increase the risk of these diseases and not animal foods?
|
||||
|
||||
# ENVIRONMENTAL CLAIMS
|
||||
|
||||
**Claim #9 (**[**10:13**](https://youtu.be/VYTjwPcNEcw?t=613)**):**
|
||||
|
||||
>_Grazing agricultural systems are better for the environment and sequester more carbon._
|
||||
|
||||
**False Claim**
|
||||
|
||||
This claim is as hilarious as it is vague. Firstly, better compared to what? According to Brian's reference (which was an analyses of the association between White Oak Pastures' regenerative grazing methodology and carbon balance) it was assumed that carbon sequestration estimates were exclusively from beef, yet poultry accounted for almost half of the carcass weight (46.5%) of the entire system [[26](https://www.frontiersin.org/articles/10.3389/fsufs.2020.544984/full)]. They also can’t even attribute the sequestration to cows because the study was cross-sectional in design.
|
||||
|
||||
This study isn't actually investigating temporal changes in soil carbon at all. To make matters worse, the author's darling figure, −4.4kg CO₂-e kg carcass weight−1 per year, was actually just produced from thin air, and the cross-sectional association between years of grazing and soil carbon stocks between pasturelands was just assumed to be reflecting grazing-mediated soil carbon sequestration. Utterly misleading sophistry.
|
||||
|
||||
> _Importantly, if we were to attribute the soil C sequestration across the chronosequence to only cattle, MSPR beef produced in this system would be a net sink of −4.4 kg CO2-e kg CW−1 annually._
|
||||
|
||||
Even just ignoring the fact that this methodology creates mathematically atrocious pigs and chickens in terms of carbon balance in their model, the data provided suggests that 20 years worth of carbon sequestration are roughly equal to three years of plant composting. In second figure of the publication, they show a cross-sectional analysis of seven different degraded lands (previously used for crops) that are in the process of being restored over a varied number of years.
|
||||
|
||||
![][image16]
|
||||
[image16]: /blog/sapiendiet/image16.png
|
||||
|
||||
>_In years 1–3, these fields are minimally grazed and receive 1 cm of compost ha−1 yr−1. After year 3, exogenous inputs (hay and compost) were ceased, and the regeneration strategy shifted toward an animal-only approach, whereby animals were the primary mechanism of improving the land._
|
||||
|
||||
The third dot is roughly equal to that of the seventh dot on the chart, which represents three years of plant composting and 20 years of grazing, respectively. If we're assuming a causal relationship between grazing and soil carbon stock, why not also assume a causal relationship between composting and soil carbon stock?
|
||||
|
||||
If composting can increase soil carbon sequestration that much, why are they even trying to argue for grazing agriculture as a solution? It would appear that plant agriculture waste could be a viable solution for restoring these degraded lands as well. This is also just granting that these associations are reflective of soil carbon sequestration over time at all, which they may not be. Again, this analysis is cross-sectional.
|
||||
|
||||
It's convenient that the time scale of the investigation by Rowntree, et al. caps out at 20 years, because current literature suggests that there is a soil carbon saturation point at around 20 years, after which pasture grazing systems will yield diminishing returns.
|
||||
|
||||
![][image17]
|
||||
[image17]: /blog/sapiendiet/image17.png
|
||||
|
||||
Here we see three different scenarios for soil carbon sequestration rates from grazing agriculture. Even under the most generous estimates (the larger black hashed line), soil carbon sequestration plateaus at around 20 years.
|
||||
|
||||
However, current estimates suggest that if we switch to more plant-predominant diets by the year 2050, we could reforest a large proportion of current pastureland, which acts as a substantial carbon sink (~547GtCO2) [[27](https://www.nature.com/articles/s41893-020-00603-4)]. The effect of that over 30 years is to neutralize about 15 years of fossil fuel emissions and 12 years of total world GHG emissions.
|
||||
|
||||
If we switch to plant-predominant diets by 2050 we could sequester -14.7 GtCO2 per year by reforesting pasture land, compared to other agricultural methods that make use of grazing land for pasture. Merely the introduction of pasture grazing increases land use by almost double compared to a vegan agricultural system [[28](https://experts.syr.edu/en/publications/carrying-capacity-of-us-agricultural-land-ten-diet-scenarios)].
|
||||
|
||||
![][image18]
|
||||
[image18]: /blog/sapiendiet/image18.png
|
||||
|
||||
In fact, there are stepwise decreases in the per-person carrying capacity of different agricultural scenarios as more pastureland is included in the model. However, vegan agricultural scenarios were largely comparable to both dairy-inclusive and egg-inclusive vegetarian models.
|
||||
|
||||
![][image19]
|
||||
[image19]: /blog/sapiendiet/image19.png
|
||||
|
||||
|
||||
As mentioned earlier in this article, there are plant agriculture methods that are also touted as "regenerative", that also may have greater soil carbon sequestration potential per hectare than current "regenerative" grazing livestock methods [[29](https://www.nature.com/articles/ncomms6012)]. It would be interesting to see a head-to-head comparison of wheat versus meat, using "regenerative" methodology, on soil carbon sequestration overall.
|
||||
|
||||
**Claim #10 (**[**13:15**](https://youtu.be/VYTjwPcNEcw?t=795)**):**
|
||||
|
||||
>_We have enough land for grazing agricultural systems._
|
||||
|
||||
**False Claim**
|
||||
|
||||
It has been calculated that even if all grasslands were repurposed for grazing, this could provide everyone on earth with 7-18g/day of animal protein per person on Earth [[30](https://www.oxfordmartin.ox.ac.uk/publications/grazed-and-confused/)]. The authors also provided a hyper-idealized, candy-land scenario they also calculated that 80g/day of animal protein per person on Earth. However, this would require all pasturable land on Earth being used. As an aside, the authors also calculated an additional scenario that included waste from plant agriculture, but it probably won't be very relevant to Brian's idealized world, because plant agriculture would be extremely minimal on the Sapien Diet™.
|
||||
|
||||
The remaining two scenarios encounter some issues when we think of what would be required to sustain people on meat-heavy diets, because 80g of protein from the fattiest beef still would not provide enough calories per person. We would appear to need multiple planets. But we should use a grass-fed example to do the calculations, so I've chosen White Oak Pastures' ground beef as the example meat. We'll also be multiplying the results by 2.5 to account for the extra land used by rotational grazing and/or holistic management [[26](https://www.frontiersin.org/articles/10.3389/fsufs.2020.544984/full)].
|
||||
|
||||
![][image20]
|
||||
[image20]: /blog/sapiendiet/image20.png
|
||||
|
||||
|
||||
Under no plausible scenario (calculable from the 'Grazed and Confused?' report) would either continuous grazing or rotational grazing be tenable on a global scale. Even if the calorie allotment for animal foods in the EAT Lancet diet was occupied only by grass-fed beef, we'd still be exceeding the carrying capacity of the Earth by 70% for continuous grazing and 325% for rotational grazing. As for Brian's pet diet, the Sapien Diet™, we'd need over 10 Earths in the optimistic plausible scenario.
|
||||
|
||||
Essentially, we would need to figure out a way to extend the pasturable land beyond the available land on Earth. Perhaps we could do this by terraforming Mars or ascending to a type 2 civilization on the Kardashev scale by building a megastructure in space, such as a Dyson sphere or an O'Neill cylinder. But, those options don't sound very ancestral at all.
|
||||
|
||||
![][image21]
|
||||
[image21]: /blog/sapiendiet/image21.png
|
||||
|
||||
We're not even scratching the surface, though. The authors of 'Grazed and Confused?' likely did not consider the suitability of each grassland in their calculation, because current suitability thresholds are set for crop production, rather than livestock. The issue is that grass itself could be considered a crop, so it's unclear why suitability considerations that have been established for crop production wouldn't also apply to pasture-raised animal production.
|
||||
|
||||
The IIASA/FAO define the suitability of a given grassland as a threshold of a 25% ratio of actual yield per acre and potential yield per acre [[31](https://pure.iiasa.ac.at/id/eprint/13290/)]. Had these suitability criteria been considered by the authors of 'Grazed and Confused?', their models likely would have produced much smaller estimates. This is because much of the available grassland is either unsuitable or poorly suitable to begin with.
|
||||
|
||||
![][image22]
|
||||
[image22]: /blog/sapiendiet/image22.png
|
||||
|
||||
These suitability criteria have been used by livestock agriculture advocates to argue against the scalability of crop agriculture and for the scalability of grazing-based livestock agriculture [[32](https://www.sciencedirect.com/science/article/abs/pii/S2211912416300013)]. However, [Avi Bitterman](https://twitter.com/AviBittMD) demonstrated on his [Discord server](https://discord.gg/YtfQNPnk) that these individuals are not symmetrically applying this standard and it would actually turn out that current "regenerative" grazing systems wouldn't be likely to even meet the suitability standards themselves.
|
||||
|
||||
According to figures produced by White Oak Pastures, their "regenerative" grazing system is far less efficient than conventional feedlot approaches [[33](https://blog.whiteoakpastures.com/hubfs/WOP-LCA-Quantis-2019.pdf)]. Overall, White Oak Pastures uses 150% more land than conventional approaches to yield only about 20% of what a conventional farm can produce, and only 90% of the average slaughter weight.
|
||||
|
||||
![][image23]
|
||||
[image23]: /blog/sapiendiet/image23.png
|
||||
|
||||
This would give us a "suitability" estimate of around 7%, which would likely drastically reduce the amount of grassland that would be considered suitable for "regenerative" grazing agriculture as well. It would be doubly important to adhere to this standard when critiquing "regenerative" plant agricultural methods, in order to ensure an apples-to-apples comparison [[29](https://www.nature.com/articles/ncomms6012)].
|
||||
|
||||
**Claim #11 (**[**13:54**](https://youtu.be/VYTjwPcNEcw?t=834)**):**
|
||||
|
||||
> _If we don't use all this cropland for corn, wheat, and soy...we can use some of this land for cows._
|
||||
|
||||
**False Claim**
|
||||
|
||||
Here, Brian presents us a with figure from the USDA showing the available cropland in the United States as of 2007, and suggests that we simply have enough land for "regenerative" grazing. No analysis or even conceptual model of how this could be done was actually provided. He just expects us to take it for granted that the claim is true. But is it actually true?
|
||||
|
||||
As with the issues for this narrative that were entailed from the land requirement estimates detailed in the 'Grazed and Confused?' report, this narrative again encounters similar issues here. Firstly, a complete grazing agriculture scenario has been modeled, and the results suggest that the United States wouldn't get anywhere close to plausibly being able to meet their current demand for beef with grazing agriculture [[34](https://iopscience.iop.org/article/10.1088/1748-9326/aad401)]. We'd simply need more land. About 30% more land.
|
||||
|
||||
> _"Increases in cattle population, placements, and slaughter rates are demonstrated in figure 2. The increased slaughtering and placement numbers would also require a 24% increase in the size of the national beef cow-calf herd, proportional to the increased annual grass-finishing placement rate, in order to provide additional cattle to stock the grass-finishing stage. Increases in both the cow-calf herd and the grass-finishing population together would result in a total increase to the US cattle population of an additional 23 million cattle, or 30% more than the current US beef cattle population as a whole"_
|
||||
|
||||
![][image24]
|
||||
[image24]: /blog/sapiendiet/image24.png
|
||||
|
||||
If Brian wants to criticize vegans for indulging idealized pie-in-the-sky fantasies, what in the sweet holy blue fuck is this shit? The United States can't maintain their current demands for beef with the system that Brian is proposing. This is doubly problematic if you consider that the White Oak Pastures model for which Brian advocates probably requires even more land than the conventional grazing methods included in the above model. This means that 30% could very well be an underestimate.
|
||||
|
||||
# ETHICAL CLAIMS
|
||||
|
||||
**Claim #12 (**[**19:11**](https://youtu.be/VYTjwPcNEcw?t=1151)**):**
|
||||
|
||||
> _Vegans kill animals too. It's death on a plate, there's just no blood._
|
||||
|
||||
**Appeal to Hypocrisy**
|
||||
|
||||
It's not clear what point this is trying to make. It seems like a failed appeal to hypocrisy to me. But, let's try to tackle the proposition in the most charitable way possible. Let's assume that Brian means to say that the Sapien Diet™ leads to fewer animal deaths than vegan diets that rely on plant agriculture (which is a claim that he has made before). In this case, this is just an empirical claim and needs to be supported by some sort of evidence.
|
||||
|
||||
In Brian's presentation, he supports this claim with a study of wood mouse predation after harvest, which showed that up to 80% of mice were preyed upon by predators upon the harvesting of cereal crops [[35](https://www.sciencedirect.com/science/article/abs/pii/000632079390060E?via%3Dihub)]. What Brian isn't taking into account is that this can actually be used to are for less mouse predation on cropland as opposed to pastureland. Let me explain.
|
||||
|
||||
If you cut down your crop, you will expose the mice to predation. This is true. However, this also applies to pastureland. On pastureland, there is no substantial amount of tall forage that mice can use for shelter. The mice are exposed all year round. Which actually allows for the possibility that cropland could temporarily shelter mice from predators in a way that pastureland can't.
|
||||
|
||||
Furthermore, during [my debate](https://www.youtube.com/watch?v=S8p39Gwct1Y) with Brian, his cited evidence was the single cow that was killed when he paid a visit to his friend's cattle farm. Needless to say, this is not very good evidence, and this is not the evidence we will be using to steelman Brian's position. Instead, let's actually look at literature that compares the wildlife carrying capacity of plant verses grazing agricultural scenarios.
|
||||
|
||||
In 2020, Tucker et al. published a comprehensive comparative analysis of mammalian populations across a number of human-modified areas, such as cropland and pastureland [[36](https://onlinelibrary.wiley.com/doi/full/10.1111/ecog.05126)]. Overall, their findings suggest that there is higher taxonomic diversity with increasing pastureland as opposed to increasing cropland.
|
||||
|
||||
![][image25]
|
||||
[image25]: /blog/sapiendiet/image25.png
|
||||
|
||||
In the absence of countervailing data, this actually counts against the hypothesis that pastureland entails less animal death than cropland. This is because increasing taxonomic diversity implies a higher number of trophic strata. A higher number of trophic strata implies higher levels of predation. Higher levels of predation thus imply higher levels of animal death. The land with the lesser carrying capacity should probably be assumed to entail less death.
|
||||
|
||||
**Red Herring**
|
||||
|
||||
Even if we granted Brian that pastureland entailed fewer animal deaths than cropland, it's not clear why vegans should necessarily care. If veganism is understood to be a social and politic movement that aims to extend human rights to animals when appropriate, it's not clear how the deaths entailed from cropland would be incompatible to those goals. In fact, we'd likely tolerate the killing of people who threatened our food supply in comparable ways as well.
|
||||
|
||||
For example, if our food security was threatened by endless armies of humans with the intelligence of fieldmice or insects and we had no practical means of separating them from our food without killing them, I don't think we'd consider killing them to be a rights violation. In fact, we'd likely assume a similar defensive posture and similarly tolerate the loss of human life if a foreign country was also threatening to destroy our food. I doubt we'd even consider the enemy deaths entailed from such a defensive posture to constitute a rights violation. We have the right to defend our property against assailants, and I doubt Brian would even deny this himself.
|
||||
|
||||
**Claim #13 (**[**19:19**](https://youtu.be/VYTjwPcNEcw?t=1159)**):**
|
||||
|
||||
> _There is no life without death. This is how nature works...animals in nature either starve to death or are eaten alive...the animals are going to die either way, and it's not a good death...billions of people rely on animals for their livelihood._
|
||||
|
||||
**Potential Contradiction**
|
||||
|
||||
This proposition is simple to address. If Brian believes that we are ethically justified in breeding sentient animals into existence for the explicit purpose of slaughtering them for food, but we would not be justified in condemning humans to likewise treatment, he must explain why. This same question can be asked of him regardless of the justification he uses for animal agriculture.
|
||||
|
||||
During my debate with Brian, I submitted to him an argument for the non-exploitation of animals, which is essentially just a rephrasing of [Isaac Brown](https://twitter.com/askyourself92)'s [Name the Trait](https://drive.google.com/drive/folders/1tAjU2Bv1tsGbNLA2TfJesgbIh8JKh9zc) argument.
|
||||
|
||||
![][argument1]
|
||||
[argument1]: /blog/sapiendiet/argument1.png
|
||||
|
||||
This argument for non-exploitation simply requires one to identify the property that is true of humans that also is untrue of animals, that if true of humans, would cause humans to lose sufficient moral value, such that we’d be justified in slaughtering them for food as well. Brian rejected P3, stating that "consciousness" was the property true of humans, but untrue of animals, such that animals were ethical to exploit for food but humans were not. This fails and entails a contradiction on Brian's part, because consciousness is not a differential property between humans and the animals he advocates farming for food.
|
||||
|
||||
Thank you for reading! If you like what you've read and want help me create more content like this, consider pledging your [Support](https://www.uprootnutrition.com/donate). Every little bit helps! I hope you found the content interesting!
|
||||
|
||||
# BIBLIOGRAPHY"""
|
||||
, articleReferences =
|
||||
[ { author = "Cairo, Alberto"
|
||||
, title = "Visualizing Amalgamation Paradoxes and Ecological Fallacies"
|
||||
, journal = ""
|
||||
, year = "2018"
|
||||
, link = "http://www.thefunctionalart.com/2018/07/visualizing-amalgamation-paradoxes-and.html"
|
||||
}
|
||||
, { author = ""
|
||||
, title = "What the World Eats"
|
||||
, journal = "National Geographic"
|
||||
, year = ""
|
||||
, link = "http://www.nationalgeographic.com/what-the-world-eats/"
|
||||
}
|
||||
, { author = "Lo, Kenneth, et al."
|
||||
, title = "Prospective Association of the Portfolio Diet with All-Cause and Cause-Specific Mortality Risk in the Mr. OS and Ms. OS Study"
|
||||
, journal = "Nutrients"
|
||||
, year = "2021"
|
||||
, link = "https://doi.org/10.3390/nu13124360"
|
||||
}
|
||||
, { author = "Lee, Jung Eun, et al."
|
||||
, title = "Meat Intake and Cause-Specific Mortality: A Pooled Analysis of Asian Prospective Cohort Studies"
|
||||
, journal = "The American Journal of Clinical Nutrition"
|
||||
, year = "2013"
|
||||
, link = "https://doi.org/10.3945/ajcn.113.062638"
|
||||
}
|
||||
, { author = "Saito, Eiko, et al."
|
||||
, title = "Association between Meat Intake and Mortality Due to All-Cause and Major Causes of Death in a Japanese Population"
|
||||
, journal = "PloS One"
|
||||
, year = "2020"
|
||||
, link = "https://doi.org/10.1371/journal.pone.0244007"
|
||||
}
|
||||
, { author = "Pan, An, et al."
|
||||
, title = "Red Meat Consumption and Mortality: Results from 2 Prospective Cohort Studies"
|
||||
, journal = "Archives of Internal Medicine"
|
||||
, year = "2012"
|
||||
, link = "https://doi.org/10.1001/archinternmed.2011.2287"
|
||||
}
|
||||
, { author = "Papier, Keren, et al."
|
||||
, title = "Meat Consumption and Risk of 25 Common Conditions: Outcome-Wide Analyses in 475,000 Men and Women in the UK Biobank Study"
|
||||
, journal = "BMC Medicine"
|
||||
, year = "2021"
|
||||
, link = "https://doi.org/10.1186/s12916-021-01922-9"
|
||||
}
|
||||
, { author = "Papier, Keren, et al."
|
||||
, title = "Meat Consumption and Risk of Ischemic Heart Disease: A Systematic Review and Meta-Analysis"
|
||||
, journal = "Critical Reviews in Food Science and Nutrition"
|
||||
, year = "2021"
|
||||
, link = "https://doi.org/10.1080/10408398.2021.1949575"
|
||||
}
|
||||
, { author = "Larsson, Susanna C., and Nicola Orsini"
|
||||
, title = "Red Meat and Processed Meat Consumption and All-Cause Mortality: A Meta-Analysis"
|
||||
, journal = "American Journal of Epidemiology"
|
||||
, year = "2014"
|
||||
, link = "https://doi.org/10.1093/aje/kwt261"
|
||||
}
|
||||
, { author = ""
|
||||
, title = "Duhem–Quine Thesis"
|
||||
, journal = "Wikipedia"
|
||||
, year = "2022"
|
||||
, link = "https://en.wikipedia.org/w/index.php?title=Duhem%E2%80%93Quine_thesis&oldid=1105377595"
|
||||
}
|
||||
, { author = "Schwingshackl, Lukas, et al."
|
||||
, title = "Evaluating Agreement between Bodies of Evidence from Randomised Controlled Trials and Cohort Studies in Nutrition Research: Meta-Epidemiological Study"
|
||||
, journal = "BMJ (Clinical Research Ed.)"
|
||||
, year = "2021"
|
||||
, link = "https://doi.org/10.1136/bmj.n1864"
|
||||
}
|
||||
, { author = ""
|
||||
, title = "Dietary Protein Quality Evaluation in Human Nutrition. Report of an FAQ Expert Consultation"
|
||||
, journal = "FAO Food and Nutrition Paper"
|
||||
, year = "2013"
|
||||
, link = "https://www.fao.org/ag/humannutrition/35978-02317b979a686a57aa4593304ffc17f06.pdf"
|
||||
}
|
||||
, { author = "Nosworthy, Matthew G., et al."
|
||||
, title = "Determination of the Protein Quality of Cooked Canadian Pulses"
|
||||
, journal = "Food Science & Nutrition"
|
||||
, year = "2017"
|
||||
, link = "https://doi.org/10.1002/fsn3.473"
|
||||
}
|
||||
, { author = "Han, Fei, et al."
|
||||
, title = "Digestible Indispensable Amino Acid Scores (DIAAS) of Six Cooked Chinese Pulses"
|
||||
, journal = "Nutrients"
|
||||
, year = "2020"
|
||||
, link = "https://doi.org/10.3390/nu12123831"
|
||||
}
|
||||
, { author = "Fanelli, Natalia S., et al."
|
||||
, title = "Digestible Indispensable Amino Acid Score (DIAAS) Is Greater in Animal-Based Burgers than in Plant-Based Burgers If Determined in Pigs"
|
||||
, journal = "European Journal of Nutrition"
|
||||
, year = "2022"
|
||||
, link = "https://doi.org/10.1007/s00394-021-02658-1"
|
||||
}
|
||||
, { author = "Herreman, Laure, et al."
|
||||
, title = "Comprehensive Overview of the Quality of Plant‐ And Animal‐sourced Proteins Based on the Digestible Indispensable Amino Acid Score"
|
||||
, journal = "Food Science & Nutrition"
|
||||
, year = "2020"
|
||||
, link = "https://doi.org/10.1002/fsn3.1809"
|
||||
}
|
||||
, { author = "Han, Fei, et al."
|
||||
, title = "The Complementarity of Amino Acids in Cooked Pulse/Cereal Blends and Effects on DIAAS"
|
||||
, journal = "Plants (Basel, Switzerland)"
|
||||
, year = "2021"
|
||||
, link = "https://doi.org/10.3390/plants10101999"
|
||||
}
|
||||
, { author = ""
|
||||
, title = "PDCAAS Calculator - 2000KCAL"
|
||||
, journal = ""
|
||||
, year = ""
|
||||
, link = "https://www.2000kcal.cz/lang/en/static/protein_quality_and_combining_pdcaas.php"
|
||||
}
|
||||
, { author = "Naghshi, Sina, et al."
|
||||
, title = "Dietary Intake of Total, Animal, and Plant Proteins and Risk of All Cause, Cardiovascular, and Cancer Mortality: Systematic Review and Dose-Response Meta-Analysis of Prospective Cohort Studies"
|
||||
, journal = "BMJ (Clinical Research Ed.)"
|
||||
, year = "2020"
|
||||
, link = "https://doi.org/10.1136/bmj.m2412"
|
||||
}
|
||||
, { author = "Budhathoki, Sanjeev, et al."
|
||||
, title = "Association of Animal and Plant Protein Intake With All-Cause and Cause-Specific Mortality in a Japanese Cohort"
|
||||
, journal = "JAMA Internal Medicine"
|
||||
, year = "2019"
|
||||
, link = "https://doi.org/10.1001/jamainternmed.2019.2806"
|
||||
}
|
||||
, { author = "Bouvard, Véronique, et al."
|
||||
, title = "Carcinogenicity of Consumption of Red and Processed Meat"
|
||||
, journal = "The Lancet. Oncology"
|
||||
, year = "2015"
|
||||
, link = "https://doi.org/10.1016/S1470-2045(15)00444-1"
|
||||
}
|
||||
, { author = "Sainani, Kristin L."
|
||||
, title = "Understanding Odds Ratios"
|
||||
, journal = "PM & R: The Journal of Injury, Function, and Rehabilitation"
|
||||
, year = "2011"
|
||||
, link = "https://doi.org/10.1016/j.pmrj.2011.01.009"
|
||||
}
|
||||
, { author = ""
|
||||
, title = "Cancer Types"
|
||||
, journal = "Canadian Cancer Society"
|
||||
, year = ""
|
||||
, link = "https://cancer.ca/en/cancer-information/cancer-types"
|
||||
}
|
||||
, { author = "Huxley, Rachel R., et al."
|
||||
, title = "The Impact of Dietary and Lifestyle Risk Factors on Risk of Colorectal Cancer: A Quantitative Overview of the Epidemiological Evidence"
|
||||
, journal = "International Journal of Cancer"
|
||||
, year = "2009"
|
||||
, link = "https://doi.org/10.1002/ijc.24343"
|
||||
}
|
||||
, { author = "Orlich, Michael J., et al."
|
||||
, title = "Ultra-Processed Food Intake and Animal-Based Food Intake and Mortality in the Adventist Health Study-2"
|
||||
, journal = "The American Journal of Clinical Nutrition"
|
||||
, year = "2022"
|
||||
, link = "https://doi.org/10.1093/ajcn/nqac043"
|
||||
}
|
||||
, { author = "Rowntree, Jason E., et al."
|
||||
, title = "Ecosystem Impacts and Productive Capacity of a Multi-Species Pastured Livestock System"
|
||||
, journal = "Frontiers in Sustainable Food Systems"
|
||||
, year = "2020"
|
||||
, link = "https://www.frontiersin.org/articles/10.3389/fsufs.2020.544984"
|
||||
}
|
||||
, { author = "Hayek, Matthew N., et al."
|
||||
, title = "The Carbon Opportunity Cost of Animal-Sourced Food Production on Land"
|
||||
, journal = "Nature Sustainability"
|
||||
, year = "2021"
|
||||
, link = "https://doi.org/10.1038/s41893-020-00603-4"
|
||||
}
|
||||
, { author = "Peters, Christian J., et al."
|
||||
, title = "Carrying Capacity of U.S. Agricultural Land: Ten Diet Scenarios"
|
||||
, journal = "Elementa"
|
||||
, year = "2016"
|
||||
, link = "https://doi.org/10.12952/journal.elementa.000116"
|
||||
}
|
||||
, { author = "Gan, Yantai, et al."
|
||||
, title = "Improving Farming Practices Reduces the Carbon Footprint of Spring Wheat Production"
|
||||
, journal = "Nature Communications"
|
||||
, year = "2014"
|
||||
, link = "https://doi.org/10.1038/ncomms6012"
|
||||
}
|
||||
, { author = ""
|
||||
, title = "Grazed and Confused?"
|
||||
, journal = "Oxford Martin School"
|
||||
, year = ""
|
||||
, link = "https://www.oxfordmartin.ox.ac.uk/publications/grazed-and-confused/"
|
||||
}
|
||||
, { author = "Fischer, G., et al."
|
||||
, title = "Global Agro-Ecological Zones (GAEZ v3.0)- Model Documentation"
|
||||
, journal = ""
|
||||
, year = "2012"
|
||||
, link = "http://www.fao.org/soils-portal/soil-survey/soil-maps-and-databases/harmonized-world-soil-database-v12/en/"
|
||||
}
|
||||
, { author = "Mottet, Anne, et al."
|
||||
, title = "Livestock: On Our Plates or Eating at Our Table? A New Analysis of the Feed/Food Debate"
|
||||
, journal = "Global Food Security"
|
||||
, year = "2017"
|
||||
, link = "https://doi.org/10.1016/j.gfs.2017.01.001"
|
||||
}
|
||||
, { author = ""
|
||||
, title = "Carbon Footprint Evaluation of Regenerative Grazing At White Oak Pastures: Results Presentation"
|
||||
, journal = "Quantis - Environmental Sustainability Consultancy"
|
||||
, year = ""
|
||||
, link = "https://blog.whiteoakpastures.com/hubfs/WOP-LCA-Quantis-2019.pdf"
|
||||
}
|
||||
, { author = "Hayek, Matthew N., and Rachael D. Garrett"
|
||||
, title = "Nationwide Shift to Grass-Fed Beef Requires Larger Cattle Population"
|
||||
, journal = "Environmental Research Letters"
|
||||
, year = "2018"
|
||||
, link = "https://doi.org/10.1088/1748-9326/aad401"
|
||||
}
|
||||
, { author = "Tew, T. E., and D. W. Macdonald"
|
||||
, title = "The Effects of Harvest on Arable Wood Mice Apodemus Sylvaticus"
|
||||
, journal = "Biological Conservation"
|
||||
, year = "1993"
|
||||
, link = "https://doi.org/10.1016/0006-3207(93)90060-E"
|
||||
}
|
||||
, { author = "Tucker, Marlee A., et al."
|
||||
, title = "Mammal Population Densities at a Global Scale Are Higher in Human‐modified Areas"
|
||||
, journal = "Ecography"
|
||||
, year = "2021"
|
||||
, link = "https://doi.org/10.1111/ecog.05126"
|
||||
}
|
||||
]
|
||||
}
|
||||
2279
packages/website/frontend/src/Config/Pages/Blogs/MainBlog/SeedOils.elm
Executable file
2279
packages/website/frontend/src/Config/Pages/Blogs/MainBlog/SeedOils.elm
Executable file
File diff suppressed because it is too large
Load diff
260
packages/website/frontend/src/Config/Pages/Blogs/MainBlog/Shenangians.elm
Executable file
260
packages/website/frontend/src/Config/Pages/Blogs/MainBlog/Shenangians.elm
Executable file
|
|
@ -0,0 +1,260 @@
|
|||
module Config.Pages.Blogs.MainBlog.Shenangians exposing (articleShenanigans)
|
||||
|
||||
import Config.Pages.Blogs.Types exposing (BlogArticle)
|
||||
import Route.Path as Path
|
||||
|
||||
|
||||
articleShenanigans : BlogArticle
|
||||
articleShenanigans =
|
||||
{ articleName = "Cuckery 101: Cate Shanahan's Masterclass in Debate Dodging"
|
||||
, articleLink = Path.toString Path.Blog_Shenanigans
|
||||
, articleAuthor = "Nick Hiebert"
|
||||
, isNewTabLink = False
|
||||
, hasReferences = False
|
||||
, hasTableOfContents = True
|
||||
, articleImage = "shenanigans"
|
||||
, articlePublished = "Jun 6, 2024"
|
||||
, articleBody = """
|
||||
It's basically a sound induction at this point that anti-seed oil clowns won't debate me. My comprehensive, 15,000+ word, 200+ reference [article](https://www.the-nutrivore.com/post/a-comprehensive-rebuttal-to-seed-oil-sophistry) on seed oils is almost three years old, and since it was published, nobody from the opposition has offered even a shred of substantive criticism toward it. A few have tried, but ultimately their efforts were akin to taking halfhearted swats at low-hanging fruit and ultimately failing, rather than actually meaningfully engaging with my core findings and the arguments underpinning my interpretations. They really are just a pathetically weak lot of human beings.
|
||||
|
||||
At the risk of sounding self-aggrandizing, I think I have a pretty good idea why these people won't debate me—I have the tools to dismantle them. I'm well-versed on the relevant empirics, I'm intimately familiar with several formal systems of reasoning, I use semantic analysis to make sure my interlocutor's term meanings and usages are understood and remain consistent, I have decent knowledge of philosophy and, more specifically, scientific epistemology, and I deploy an algorithmic debate strategy. I am essentially kryptonite to anti-seed oil quacks. That's probably why they never show up to debate.
|
||||
|
||||
My most recent exposure to anti-seed oil cuckery was so profoundly egregious that it warranted writing about it here on my main blog. This extra special example of subhuman behavior comes from Cate Shanahan herself, or as I like to call her, Cate Shenanigans. If you want more info on Cate Shenanigans' history of debate-dodging, I have compiled an inventory [here](https://www.the-nutrivore.com/dodgers). For now, let me start from the beginning.
|
||||
|
||||
Nearly a year ago, I was [invited](https://x.com/zbitter/status/1668413822388916224) by Zach Bitter, via X, to debate the proposition "seed oils are not a significant, independent concern for public health" on his podcast with a willing interlocutor. Cate Shenanigans was [tagged](https://x.com/NTxLoneRider/status/1673811898645598211) in this post but did not reply. In fact, every single high-profile seed oil skeptic who responded to the thread declined my invite, while others, like Cate Shenanigans, were pinged and never replied. The nutrition debate arena was a ghost town that day. Not an ounce of courage was to be found among the anti-seed oil clowns.
|
||||
|
||||
# THE DEBATE INVITATION
|
||||
|
||||
However, nearly a year after that, Cate Shenanigans put out a general [invite](https://x.com/drcateshanahan/status/1773836787196346592) to debate. Even going so far as to [suggest](https://x.com/drcateshanahan/status/1774490576362062311) that I was scared to face her, to which I replied. Shortly after, she actually decided to engage and [replied](https://x.com/drcateshanahan/status/1774681584907559220) to me, encouraging me to DM her (presumably to work out the details of the debate). After some minor miscommunications, she instructed me in another [reply](https://x.com/drcateshanahan/status/1774830896006185446) to contact her via email. I did. I never received a reply. Some time passed, and Zach Bitter once again started [prodding](https://x.com/zbitter/status/1778171569967190413) at Cate Shenanigans about the status of her debate invitation to me (presumably with the intention of once again offering to host it). A day later, after a brief back and forth, Cate Shenanigans [replied](https://x.com/drcateshanahan/status/1778430104617603232) with what seemed like an alteration in the conditions to debate. At least this is how I interpreted it, as someone who has an interest in her arguments. I [pressed](https://x.com/upRootNutrition/status/1778456234078662984) her for clarification, and even quoted her in a [post](https://x.com/upRootNutrition/status/1778490825124552875) later that day about it, and received no reply. But not before she made her own [post](https://x.com/drcateshanahan/status/1778483241755787308) in a different thread, which I didn't initially see, wherein she withdrew from the debate that day. What a bizarre series of behaviours.
|
||||
|
||||
# THE EMAIL EXCHANGE
|
||||
|
||||
Fast forward to June 2nd, 2024, and I was DMed by another third party looking to coordinate yet another debate between Cate Shenanigans and myself. I won't reveal this person's identity and throw this individual under the bus, because they were nothing but cordial and respectful to me. After a short exchange, I was CC'd into an email chain with Cate Shenanigans, and this is where the fun begins. But rather than narrate the exchange, I'll just post it here:
|
||||
|
||||
**Host:**
|
||||
|
||||
> Hi cate
|
||||
>
|
||||
> Nick, CCed, would be down to do the seed oil debate for my show… Are you game? If so my team, CCed, can help to arrange…
|
||||
|
||||
**Nick:**
|
||||
|
||||
> If the debate proposition is clear and I disagree with it, then absolutely. I generally won't debate anything vague or normative, though. I'll happily debate a proposition like "seed oil consumption increases the risk of heart disease", for example.
|
||||
|
||||
**Shenanigans:**
|
||||
|
||||
> HI Host
|
||||
>
|
||||
> Someone else wanted to set up a debate on their podcast between myself and Nick. But what was proposed looked more like just an unstructured argument, and that is not something I’m interested in. I don’t know if the disconnect was with that host or with Nick….? So I’d like to make sure we’re all on the same page about what a debate is.
|
||||
>
|
||||
> A debate starts with an assertion and the two participants who are debating take opposing sides.
|
||||
>
|
||||
> So if Nick wants to debate, then the assertion could be “RBD vegetable oils are part of a healthy diet.”
|
||||
>
|
||||
> Sound good?
|
||||
|
||||
**Host:**
|
||||
|
||||
> What do you think Nick?
|
||||
|
||||
**Nick:**
|
||||
|
||||
> First of all, it's not just that someone else has previously wanted to set up a debate between Cate and myself. Cate herself put out what I (quite reasonably) interpreted as a general invitation to those challenging her positions, which can be found [here](https://x.com/drcateshanahan/status/1773836787196346592), on March 29th. I accepted the invite, to which Cate replied on March 31st with an invitation to me to DM her (presumably to set up a debate), which can be found [here](https://x.com/drcateshanahan/status/1774681584907559220). I responded via email on April 1st, after she invited me to do so [here](https://x.com/drcateshanahan/status/1774830896006185446), on the same day. There was no third party present at this time. This was Cate clearly inviting me, personally, to debate. Just to be clear about the facts.
|
||||
>
|
||||
> Furthermore, while we're being clear about the facts, Cate also presumably withdrew from the debate for what would be completely bizarre reasons that are ultimately orthogonal to the debate itself, which can be found [here](https://x.com/drcateshanahan/status/1778483241755787308). But, not before implying that she had altered the necessary conditions for a debate, which can be found [here](https://x.com/upRootNutrition/status/1778490825124552875). Whatever the case, declining to debate someone on an empirical position because they disagree with you on an unrelated normative position is **beyond** strange, and honestly it was so outlandish that I just flagged it as a blatant excuse not to debate. I hope, Host, you can also see that this is the most reasonable interpretation of her behaviour.
|
||||
>
|
||||
> Now that that's out of the way and clarified, I'd be happy to debate Cate on a number of propositions. So long as she's done making excuses. Specifically, I might want to debate against [this](https://x.com/drcateshanahan/status/1516786219841073153) proposition:
|
||||
>
|
||||
> "current levels of seed oil consumption are the main driver of the obesity and chronic disease epidemics that now represent an existential threat to human populations around the world.
|
||||
>
|
||||
> Out of all of her claims, this could easily be one of the most egregious, depending on how the semantics are unpacked. So, I'd need some of those semantics clarified. Cate, when you say seed oils are the main driver, do you mean that in a counterfactual scenario wherein all the seed oils in the food supply were replaced with low-PUFA alternatives like butter or tallow, those same diseases epidemics would be less likely to occur? If yes, I disagree with the proposition and will happily debate it. If not, what do you mean?
|
||||
>
|
||||
> As for the stuff about what the debate would be. I typically don't do "structured" debates in the traditional sense. They seem closer to theatrics than debates, with time limits and scheduled topic shifts, opening statements, closing statements, etc. I prefer a linear, continuous Socratic debate format where the truth value of a proposition can be scrutinized to completion with no get-out-of-jail free cards granted by the clock. If it takes many hours to reach a concession, so be it. Other formats typically just make sophistry and dodging easier to get away with, because one party can just filibuster until the clock runs out.
|
||||
>
|
||||
> Also, Cate, my debate style is far from unstructured. My debate algorithm can be found [here](https://drive.google.com/file/d/1QQaN6HRwzp3kY2DAcnHVBxeX6jBhrvkw/view). So everyone knows what to expect of me. No rational person would look at this and conclude that my approach to debate is unstructured. I just refuse to debate with my hands tied behind my back, or debate under conditions where the proposition can't be scrutinized to completion.
|
||||
|
||||
**Host:**
|
||||
|
||||
> Thanks Nick!
|
||||
> Cate, you game to schedule?
|
||||
|
||||
**Shenanigans:**
|
||||
|
||||
> Dear Nick and Host,
|
||||
>
|
||||
> Nick, my tweet "sure I’ll take all comers,” was a casual proposition subject to agreeing on further details, which we have yet to do.
|
||||
>
|
||||
> Host, from Nick's email it looks like he wants to argue against a primary thesis of my book, without having read my book. That doesn’t seem like a debate to me.\u{00A0}
|
||||
>
|
||||
> In Dark Calories\u{00A0}I lay out the groundwork to support my claims across multiple chapters, each with scores of scientific references to support the arguments I make in the book. I can’t skip that information and jump right into a debate on my conclusions.\u{00A0}
|
||||
>
|
||||
> Maybe an analogy will help, here. Let’s say, hypothetically, that after publishing his theory of relativity, Einstein announced in a public forum “Hey everyone I think E=MC squared. Read my paper for supporting arguments." And then, someone wanted to debate his paper without having read it. Einstein would have been in a position to have to spell out many details of his complex thesis, including technical information that would probably not be interesting to a lay audience. (Not when presented in debate format. A good documentarian or science writer would be able to make it interesting, however.) In order to “win” the debate, Einstein may even have had to defend the veracity of fundamental principles of physics. That would take the form of a lecture, or a series of lectures. That’s not a debate. It’s a college course.
|
||||
>
|
||||
> Therefore, I’ve proposed we debate this: “Vegetable oils are heart healthy.” After all, that is what the AHA claims. It’s also what docctors learn, and it is influencing public policy, what American farmers grow, and what every child and adult eats. It’s an important topic that merits debate. I would argue against and Nick would argue for.
|
||||
>
|
||||
> Nick, are you willing to do that?
|
||||
|
||||
**Host:**
|
||||
|
||||
> I love that proposition “Vegetable oils are heart healthy.”
|
||||
>
|
||||
> What do u think Nick?
|
||||
|
||||
**Nick:**
|
||||
|
||||
> Just ignoring the fact that, in a blatant display of unbridled narcissism, Cate has unabashedly compared herself to Einstein, and her work to Einstein's theory of relativity, I'd like to ask Cate a few questions:
|
||||
>
|
||||
> 1. If I read your book, Dark Calories, will you debate the proposition I suggested (provided you actually unpack your semantics in a way that leads me to disagree with it)? If yes, surely you'd be willing to provide me with a free PDF of Dark Calories for me to scrutinize, no?
|
||||
>
|
||||
> 2. If you wish to debate what I believe on the subject, surely you've done me the likewise courtesy of reading my [article](https://www.the-nutrivore.com/post/a-comprehensive-rebuttal-to-seed-oil-sophistry) on the subject, right? If yes, why did you not suggest a proposition directly from my work?
|
||||
>
|
||||
> I also have some further objections to Cate's reasoning. Unlike Einstein's theories and models, the predictions of which could only be confirmed many decades later (if not a century later in some cases), Cate's thesis has been tested (and ultimately falsified with respect to human outcome data), which is why the debate would likely lead heavily into empirics and not require a whole book's worth of lectures on fundamentals. So no, I don't need to read her book to show that the proposition is false. Her reasoning here is ridiculous.
|
||||
>
|
||||
> Respectfully, Host and Cate, "vegetable oils are heart healthy" is an awful proposition, for a number of reasons:
|
||||
>
|
||||
> 1. It's not my proposition.
|
||||
> 2. I don't represent the AHA.
|
||||
> 3. I don't even care what the AHA says about seed oils.
|
||||
> 4. I don't even know what it means because it's so semantically vague.
|
||||
> 5. I can think and reason for myself and can defend my own propositions, thank you.
|
||||
>
|
||||
> How about we narrow the scope of the proposition I suggested down to a single disease? Since Cate quantifies the detrimental effects of seed oils over the entire scope of chronic diseases that qualify as epidemics, it is entailed logically that we could choose any disease within that scope. So, how about we meet half way on the subject and debate this proposition:
|
||||
>
|
||||
> "current levels of seed oil consumption are the main driver of heart disease."
|
||||
>
|
||||
> To the degree that Cate affirms that heart disease is an epidemic, she should affirm that the proposition is true. I affirm that the proposition is false. So, we simply exchange the relevant empirics and have the debate. EZPZ.
|
||||
|
||||
**Shenanigans:**
|
||||
|
||||
> Dear Host and Nick,
|
||||
>
|
||||
> I am interested in a debate on the topic I proposed. But I feel this particular email chain is no longer constructive.\u{00A0}
|
||||
>
|
||||
> Resorting to character attacks during what should be a civil conversation is outside the realm of what I consider acceptable discourse.
|
||||
>
|
||||
> Respectfully,
|
||||
> Cate
|
||||
|
||||
**Nick:**
|
||||
|
||||
> You've attacked my character on multiple occasions, Cate. I don't care about that. Let's just discuss the arguments, and hammer out a path toward a productive debate.
|
||||
>
|
||||
> It's also ridiculous to imply that I'm not contributing productively to the conversation. I literally suggested a proposition that seems to satisfy us both. If I've failed to do that, please explain how so I can improve upon further suggestions.
|
||||
>
|
||||
> Just give me a yay or nay, Cate. I don't want to waste my time if you're not interested in actually defending your views or answering any clarifying questions.
|
||||
|
||||
**Shenanigans:**
|
||||
|
||||
> Nick,
|
||||
>
|
||||
> As I said two emails ago, because most people, including you, are not familiar with the scientific underpinnings of my work I would first need to explain them, and that is not a debate.
|
||||
>
|
||||
> What I proposed is a debate. If you are not interested in that debate then I believe we have reached the conclusion of this discussion.
|
||||
>
|
||||
> Best wishes to you.
|
||||
|
||||
**Nick:**
|
||||
|
||||
> And I explained to you how that's a dodge. Again, I don't need a lecture on the theoretical underpinnings when the predictions of the hypothesis have been tested and there is tons of empirical data on it. We only need to have a discussion about the empirics that test the hypothesis' fruitfulness, not the theoretical underpinnings. Insisting that I read your book is just filibustering.
|
||||
>
|
||||
> But hey, I'm still super curious to hear the answer to this question that I already asked you. If I were to read your book, would you debate the prop? Yes or no. If yes, then would you be willing to supply me with a free PDF of your book as a good faith gesture that you're interested in having your work scrutinized? Yes or no.
|
||||
>
|
||||
> I'm likewise super curious to hear the answer to this further question that I also already asked you. If you instead want to debate my beliefs, have you paid me the likewise courtesy of reading my work? Yes or no. If yes, then why haven't you picked a prop that has been extracted from my work directly? Why in the world do you want me to defend the AHA's prop and not a prop of my own?
|
||||
|
||||
**Shenanigans:**
|
||||
|
||||
> Nick I am responding to your questions and only your questions and I hope that can be the end of it.
|
||||
>
|
||||
> "And I explained to you how that's a dodge. Again, I don't need a lecture on the theoretical underpinnings when the predictions of the hypothesis have been tested and there is tons of empirical data on it. We only need to have a discussion about the empirics that test the hypothesis' fruitfulness, not the theoretical underpinnings. Insisting that I read your book is just filibustering.
|
||||
>
|
||||
> But hey, I'm still super curious to hear the answer to this question that I already asked you. If I were to read your book, would you debate the prop? Yes or no."
|
||||
>
|
||||
> No. For reasons I explained. Just because you’ve read the book does not mean the audience has and I will still be in the position to essentially give a lecture on the topics in my books. Its simply not suitable for normal debate format. Furthermore, I’m not interested in debating someone who thinks familiarizing himself with the basic underpinnings of the topic being debated is optional.
|
||||
>
|
||||
> "If yes, then would you be willing to supply me with a free PDF of your book as a good faith gesture that you're interested in having your work scrutinized? Yes or no.
|
||||
>
|
||||
> N/A
|
||||
>
|
||||
> "I'm likewise super curious to hear the answer to this further question that I also already asked you. If you instead want to debate my beliefs, have you paid me the likewise courtesy of reading my work?
|
||||
>
|
||||
> I am familiar with your thoughts. You cite the same type of evidence that the AHA uses to support its heart healthy claim.
|
||||
>
|
||||
> "Yes or no. If yes, then why haven't you picked a prop that has been extracted from my work directly?
|
||||
>
|
||||
> Not all propositions are equally interesting. I want to debate something interesting.
|
||||
>
|
||||
> "Why in the world do you want me to defend the AHA's prop and not a prop of my own?
|
||||
>
|
||||
> See above. Additionally, keep in mind that I did not bring you into this conversation.
|
||||
|
||||
**Nick:**
|
||||
|
||||
> So basically you're just dodging. Got it.
|
||||
>
|
||||
> Before we killscreen the entire enterprise, I would like one more answer to a question, because it might provide for a way forward. With respect to the AHA prop that you bizarrely want me to defend, what does it mean to say that seed oils are heart healthy? For example, does that mean that seed oils decrease the risk of heart disease?
|
||||
>
|
||||
> Because if that prop cashes out into a prop that I'd be willing to defend, then I don't see a reason why we couldn't debate it. If it means what I think it means, it'll just lead into the exact same empirical debate that you're currently dodging, so it makes no difference to me.
|
||||
|
||||
**Host's Producer:**
|
||||
|
||||
> Hi Nick and Cate,
|
||||
>
|
||||
> Host's Producer here; I'm the producer at [redacted]. Host and I agreed that we would like to conclude this discussion and explore other debate topics. The tone of the email discourse is not what we had in mind for our debut episode of this new podcast.
|
||||
>
|
||||
> We appreciate your consideration.
|
||||
|
||||
**Nick:**
|
||||
|
||||
> I'd be happy to debate cordially with somebody who is not a sophist. Cate, unfortunately, is one of the most dishonest actors in this entire space and deserves zero respect from anybody (though I would give her more than what she deserves and actually be respectful to her in a verbal discussion for the betterment of your podcast). There are people I could recommend who disagree with me who I don't think are dishonest but rather just confused about the empirics. If you guys are still interested in having a productive seed oil debate, I'd be happy to provide a list.
|
||||
>
|
||||
> Also if you're worried about my tone during the debate, you need not be concerned. I don't think anybody can actually find more than a single example of me being rude to my interlocutor across what is probably dozens of verbal debates by now. Other than that one exception, which I actually think was justified anyway, I am always polite and cordial with my interlocutor in verbal discussions.
|
||||
|
||||
This is where the email exchange ended. So much of what Cate Shenanigans said was just brain-dead lunacy. Let's go through the list.
|
||||
|
||||
# CATE'S RETARDATION
|
||||
|
||||
**A) Suggesting that I defend a proposition that isn't my own**
|
||||
|
||||
Why? Why in the world would I be asked to defend a proposition that I, myself, am not even sure I affirm? I'm not even sure what the proposition "seed oils are heart healthy" even means. Does it mean that seed oils will increase your VO2 max? Does it mean seed oils will cure hypertension? Who the hell knows. It was just beyond strange that it was even suggested and demonstrates to me that Cate Shenanigans is operating with a level-zero debate meta.
|
||||
|
||||
Furthermore, if she was truly interested in contesting my views, why did she not pay me the likewise courtesy of reading my article and selecting a proposition directly from my own writing? Seems not only to be ridiculously stupid, but also a ridiculously stupid double-standard. Yet another example of Shenanigans-level cuckery.
|
||||
|
||||
**B) Shifting the goalpost three times**
|
||||
|
||||
Months ago, she dodged me on the grounds that I haven't read her book and that reading her book was necessary to have a debate. I [offered](https://x.com/upRootNutrition/status/1778490825124552875) to read her book then to satisfy the criteria and got no reply. Now, she dodged me for the second time on these grounds, and when I directly offered to read her book and satisfy her criteria, she shifted the goalpost a third time. Apparently, it's not good enough that I read her book, but now the entire audience needs to read her book in order for us to debate. This is just the most cuckish form of sophistry imaginable, and she should be ashamed.
|
||||
|
||||
**C) Her goalposts are dumb anyway**
|
||||
|
||||
To anyone with even a modicum of understanding with respect to scientific epistemology, it should be quite clear that Cate Shenanigans is dodging. Essentially, the strength of a scientific hypothesis does not rest upon its complexity, its elegance, its creativity, or any other such quality. It rests upon how scientifically virtuous it is, and this is determined by testing the hypothesis' compatibility with the theoretical virtues of science. I wrote a lengthy article on the subject [here](https://www.the-nutrivore.com/post/the-hitchhiker-s-guide-to-quack-smashing).
|
||||
|
||||
To determine if a hypothesis is strong, we should ask three fundamental questions, compared to other hypotheses:
|
||||
|
||||
1. Does this hypothesis make more novel predictions?
|
||||
|
||||
2. Does this hypothesis explain a wider breadth of phenomena?
|
||||
|
||||
3. Does this hypothesis make fewer overall assumptions?
|
||||
|
||||
|
||||
There are other questions some philosophers think we should ask, but generally speaking, philosophers of science do not disagree about these three core questions. So, let's take them one by one.
|
||||
|
||||
Firstly, the hypothesis doesn't really seem to make very many novel predictions at all. In fact, as I had previously discussed in another blog [article](https://www.the-nutrivore.com/post/a-comprehensive-rebuttal-to-seed-oil-sophistry), the overall weight of the literature heavily favours the negation of Cate Shenanigans' hypothesis. When confronted with this fact on a [podcast](https://gimletmedia.com/shows/science-vs/mehwdgww) (33:00), Cate Shenanigans had no compelling answers and merely insisted that it "didn't make any sense" and that every single study on the subject (150-300 studies by her count) was "flawed". Very persuasive, Dr. Shenanigans. Gold fucking star.
|
||||
|
||||
As for the second question, the scope of her hypothesis is actually quite impressive. As she stated in the linked podcast above, seed oils literally have a causal role to play in every disease. That is quite an impressive scope. Think of all the phenomena this accounts for. Looks great for the hypothesis, except when we try to answer the third question.
|
||||
|
||||
With respect to the final question we're asking, every disease Cate Shenanigans blames on seed oils in an attempt to inflate her scope, she piles on more and more assumptions. Assumptions that empirically verifiable pathophysiological mechanisms that explain a number of diseases, that have nothing to do with seed oils, are either wrong or so incomplete that they might as well be wrong. This produces an insane amount of assumptions. And that's not even counting the assumptions that are stacked in virtue of the hypothesis' failures to make novel predictions.
|
||||
|
||||
As I explained in a previous article, The Hitchhiker's Guide to Quack-Smashing, quacks will often inflate scope at the expense of parsimony and/or fruitfulness. They want to be able to capture the widest scope of phenomena with their hypothesis without actually having evidence or having to explain a damn thing.
|
||||
|
||||
No, Dr. Shenanigans, I don't need to read your book in order to debate your proposition that seed oils are responsible for all disease, or chronic disease, or even just heart disease. As I explained in the email exchange, the only thing that is required is an investigation into the empirical data that tests your hypothesis. We can test the fruitfulness, we can test the scope, and we can test the parsimony. You're just dodging because you are scared.
|
||||
|
||||
Thank you for reading! If you like what you've read and want help me create more content like this, consider pledging your [Support](https://www.uprootnutrition.com/donate). Every little bit helps! I hope you found the content interesting!"""
|
||||
, articleReferences =
|
||||
[ { author = ""
|
||||
, title = ""
|
||||
, journal = ""
|
||||
, year = ""
|
||||
, link = ""
|
||||
}
|
||||
]
|
||||
}
|
||||
383
packages/website/frontend/src/Config/Pages/Blogs/MainBlog/SweetDeception.elm
Executable file
383
packages/website/frontend/src/Config/Pages/Blogs/MainBlog/SweetDeception.elm
Executable file
|
|
@ -0,0 +1,383 @@
|
|||
module Config.Pages.Blogs.MainBlog.SweetDeception exposing (articleSweetDeception)
|
||||
|
||||
import Config.Pages.Blogs.Types exposing (BlogArticle)
|
||||
import Route.Path as Path
|
||||
|
||||
|
||||
articleSweetDeception : BlogArticle
|
||||
articleSweetDeception =
|
||||
{ articleName = "Sweet Deception: Debunking Meme Diabetes Diets"
|
||||
, articleLink = Path.toString Path.Blog_Sweetdeception
|
||||
, articleAuthor = "Nick Hiebert"
|
||||
, isNewTabLink = False
|
||||
, hasReferences = True
|
||||
, hasTableOfContents = True
|
||||
, articleImage = "sweetdeception"
|
||||
, articlePublished = "Apr 16, 2024"
|
||||
, articleBody = """
|
||||
Because every online diet camp purports that their pet diet cures every disease known to mankind, naturally each one will give you some fantastical mechanistic story about how said diet cures type 2 diabetes mellitus (T2DM). In the paleo/keto/carnivore camp, people will often claim that T2DM is caused by chronic exposure to refined sugar, with some even going so far as to claim that it is caused by exposure to carbohydrates (CHO) more broadly (including foods like apples and even carrots). However, these days it is more trendy in that group to blame T2DM on vegetable oils, but I have previously debunked this on my blog. Over in the "whole food plant-based" (WFPB) cult, it is routinely remarked that T2DM is caused by intramyocellular lipid (IMCL), and that chronic exposure to the saturated fat (SFA) in animal products is responsible for the condition.
|
||||
|
||||
In this article, I'll go over the mechanistic reasoning and experiment and/or observational support for these hypotheses, as well as provide an accounting of the leading hypothesis and its supporting evidence. Let's start off by tackling the fantastical notions dreamed up by our vegan friends, and address the IMCL hypothesis.
|
||||
|
||||
## THE INTRAMYOCELLULAR LIPID HYPOTHESIS
|
||||
|
||||
The core idea with this hypothesis is that IMCL, primarily in the form of triglycerides (TG) stored within lipid droplets in muscle cells, act through various pathways to disrupt insulin signaling. The IMCL hypothesis has drawn attention to the role of diet in modulating IMCL levels. High intakes of certain types of fats, particularly SFAs found abundantly in animal products, have been implicated by the proponents of this hypothesis in elevating IMCL levels and contributing to insulin resistance.
|
||||
|
||||
This association is often highlighted in discussions on the benefits of WFPB diets for reducing the risk of T2DM and improving insulin sensitivity. Advocates of WFPB diets suggest that such a diet, which is typically lower in SFA and higher in unsaturated fats like monounsaturated fats (MUFA) and polyunsaturated fats (PUFA), which can purportedly help reduce IMCL accumulation and make traction against insulin resistance.
|
||||
|
||||
The dietary focus is on whole grains, legumes, fruits, vegetables, nuts, and seeds, with minimal or no intake of animal products. The concern with animal products stems from their content of SFAs, dietary cholesterol, and perhaps even certain supposed inflammatory mediators (possibly Neu5Gc), which may contribute to increased IMCL levels and insulin resistance. WFPB proponents argue that replacing animal products with plant-based sources of protein and fat can mitigate these risks. But is it true?
|
||||
|
||||
The IMCL hypothesis attempts to highlight the potential impact of IMCL accumulation on insulin resistance and physiological markers of T2DM. While WFPB are promoted as strategies to reduce IMCL and improve metabolic health, it's important to consider the broader literature and where this hypothesis lands with respect to epistemic virtues over other, possibly more prevailing hypotheses for which there is more evidence.
|
||||
|
||||
The mechanistic case for the IMCL hypothesis was first outlined in the late 1990s with two small studies by Jacob, et al. and Perseghin, et al., which discovered relationships between IMCL and insulin resistance in T2DM-free subjects who were born of parents with T2DM [[1](https://pubmed.ncbi.nlm.nih.gov/10331418/)][[2](https://pubmed.ncbi.nlm.nih.gov/10426379/)]. In these experiments, the offspring of those with T2DM were subjected to the gold-standard measure of whole-body insulin sensitivity, the hyperinsulinemic-euglycemic clamp test (HEC). It was discovered that there was an inverse association between IMCL and insulin sensitivity, which led researchers to suspect that perhaps this biomarker was relevant to the pathophysiology of T2DM.
|
||||
|
||||
![][image1]
|
||||
[image1]: /blog/sweetdeception/image1.png
|
||||
|
||||
Fast forward to 2004, and another small study from van Loon, et al. would introduce the hypothesis' first paradox [[3](https://pubmed.ncbi.nlm.nih.gov/15165998/)]. In this experiment, muscle biopsies and less precise (but still adequate) measures of insulin sensitivity were deployed in an investigation of subjects who were either sedentary, afflicted with T2DM, or who were trained athletes. The study found that the IMCL concentrations of IMCL were actually statistically significantly higher in athletic subjects compared to either sedentary or T2DM-afflicted subjects. Yet, the athletic subjects did not suffer from impaired insulin sensitivity or the hyperglycemia that is characteristic of T2DM.
|
||||
|
||||
![][image2]
|
||||
[image2]: /blog/sweetdeception/image2.png
|
||||
|
||||
Researchers Coen and Goodpaster attempted to reconcile the findings in 2012 [[4](https://pubmed.ncbi.nlm.nih.gov/22721584/)]. They hypothesized that IMCL behaves differently in the context of T2DM, and that while IMCL serves as a fuel source in athletic subjects, in sedentary subjects with T2DM the IMCL seems to produce more disruptive mediators like ceramides and diacylglycerols. However, the authors tend to play fast and loose with their causal inferences, often citing animal research to buttress clear implications about what holds true in human beings. In fact, the majority of their supporting evidence is derived from mice, despite mice generally being poor facsimiles for human subjects [[5](https://pubmed.ncbi.nlm.nih.gov/31307492/)].
|
||||
|
||||
Some of the only human research they can cite are studies wherein there was an observed association between intramyocellular ceramides (IMCC) and insulin resistance. However, there are many biomarkers that serve as proxies for insulin resistance, and there did not seem to be a clear reason proposed by the authors to favour IMCC as causal or mediating. In fact, they cite research that offered conflicting evidence with a broader sample of human subjects, showing that IMCC has no clear association with insulin sensitivity [[6](https://pubmed.ncbi.nlm.nih.gov/18458871/)].
|
||||
|
||||
Additionally, Itani, et al (2002) discovered that the concentrations of IMCC do not differ substantially between subjects with varying degrees of insulin sensitivity [[7](https://pubmed.ncbi.nlm.nih.gov/12086926/)]. In fact, these researchers challenged subjects with lipids during a HEC to try to alter lipid states in muscle tissue, and ceramides did not change. However, a legitimate criticism of this study is that the lipid challenge done using Liposyn II, which is an intravenous lipid product consisting of 50% soybean oil and 50% safflower oil, making it over half PUFA in its composition. Coen and Goodpaster also cited research on diacylglycerols, but they themselves admit that the human data isn't particularly conclusive on the matter.
|
||||
|
||||
To my knowledge there are no recent landmark human experiments that persuasively show that T2DM pathology can be modulated up or down with varying animal products, or even SFA, in the diet. Altogether, the hypothesis has a lot of failed predictions and phenomena to reconcile before it can be taken seriously and can even begin to be seen as epistemically virtuous compared to some other, more scientifically grounded hypotheses. What we need to see is a study that shows that removing SFA and/or animal products from the diets of those with T2DM actually makes traction against pathophysiological markers of T2DM. Ideally this would be done while also controlling for potential confounders or mediators that other competing hypotheses predict would make an impact. The aim is to demonstrate independent effects, and so far no research on the IMCL hypothesis persuasively does this.
|
||||
|
||||
# THE SUGAR HYPOTHESIS
|
||||
|
||||
Even though I have touched on this hypothesis five years ago [[8](https://thenutrivore.blogspot.com/2019/10/sugar-doesnt-cause-diabetes-and-ketosis.html)], it bears repeating, with updated epistemic and philosophical rigour. For a recap, my original article challenges perceptions about T2DM that are common in the low carb (LC) diet sphere. I argue against the notions that sugar causes T2DM and that ketosis can somehow reverse it. But we're going to go a little deeper today. So, what is the hypothesis and how does it work? Basically, the hypothesis supposes that chronic exposure to refined sugar or insulin-stimulating CHO leads to T2DM through prolonged over-stimulation of the pancreas. This hypothesis involves several key mechanisms.
|
||||
|
||||
Firstly, regular intake of high-sugar or high-glycemic CHOs prompts frequent blood insulin excursions by via the pancreas. To be clear, insulin is the hormone responsible for signaling cells to absorb glucose from the bloodstream for energy or storage. The idea is that over time, constant demand for more and more insulin can lead to insulin resistance via negative feedback. This is when cells become less responsive to insulin's signals because insulin levels are too high. This requires the pancreas to produce even more insulin to achieve the same effect, placing stress on the pancreatic beta cells (which are responsible for insulin secretion).
|
||||
|
||||
Secondly, chronic over-stimulation of the pancreas due to persistent high sugar/CHO intake and supposed, resultant insulin resistance can lead to beta-cell dysfunction (which is characteristic of advanced T2DM). Over time, the beta cells' capacity to produce insulin can diminish due to the increased demand, oxidative stress, and subsequent glucotoxicity (toxicity due to hyperglycemia). This dysfunction contributes to the progression of T2DM, where insulin production eventually becomes insufficient to control blood sugar levels effectively.
|
||||
|
||||
Lastly, high levels of circulating glucose (glucotoxicity) and fatty acids (lipotoxicity) are actually detrimental to pancreatic beta cells. High glucose levels can lead to the formation of reactive oxygen species (ROS), causing an inflammatory cascade effect, damaging beta cells and impairing insulin secretion. Similarly, elevated free fatty acids (FFAs) can accumulate in non-adipose tissues, including the pancreas, causing cellular dysfunction.
|
||||
|
||||
The mechanisms, epidemiological, and experimental evidence for this hypothesis were most succinctly summarized by Stanhope in 2016 [[9](https://pubmed.ncbi.nlm.nih.gov/26376619/)]. This review discusses the evidence and controversies surrounding the impact of sugar consumption on T2DM, including mechanisms by which excess sugar intake may promote the development of T2DM directly and indirectly. It covers the direct metabolic pathways through which fructose, a component of table sugar, sucrose, can lead to intrahepatic lipid (IHL) accumulation and decreased insulin sensitivity, contributing to the pathophysiology of T2DM independent of total caloric intake.
|
||||
|
||||
The author first refers to literature they themselves conducted, including three primary human trials demonstrating disturbances to energy expenditure, markers of liver function, as well as measures of IHL accumulation [[10](https://pubmed.ncbi.nlm.nih.gov/26376619/)][[11](https://pubmed.ncbi.nlm.nih.gov/21952692/)][[12](https://pubmed.ncbi.nlm.nih.gov/22828276/)]. The first trial discovered that isocaloric feeding of fructose compared to glucose over a ten-week period significantly increased hepatic fat.
|
||||
|
||||
![][image3]
|
||||
[image3]: /blog/sweetdeception/image3.png
|
||||
|
||||
However, it's unclear what the clinical significance of this finding is, considering that the fructose-based intervention resulted in significant overfeeding and only increased fasting glucose by 5% compared to the glucose-based control. Seems like the authors tried pretty damn hard to induce a T2DM phenotype feeding fructose to subjects, and were ultimately unable to achieve that. In fact, they weren't really able to get close. Even the oral glucose tolerance test results, though far from ideal, showed an altogether normal blood glucose curve for the fructose group.
|
||||
|
||||
![][image4]
|
||||
[image4]: /blog/sweetdeception/image4.png
|
||||
|
||||
The second trial was unremarkable, and suggested that fructose consumption may decrease energy expenditure over time when isocalorically compared to glucose. Again, it's interesting, but it's far from demonstrating a cause and effect relationship between T2DM and sugar. The third trial is a bit more complicated to unpack. Basically, subjects were split into two groups, 25% of calories as either fructose or glucose as parts of eucaloric diets over 10 weeks, with the primary endpoints beings measures of liver function. Overall, the results of the trial suggest a significantly detrimental effect of fructose compared to glucose on a number of markers related to liver function. However, it's slightly more complicated than that.
|
||||
|
||||
While it's true that the treatment effect showed a benefit of glucose over fructose, it's also true that the marker of liver function that was negatively perturbed was gamma-glutamyl transferase (GTT). The change in GGT was also barely statistically significant compared to baseline, while markers such as aspartate aminotransferase (AST) and alanine aminotransferase (ALT) showed a non-significant decrease. Glucose showed greater reductions that were barely statistically significantly different from that of fructose.
|
||||
|
||||
![][image5]
|
||||
[image5]: /blog/sweetdeception/image5.png
|
||||
|
||||
Other than that, fructose did seem to increase uric acid levels to a statistically significant degree, making fructose a potential aggravating factor for conditions such as gout. But again, this is a far cry from causally linking fructose consumption to the development of T2DM, especially since fructose seemed to do nothing particularly interesting to markers of liver function. It is true that sugar intake is severely negatively associated with health outcomes [[13](https://pubmed.ncbi.nlm.nih.gov/34444794/)]. However, while this is a consistent finding, clinical trials on sugar consistently fail to demonstrate a connection between sugar intake and the development of T2DM.
|
||||
|
||||
We can indirectly test the sugar hypothesis by looking at long-term data in those following ketogenic diets for T2DM remission. If subjects cut nearly all carbohydrates out of their diets, presumably this subsumes sugar, and could present a valid test of the hypothesis. One such study might be the Virta Health trial [[14](https://pubmed.ncbi.nlm.nih.gov/29417495/)]. In this trial, a non-randomized, self-selected sample of eager subjects elected to participate in a cutting-edge, individualized dietary intervention program, with the aim of nutritional ketosis, called the Continuous Care Intervention (CCI), utilizing a web-app, ketone-verified adherence monitoring, and constant patient support.
|
||||
|
||||
> Other aspects of the diet were individually prescribed to ensure safety, effectiveness, and satisfaction, including consumption of 3–5 servings of non-starchy vegetables and adequate mineral and fluid intake for the ketogenic state. At onset of dietary changes, participants were advised to consume a multivitamin, 1000–2000 IU vitamin D3, and up to 1000 mg omega-3 daily. If participants exhibited signs of magnesium depletion (e.g., muscle twitches or cramps), daily supplementation (500 mg magnesium oxide or 200 mg magnesium chloride) was suggested. If participants exhibited headaches, constipation, or lightheadedness, adequate sodium and fluid intake was recommended.
|
||||
|
||||
Suffice it to say, there would be little, if any, room for sugar while on such a diet. These subjects were followed up for one year, and, as expected (given the high potential for bias with such a study design), results were impressive. By the end of the first year, the control group was floundering and the CCI group managed to achieve a massive 1.3% reduction in HbA1c, which effectively pushed the once diabetic group into the non-diabetic range on average. However, this change was commensurate with a 14.3% drop in body weight, which we'll revisit in a later section of this article.
|
||||
|
||||
Despite these improvements, recidivism continued to climb. As of two years, the CCI group had crept back into the diabetic range on average [[15](https://pubmed.ncbi.nlm.nih.gov/31231311/)]. By, 3.5 years, the CCI group was once again firmly within the diabetic range on average, having regained a significant amount of weight [[16](https://www.hsrd.research.va.gov/publications/esp/virtual-diet-brief.pdf)][[17](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7208790/)].
|
||||
|
||||
![][image6]
|
||||
[image6]: /blog/sweetdeception/image6.png
|
||||
|
||||
To be clear, there was a clear distinction between remission and reversal, as defined by the authors. Remission was a much more robust measure of traction against T2DM than reversal, even though it sounds like the latter is stronger than the former. Remission was defined in two parts; partial remission and complete remission. Partial remission was defined as "sub-diabetic hyperglycemia of at least 1 year duration, HbA1c level between 5.7-6.5%, without any medications (two HbA1c measurements)" and complete remission was defined as "Normoglycemia of at least 1 year duration, HbA1c below 5.7%, without any medications (two HbA1c measurements)". Reversal was defined more loosely, as "sub-diabetic hyperglycemia and normoglycemia (HbA1c below 6.5%), without medications except metformin" (Athinarayanan, et al., (2019), Supplement Table 2).
|
||||
|
||||
Unfortunately, all but the second year remission data is either aggregated or ambiguous, so it's difficult to make distinctions between partial and complete remission for years one and 3.5. However, at year two only 6.7% of the cohort had achieved complete remission. It's not clear what percentage of the cohort achieved complete remission by year 3.5. Furthermore, reversal rates, as they're defined, are probably just reflecting attrition rates (which were 26%), as the criteria for reversal is having achieved a sub-diabetic blood glucose at least once throughout the trial. It's actually not clear how meaningful that data even is on that definition.
|
||||
|
||||
While a 9% weight reduction over 3.5 years is impressive, I'll reiterate the limitations— the subjects were self-selected, and highly motivated to participate in the CCI. In fact, the patients were paying customers of Virta Health's cutting-edge primary care service. This significantly challenges the external validity of the findings, as impressive as they are, to the general population. What we're seeing are results in the context of what is likely to be extraordinary ambition to succeed, and should be interpreted with caution.
|
||||
|
||||
As for how these results relate to the sugar hypothesis, it's difficult to tell, had the subjects managed to control their weight. However, adherence rates to the diet dropped significantly by year two, with nutritional ketosis being achieved in 96% of CCI subjects in year one to only 14.1% by the end of year two. This non-adherence makes it difficult to infer the degree of sugar avoidance actually observed by the cohort on average, and makes cause and effect conclusions difficult to draw. There was no 3.5 year data on ketosis rates, and one can only speculate as to why. But given the poor adherence at two years, it's probably not unreasonable to assume it's because the numbers didn't look very good.
|
||||
|
||||
## THE OXIDATION HYPOTHESIS
|
||||
|
||||
The underlying premise is that PUFAs, particularly omega-6 fatty acids found in seed oils, are susceptible to oxidation. When oxidized, these fatty acids can form reactive compounds such as malondialdehyde (MDA) and other harmful products, leading to cellular damage and oxidative stress. In the context of the pancreas and liver, organs that, as previously mentioned, are crucial for glucose metabolism and insulin regulation, such oxidative stress could impair their function, contributing to insulin resistance and β-cell dysfunction— key features of T2DM. A tidy little bundle of sophistry indeed.
|
||||
|
||||
Since I've already covered how the human outcome data flies in the face of this hypothesis in a previous article [[18](https://www.the-nutrivore.com/post/a-comprehensive-rebuttal-to-seed-oil-sophistry)], I won't rehash all of it here. But, essentially there is no human outcome data supporting this effect across multiple cohort studies and multiple RCTs. In the epidemiology, tight markers of seed oil consumption show a consistent inverse association with T2DM [[19](https://pubmed.ncbi.nlm.nih.gov/29032079/)].
|
||||
|
||||
![][image7]
|
||||
[image7]: /blog/sweetdeception/image7.png
|
||||
|
||||
Additionally, there have been several interventions feeding large amounts of PUFA to subjects, to the exclusion of SFA, and measuring long term effects on insulin sensitivity [[20](https://www.sciencedirect.com/science/article/abs/pii/0163782781900709)][[21](https://pubmed.ncbi.nlm.nih.gov/1347091/)]. In both Houtsmuller, et al. (1979) and Watts, et al. (1992), long term feeding of PUFA was associated with improvements in insulin sensitivity. In the case of the former trial, the insulin sensitivity measure, an oral glucose tolerance test (OGTT), showed improvement to glucose tolerance among diabetics over time. These results were aggregated by Hooper, et al. back in 2020 in an exploratory analysis [[22](https://pubmed.ncbi.nlm.nih.gov/32428300/)].
|
||||
|
||||
![][image8]
|
||||
[image8]: /blog/sweetdeception/image8.png
|
||||
|
||||
Additionally, we can also see that Ley, et al. (2004) showed an improvement in OGTT results, but with the substitution of CHO for SFA, rather than PUFA for SFA (which is kinda funny) [[23](https://pubmed.ncbi.nlm.nih.gov/14739050/)].
|
||||
|
||||
## THE TWIN CYCLES HYPOTHESIS
|
||||
|
||||
The prevailing hypothesis, or the hypothesis that has been given the most credence in this domain, is the twin cycles hypothesis (TCH), which was spearheaded by Prof. Roy Taylor. It is closely interconnected with another concept from Prof. Taylor's work, known as the personal fat threshold (PFT). So what are these things? Let's start with the TCH. The TCH postulates that there are two stages, or "cycles", to T2DM development. The TCH was first discussed in a 2011 paper by Lim, et al. (coauthored by Prof. Taylor) detailing the development of the hypothesis from previous clinical trials performed on patients with T2DM [[24](https://pubmed.ncbi.nlm.nih.gov/21656330/)]. This trial would come to be known as the Counteracting Pancreatic Inhibition by Triglyceride (CounterPoint) study, and would be reviewed in greater detail two years later by the same authors [[25](https://pubmed.ncbi.nlm.nih.gov/23075228/)].
|
||||
|
||||
The first cycle originates in the liver, where chronic, excess calorie intake leads to ectopic fat accumulation, causing hepatic insulin resistance. The reason for this is because tissues that are energy replete will resist the action of insulin, which is a signalling hormone responsible for facilitating energy deposition in tissues. The second cycle concerns the pancreas, where the continued excess fat spills over to the pancreas (primarily via nonesterified fatty acids (NEFA), leading to lipotoxicity and subsequently impairing β-cell function. Ultimately, this contributes to β-cell dysfunction, rather than outright β-cell death, as the pivotal event in diabetes progression.
|
||||
|
||||
In fact, the TCH originally came about by appreciating that the assumptions typically relied upon when inferring β-cell death in T2DM patients may be faulty. Usually, we infer to β-cell death by staining pancreatic tissue for insulin; no insulin, no β-cells. However, what if the β-cells aren't really dead? What if the diabetic pancreas is just so dysfunctional that the β-cells aren't producing as much insulin? Those assumptions would have us believing that the β-cells are dead when in fact they are merely dormant due to lipotoxicity— waiting to be brought back to life upon fat mass loss. Which brings us to the next piece of the puzzle.
|
||||
|
||||
Now let's discuss the PFT, and how it ties into the overall picture. Essentially, the PFT posits that hepatic and pancreatic fat deposition are facilitated by accumulating more subcutaneous body fat (SBF) than one's body can tolerate, regardless of whether their body mass index (BMI) categorizes them as overweight or obese [[26](https://pubmed.ncbi.nlm.nih.gov/25515001/)]. In basic terms, after non-hepatic, non-pancreatic tissues get too fat, there is a spillover of fat (precipitated by chronic calorie excess) onto the liver and the pancreas, which initiates the T2DM phenotype.
|
||||
|
||||
Think about it. There's just nowhere left for the energy substrates to go, be it glucose, triglycerides (TG), or even amino acids. They're all increased with T2DM, because all the tissues are energy replete. The liver and the peripheral tissues essentially play a never-ending game of ping pong with the energy substrates because no tissues are able to take on the extra calories. This hypothesis was tested with vindicating results in a recent trial by Taylor, et al. in 2024 [[27](https://pubmed.ncbi.nlm.nih.gov/37593846/)]. Essentially, it seems that T2DM development and remission have very little, if anything, to do with BMI, and BMI may be a very poor risk factor for T2DM, due to the individual variation in the PFT from person to person.
|
||||
|
||||
Now that we have a clear understanding of the model, let's discuss the overwhelming evidence in favour of it. The clinical trials that first gave rise to the TCH were human experiments that involved both pharmaceutical and dietary means of reducing hepatic fat [[28](https://pubmed.ncbi.nlm.nih.gov/18535187/)][[29](https://pubmed.ncbi.nlm.nih.gov/15734833/)].
|
||||
|
||||
For the first study by Ravikumar, et al., a single-arm trial of 10 subjects, the drug pioglitazone was investigated for its effects on markers of T2DM, particularly postprandial endogenous glucose production (EGP) using isotope labeled glucose, as well as IHL. After 16 weeks of treatment, the pioglitazone group experienced an increase in total body weight equal to +6.2kg on average. Yet, the pioglitazone group also experienced a decrease in IHL.
|
||||
|
||||
![][image9]
|
||||
[image9]: /blog/sweetdeception/image9.png
|
||||
|
||||
However, to be fair, the pioglitazone group also experienced a significant decrease in IMCL as well, however there was no significant correlation between decreases in IMCL and EGP. There was however, a direct association between IHL and EGP. Although this trial was not controlled, it certainly doesn't produce results expected on the IMCL hypothesis, and it lends further credence to the TCH. Additionally, many markers of T2DM subsequently improved, such as plasma glucose, hemoglobin A1c (HbA1c), and even TGs, with the changes being -2.3mmol/L, -1.9%, and 0.4mmol/L, respectively.
|
||||
|
||||
![][image10]
|
||||
[image10]: /blog/sweetdeception/image10.png
|
||||
|
||||
It can also be inferred that there was a meaningful increase in insulin sensitivity, given the fact that plasma glucose dropped despite the same amount of insulin being produced by subject. Essentially, glucose disposal per unit insulin went up, implying that insulin signalling had improved.
|
||||
|
||||
![][image11]
|
||||
[image11]: /blog/sweetdeception/image11.png
|
||||
|
||||
In the second study by Petersen, et al., eight subjects with T2DM were compared to 10 healthy volunteers in a non-randomized weight loss trial over an average of seven weeks. Essentially, subjects were followed up until normoglycemia was achieved, so not every subject was subjected to the same amount of weight loss for the same time period. In this time, body weight dropped by an average of 8kg in the T2DM group. This was marked with commensurate drops in plasma glucose, plasma insulin, and TG, at -2.4mmol/L, -108pmol/L, and -0.3mmol/L, respectively.
|
||||
|
||||
![][image12]
|
||||
[image12]: /blog/sweetdeception/image12.png
|
||||
|
||||
The most interesting and surprising finding was that there was no significant change in IMCL despite weight loss. But, subjects did end up achieving normoglycemia and near normal insulin sensitivity as determined by a HEC. However, much like the previous study, insulin sensitivity was directly associated with IHL reduction. Once again, this flies in the face of the IMCL hypothesis, and offers further support for the TCH as the T2DM approached nearly normal levels of IHL. Although neither of these papers directly test for evidence of the sugar or oxidation hypotheses, it should be noted that both of these trials involve the consumption of both sugar and most likely animal products.
|
||||
|
||||
In light of this evidence, Steven and Taylor conducted another preliminary human trial, the CounterBalance study, involving 29 subjects in 2015 to test the effects of the same intervention in those with long- versus short-term T2DM [[30](https://pubmed.ncbi.nlm.nih.gov/25683066/)]. Both groups experienced similar weight loss (short-duration: 14.8%, long-duration: 14.4%), indicating that the VLCD was effective for weight reduction regardless of diabetes duration. These results were also durable throughout the six month post-intervention follow-up.
|
||||
|
||||
In terms of other T2DM markers, such as plasma glucose, the response to the diet was heterogeneous among participants with long-term T2DM. Some showed similar responses to those in the short-term group and some responded slowly. By the end of the study, 87% of the short-term group and 50% of the long-term group achieved non-T2DM fasting plasma glucose levels. HbA1c levels also decreased in both groups, with a more significant reduction observed in the short-term group. However, there was an unforeseen result— about half of subjects did not respond to the treatment at all, which was not expected given nearly all previous research.
|
||||
|
||||
![][image13]
|
||||
[image13]: /blog/sweetdeception/image13.png
|
||||
|
||||
Given these results and Prof. Taylor's previous characterization of the PFT concept, the most likely hypothesis seemed clear— these people just needed to lose more weight, which we'll get to later. For now, there was enough evidence of the effectiveness of weight loss for T2DM treatment that Prof. Taylor and his colleagues decided it was time to test the efficacy of the treatment in a real-world outpatient scenario. A cluster-randomized experiment was designed and undertaken, and would come to be known as the Diabetes Remission Clinical Trial (DiRECT) [[31](https://pubmed.ncbi.nlm.nih.gov/29221645/)].
|
||||
|
||||
![][image14]
|
||||
[image14]: /blog/sweetdeception/image14.png
|
||||
|
||||
The DiRECT trial involved 298 subjects across 49 primary care practices (or clusters) randomized two groups, a control group receiving the standard of care for T2DM management, and the treatment group receiving a three stage program: stage one, total diet replacement; stage two, food reintroduction; phase three, weight maintenance. For the first stage, the treatment group received a liquid diet consisting of four packets of meal replacement formula, which totaled around 825-853 kcal/day for three to five months (depending on patient-specific goals). For the second stage, after subjects completed the first weight loss phase of the trial, food was gradually reintroduced over a period of two weeks to two months. During the last stage, patients were followed up over the course of around a year. The results were encouraging.
|
||||
|
||||
Over the course of the trial, the treatment group lost an average of 10kg, with over 86% of them achieving T2DM remission by the end of the first year. An interesting finding was that on average, at the end of the first year, the treatment group still technically qualified as obese, despite the vast majority of them achieving T2DM remission. This would come to be the first nail in the coffin with respect to the idea that T2DM was somehow coupled to BMI. Additionally, patients experienced significant improvements to quality of life without serious side effects or complications. Altogether the treatment was successful, well-tolerated, and produced impressive rates of T2DM remission that was durable long-term.
|
||||
|
||||
However, Prof. Taylor's group published two follow-up, long term durability studies on the DiRECT trial [[32](https://pubmed.ncbi.nlm.nih.gov/30852132/)][[33](https://pubmed.ncbi.nlm.nih.gov/38423026/)]. The results of these follow-up studies was bitter-sweet. At the two-year follow-up, only 41% of the treatment group remained in remission compared to the previous year, and only 10% at five years of follow-up. These results were not promising for the treatment over time once people were reintroduced to their previous diets and left without practitioner support. Even after the two-year follow-up, 94 or the remaining 101 subjects in the treatment group were given access to extended care, which only resulted in 13% remission rates within the extended care group at five years.
|
||||
|
||||
It sounds bleak, but let's think about it. Prof. Taylor's research was essentially testing two things at the end of the day— the conceptual model of T2DM, encompassing the TCH and the PFT, as well as the efficacy of radical weight loss in an outpatient setting. With respect to the former, Taylor's work has been a resounding success, and it buttresses the strongest model of T2DM development and progression that we currently have. In regards to the latter, radical supervised weight loss with the practitioner support did not yield terribly promising results beyond two years. All isn't lost, though.
|
||||
|
||||
The important thing is that we now have a firm grasp about what causes T2DM. It isn't sugar, seed oils, animal fat, or any other harebrained dietary boogeyman. It's just energy poisoning, with a simple, easy-to-understand etiology; if you gain more fat than your body can tolerate, you develop the phenotype of T2DM. If at that point you do indeed lose enough body fat to fall back below the maximum your body can withstand, T2DM remission follows. The last piece of the puzzle is figuring out what factors cause over-consumption, and how to durably address excessive body fat.
|
||||
|
||||
## DISCUSSION
|
||||
|
||||
In conclusion, while a myriad of hypotheses continue to circulate within nutritional and diabetic research spheres regarding the genesis and treatment of T2DM, it becomes increasingly clear that simplicity often guides the best practice. The TCH, underscored by the PFT, offers a cogent framework suggesting that T2DM is not merely a product of specific dietary components like sugars, SFA, or PUFA, but rather a complex interplay of caloric excess leading to dysfunctional energy storage and insulin response. As emerging studies, such as those by Prof. Taylor and his colleagues, indicate, interventions aiming at substantial and sustained weight loss may hold the key to reversing T2DM, provided these interventions are maintained with consistent medical oversight and support.
|
||||
|
||||
While the exploration of dietary influence on T2DM remains important, we also have to acknowledge the apparently lack of elasticity of our food culture and the stark tendency toward recidivism with dietary intervenions. Emerging pharmacological interventions, particularly GLP-1 receptor agonists, are presenting promising frontiers in the management and potential reversal of this condition. As we advance, the integration of such pharmaceutical approaches alongside dietary management could revolutionize the treatment landscape of T2DM. Emphasizing the synergy between medication and lifestyle changes will likely be pivotal in crafting effective, personalized treatment plans that address both the biochemical and lifestyle facets of diabetes care.
|
||||
|
||||
Thank you for reading! If you like what you've read and want help me create more content like this, consider pledging your [Support](https://www.uprootnutrition.com/donate). Every little bit helps! I hope you found the content interesting!
|
||||
|
||||
# BIBLIOGRAPHY"""
|
||||
, articleReferences =
|
||||
[ { author = "Jacob, S., et al."
|
||||
, title = "Association of Increased Intramyocellular Lipid Content with Insulin Resistance in Lean Nondiabetic Offspring of Type 2 Diabetic Subjects"
|
||||
, journal = "Diabetes"
|
||||
, year = "1999"
|
||||
, link = "https://doi.org/10.2337/diabetes.48.5.1113"
|
||||
}
|
||||
, { author = "Perseghin, G., et al."
|
||||
, title = "Intramyocellular Triglyceride Content Is a Determinant of in Vivo Insulin Resistance in Humans: A 1H-13C Nuclear Magnetic Resonance Spectroscopy Assessment in Offspring of Type 2 Diabetic Parents"
|
||||
, journal = "Diabetes"
|
||||
, year = "1999"
|
||||
, link = "https://doi.org/10.2337/diabetes.48.8.1600"
|
||||
}
|
||||
, { author = "van Loon, Luc J. C., et al."
|
||||
, title = "Intramyocellular Lipid Content in Type 2 Diabetes Patients Compared with Overweight Sedentary Men and Highly Trained Endurance Athletes"
|
||||
, journal = "American Journal of Physiology. Endocrinology and Metabolism"
|
||||
, year = "2004"
|
||||
, link = "https://doi.org/10.1152/ajpendo.00464.2003"
|
||||
}
|
||||
, { author = "Coen, Paul M., and Bret H. Goodpaster"
|
||||
, title = "Role of Intramyocelluar Lipids in Human Health"
|
||||
, journal = "Trends in Endocrinology and Metabolism: TEM"
|
||||
, year = "2012"
|
||||
, link = "https://doi.org/10.1016/j.tem.2012.05.009"
|
||||
}
|
||||
, { author = "Leenaars, Cathalijn H. C., et al."
|
||||
, title = "Animal to Human Translation: A Systematic Scoping Review of Reported Concordance Rates"
|
||||
, journal = "Journal of Translational Medicine"
|
||||
, year = "2019"
|
||||
, link = "https://doi.org/10.1186/s12967-019-1976-2"
|
||||
}
|
||||
, { author = "Skovbro, M., et al."
|
||||
, title = "Human Skeletal Muscle Ceramide Content Is Not a Major Factor in Muscle Insulin Sensitivity"
|
||||
, journal = "Diabetologia"
|
||||
, year = "2008"
|
||||
, link = "https://doi.org/10.1007/s00125-008-1014-z"
|
||||
}
|
||||
, { author = "Itani, Samar I., et al."
|
||||
, title = "Lipid-Induced Insulin Resistance in Human Muscle Is Associated with Changes in Diacylglycerol, Protein Kinase C, and IkappaB-Alpha"
|
||||
, journal = "Diabetes"
|
||||
, year = "2002"
|
||||
, link = "https://doi.org/10.2337/diabetes.51.7.2005"
|
||||
}
|
||||
, { author = "\"The Nutrivore\""
|
||||
, title = "The Nutrivore: Sugar Doesn’t Cause Diabetes, and Ketosis Doesn’t Reverse It"
|
||||
, journal = "The Nutrivore"
|
||||
, year = "2019"
|
||||
, link = "https://thenutrivore.blogspot.com/2019/10/sugar-doesnt-cause-diabetes-and-ketosis.html"
|
||||
}
|
||||
, { author = "Stanhope, Kimber L."
|
||||
, title = "Sugar Consumption, Metabolic Disease and Obesity: The State of the Controversy"
|
||||
, journal = "Critical Reviews in Clinical Laboratory Sciences"
|
||||
, year = "2016"
|
||||
, link = "https://doi.org/10.3109/10408363.2015.1084990"
|
||||
}
|
||||
, { author = "Stanhope, Kimber L., et al."
|
||||
, title = "Consuming Fructose-Sweetened, Not Glucose-Sweetened, Beverages Increases Visceral Adiposity and Lipids and Decreases Insulin Sensitivity in Overweight/Obese Humans"
|
||||
, journal = "The Journal of Clinical Investigation"
|
||||
, year = "2009"
|
||||
, link = "https://doi.org/10.1172/JCI37385"
|
||||
}
|
||||
, { author = "Cox, C. L., et al."
|
||||
, title = "Consumption of Fructose-Sweetened Beverages for 10 Weeks Reduces Net Fat Oxidation and Energy Expenditure in Overweight/Obese Men and Women"
|
||||
, journal = "European Journal of Clinical Nutrition"
|
||||
, year = "2012"
|
||||
, link = "https://doi.org/10.1038/ejcn.2011.159"
|
||||
}
|
||||
, { author = "Cox, Chad L., et al."
|
||||
, title = "Consumption of Fructose- but Not Glucose-Sweetened Beverages for 10 Weeks Increases Circulating Concentrations of Uric Acid, Retinol Binding Protein-4, and Gamma-Glutamyl Transferase Activity in Overweight/Obese Humans"
|
||||
, journal = "Nutrition & Metabolism"
|
||||
, year = "2012"
|
||||
, link = "https://doi.org/10.1186/1743-7075-9-68"
|
||||
}
|
||||
, { author = "Meng, Yantong, et al."
|
||||
, title = "Sugar- and Artificially Sweetened Beverages Consumption Linked to Type 2 Diabetes, Cardiovascular Diseases, and All-Cause Mortality: A Systematic Review and Dose-Response Meta-Analysis of Prospective Cohort Studies"
|
||||
, journal = "Nutrients"
|
||||
, year = "2021"
|
||||
, link = "https://doi.org/10.3390/nu13082636"
|
||||
}
|
||||
, { author = "Hallberg, Sarah J., et al."
|
||||
, title = "Effectiveness and Safety of a Novel Care Model for the Management of Type 2 Diabetes at 1 Year: An Open-Label, Non-Randomized, Controlled Study"
|
||||
, journal = "Diabetes Therapy: Research, Treatment and Education of Diabetes and Related Disorders"
|
||||
, year = "2018"
|
||||
, link = "https://doi.org/10.1007/s13300-018-0373-9"
|
||||
}
|
||||
, { author = "Athinarayanan, Shaminie J., et al."
|
||||
, title = "Long-Term Effects of a Novel Continuous Remote Care Intervention Including Nutritional Ketosis for the Management of Type 2 Diabetes: A 2-Year Non-Randomized Clinical Trial"
|
||||
, journal = "Frontiers in Endocrinology"
|
||||
, year = "2019"
|
||||
, link = "https://doi.org/10.3389/fendo.2019.00348"
|
||||
}
|
||||
, { author = "Veazie, S., Vela, K., & Helfand, M."
|
||||
, title = "Evidence Brief: Virtual Diet Programs for Diabetes"
|
||||
, journal = "Evidence Synthesis Program (ESP)"
|
||||
, year = "2020"
|
||||
, link = "http://www.hsrd.research.va.gov/publications/esp/"
|
||||
}
|
||||
, { author = "McKenzie, Amy, et al."
|
||||
, title = "SUN-LB113 A Continuous Remote Care Intervention Utilizing Carbohydrate Restriction Including Nutritional Ketosis Improves Markers of Metabolic Risk and Reduces Diabetes Medication Use in Patients With Type 2 Diabetes Over 3.5 Years"
|
||||
, journal = "Journal of the Endocrine Society"
|
||||
, year = "2020"
|
||||
, link = "https://doi.org/10.1210/jendso/bvaa046.2302"
|
||||
}
|
||||
, { author = "Hiebert, Nick"
|
||||
, title = "A Comprehensive Rebuttal to Seed Oil Sophistry"
|
||||
, journal = "The Nutrivore"
|
||||
, year = "2021"
|
||||
, link = "https://www.the-nutrivore.com/post/a-comprehensive-rebuttal-to-seed-oil-sophistry"
|
||||
}
|
||||
, { author = "Wu, Jason H. Y., et al."
|
||||
, title = "Omega-6 Fatty Acid Biomarkers and Incident Type 2 Diabetes: Pooled Analysis of Individual-Level Data for 39,740 Adults from 20 Prospective Cohort Studies"
|
||||
, journal = "The Lancet. Diabetes & Endocrinology"
|
||||
, year = "2017"
|
||||
, link = "https://doi.org/10.1016/S2213-8587(17)30307-8"
|
||||
}
|
||||
, { author = "Houtsmuller, A. J., et al."
|
||||
, title = "Favorable Influences of Linoleic Acid on the Progression of Diabetic Micro- and Macroangiopathy in Adult Onset Diabetes Mellitus"
|
||||
, journal = "Progress in Lipid Research"
|
||||
, year = "1981"
|
||||
, link = "https://doi.org/10.1016/0163-7827(81)90070-9"
|
||||
}
|
||||
, { author = "Watts, G. F., et al."
|
||||
, title = "Effects on Coronary Artery Disease of Lipid-Lowering Diet, or Diet plus Cholestyramine, in the St Thomas’ Atherosclerosis Regression Study (STARS)"
|
||||
, journal = "Lancet (London, England)"
|
||||
, year = "1992"
|
||||
, link = "https://doi.org/10.1016/0140-6736(92)90863-x"
|
||||
}
|
||||
, { author = "Hooper, Lee, et al."
|
||||
, title = "Reduction in Saturated Fat Intake for Cardiovascular Disease"
|
||||
, journal = "The Cochrane Database of Systematic Reviews"
|
||||
, year = "2020"
|
||||
, link = "https://doi.org/10.1002/14651858.CD011737.pub2"
|
||||
}
|
||||
, { author = "Ley, Sarah J., et al."
|
||||
, title = "Long-Term Effects of a Reduced Fat Diet Intervention on Cardiovascular Disease Risk Factors in Individuals with Glucose Intolerance"
|
||||
, journal = "Diabetes Research and Clinical Practice"
|
||||
, year = "2004"
|
||||
, link = "https://doi.org/10.1016/j.diabres.2003.09.001"
|
||||
}
|
||||
, { author = "Lim, E. L., et al."
|
||||
, title = "Reversal of Type 2 Diabetes: Normalisation of Beta Cell Function in Association with Decreased Pancreas and Liver Triacylglycerol"
|
||||
, journal = "Diabetologia"
|
||||
, year = "2011"
|
||||
, link = "https://doi.org/10.1007/s00125-011-2204-7"
|
||||
}
|
||||
, { author = "Taylor, R."
|
||||
, title = "Banting Memorial Lecture 2012: Reversing the Twin Cycles of Type 2 Diabetes"
|
||||
, journal = "Diabetic Medicine: A Journal of the British Diabetic Association"
|
||||
, year = "2013"
|
||||
, link = "https://doi.org/10.1111/dme.12039"
|
||||
}
|
||||
, { author = "Taylor, Roy, and Rury R. Holman"
|
||||
, title = "Normal Weight Individuals Who Develop Type 2 Diabetes: The Personal Fat Threshold"
|
||||
, journal = "Clinical Science (London, England: 1979)"
|
||||
, year = "2015"
|
||||
, link = "https://doi.org/10.1042/CS20140553"
|
||||
}
|
||||
, { author = "Taylor, Roy, et al."
|
||||
, title = "Aetiology of Type 2 Diabetes in People with a ‘normal’ Body Mass Index: Testing the Personal Fat Threshold Hypothesis"
|
||||
, journal = "Clinical Science (London, England: 1979)"
|
||||
, year = "2023"
|
||||
, link = "https://doi.org/10.1042/CS20230586"
|
||||
}
|
||||
, { author = "Ravikumar, Balasubramanian, et al."
|
||||
, title = "Pioglitazone Decreases Fasting and Postprandial Endogenous Glucose Production in Proportion to Decrease in Hepatic Triglyceride Content"
|
||||
, journal = "Diabetes"
|
||||
, year = "2008"
|
||||
, link = "https://doi.org/10.2337/db07-1828"
|
||||
}
|
||||
, { author = "Petersen, Kitt Falk, et al."
|
||||
, title = "Reversal of Nonalcoholic Hepatic Steatosis, Hepatic Insulin Resistance, and Hyperglycemia by Moderate Weight Reduction in Patients with Type 2 Diabetes"
|
||||
, journal = "Diabetes"
|
||||
, year = "2005"
|
||||
, link = "https://doi.org/10.2337/diabetes.54.3.603"
|
||||
}
|
||||
, { author = "Steven, S., and R. Taylor"
|
||||
, title = "Restoring Normoglycaemia by Use of a Very Low Calorie Diet in Long- and Short-Duration Type 2 Diabetes"
|
||||
, journal = "Diabetic Medicine: A Journal of the British Diabetic Association"
|
||||
, year = "2015"
|
||||
, link = "https://doi.org/10.1111/dme.12722"
|
||||
}
|
||||
, { author = "Lean, Michael Ej, et al."
|
||||
, title = "Primary Care-Led Weight Management for Remission of Type 2 Diabetes (DiRECT): An Open-Label, Cluster-Randomised Trial"
|
||||
, journal = "Lancet (London, England)"
|
||||
, year = "2018"
|
||||
, link = "https://doi.org/10.1016/S0140-6736(17)33102-1"
|
||||
}
|
||||
, { author = "Lean, Michael E. J., et al."
|
||||
, title = "Durability of a Primary Care-Led Weight-Management Intervention for Remission of Type 2 Diabetes: 2-Year Results of the DiRECT Open-Label, Cluster-Randomised Trial"
|
||||
, journal = "The Lancet. Diabetes & Endocrinology"
|
||||
, year = "2019"
|
||||
, link = "https://doi.org/10.1016/S2213-8587(19)30068-3"
|
||||
}
|
||||
, { author = "Lean, Michael Ej, et al."
|
||||
, title = "5-Year Follow-up of the Randomised Diabetes Remission Clinical Trial (DiRECT) of Continued Support for Weight Loss Maintenance in the UK: An Extension Study"
|
||||
, journal = "The Lancet. Diabetes & Endocrinology"
|
||||
, year = "2024"
|
||||
, link = "https://doi.org/10.1016/S2213-8587(23)00385-6"
|
||||
}
|
||||
]
|
||||
}
|
||||
29
packages/website/frontend/src/Config/Pages/Blogs/MainBlog/Template.elm
Executable file
29
packages/website/frontend/src/Config/Pages/Blogs/MainBlog/Template.elm
Executable file
|
|
@ -0,0 +1,29 @@
|
|||
module Config.Pages.Blogs.MainBlog.Template exposing (article)
|
||||
|
||||
import Config.Pages.Blogs.Types exposing (BlogArticle)
|
||||
import Route.Path as Path
|
||||
|
||||
|
||||
article : BlogArticle
|
||||
article =
|
||||
{ articleName = ""
|
||||
, articleLink = Path.toString Path.Blog_
|
||||
, articleAuthor = "Nick Hiebert"
|
||||
, isNewTabLink = False
|
||||
, hasReferences = True
|
||||
, hasTableOfContents = True
|
||||
, articleImage = ""
|
||||
, articlePublished = ""
|
||||
, articleBody = """
|
||||
|
||||
|
||||
Thank you for reading! If you like what you've read and want help me create more content like this, consider pledging your [Support](https://www.uprootnutrition.com/donate). Every little bit helps! I hope you found the content interesting!"""
|
||||
, articleReferences =
|
||||
[ { author = ""
|
||||
, title = ""
|
||||
, journal = ""
|
||||
, year = ""
|
||||
, link = ""
|
||||
}
|
||||
]
|
||||
}
|
||||
17
packages/website/frontend/src/Config/Pages/Blogs/Types.elm
Executable file
17
packages/website/frontend/src/Config/Pages/Blogs/Types.elm
Executable file
|
|
@ -0,0 +1,17 @@
|
|||
module Config.Pages.Blogs.Types exposing (BlogArticle)
|
||||
|
||||
import Config.Helpers.Articles.Types exposing (References)
|
||||
|
||||
|
||||
type alias BlogArticle =
|
||||
{ articleName : String
|
||||
, articleBody : String
|
||||
, articleImage : String
|
||||
, articleLink : String
|
||||
, articleAuthor : String
|
||||
, isNewTabLink : Bool
|
||||
, hasReferences : Bool
|
||||
, hasTableOfContents : Bool
|
||||
, articlePublished : String
|
||||
, articleReferences : List References
|
||||
}
|
||||
34
packages/website/frontend/src/Config/Pages/Contact/Records.elm
Executable file
34
packages/website/frontend/src/Config/Pages/Contact/Records.elm
Executable file
|
|
@ -0,0 +1,34 @@
|
|||
module Config.Pages.Contact.Records exposing (..)
|
||||
|
||||
import Config.Pages.Contact.Types exposing (Contact)
|
||||
import Route.Path as Path
|
||||
|
||||
|
||||
contactInquiry : Contact
|
||||
contactInquiry =
|
||||
{ contactName = "General Inquiries"
|
||||
, contactImage = "email"
|
||||
, contactDescription = "To submit any inquiries, including service purchases, general questions, guest appearances, webinars, public speaking, please reach out via email by clicking here. You may also submit Discord ban appeals here if you wish. To submit any criticism of the content on this site, follow the Criticism link below."
|
||||
, contactLink = Path.toString Path.Contact_Inquiry
|
||||
, isNewTabLink = False
|
||||
}
|
||||
|
||||
|
||||
contactCriticism : Contact
|
||||
contactCriticism =
|
||||
{ contactName = "Criticism"
|
||||
, contactImage = "discord"
|
||||
, contactDescription = "To submit critiques of my arguments, reasoning, blog articles, video content, or public statements, please follow this link and adhere to the instructions precisely. Before pursuing any criticism, consider that misuse of this option may result in an immediate Discord ban with no opportunity for appeal."
|
||||
, contactLink = Path.toString Path.Contact_Criticism
|
||||
, isNewTabLink = False
|
||||
}
|
||||
|
||||
|
||||
contactMain : Contact
|
||||
contactMain =
|
||||
{ contactName = "Contact"
|
||||
, contactImage = ""
|
||||
, contactDescription = ""
|
||||
, contactLink = ""
|
||||
, isNewTabLink = True
|
||||
}
|
||||
10
packages/website/frontend/src/Config/Pages/Contact/Types.elm
Executable file
10
packages/website/frontend/src/Config/Pages/Contact/Types.elm
Executable file
|
|
@ -0,0 +1,10 @@
|
|||
module Config.Pages.Contact.Types exposing (Contact)
|
||||
|
||||
|
||||
type alias Contact =
|
||||
{ contactName : String
|
||||
, contactImage : String
|
||||
, contactLink : String
|
||||
, contactDescription : String
|
||||
, isNewTabLink : Bool
|
||||
}
|
||||
113
packages/website/frontend/src/Config/Pages/Debate/Arguments/List.elm
Executable file
113
packages/website/frontend/src/Config/Pages/Debate/Arguments/List.elm
Executable file
|
|
@ -0,0 +1,113 @@
|
|||
module Config.Pages.Debate.Arguments.List exposing (argumentList)
|
||||
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Records.Abortion exposing (argumentAbortion)
|
||||
import Config.Pages.Debate.Arguments.Records.Agnosticism exposing (argumentAgnosticism)
|
||||
import Config.Pages.Debate.Arguments.Records.AgriculturalPredation exposing (argumentAgriculturalPredation)
|
||||
import Config.Pages.Debate.Arguments.Records.AnabolicKeto exposing (argumentAnabolicKeto)
|
||||
import Config.Pages.Debate.Arguments.Records.AnimalRights exposing (argumentAnimalRights)
|
||||
import Config.Pages.Debate.Arguments.Records.AntagonisticPleiotropy exposing (argumentAntagonisticPleiotropy)
|
||||
import Config.Pages.Debate.Arguments.Records.AntiRewilding exposing (argumentAntiRewilding)
|
||||
import Config.Pages.Debate.Arguments.Records.AntiVandalism exposing (argumentAntiVandalism)
|
||||
import Config.Pages.Debate.Arguments.Records.ApoBCVD exposing (argumentApoBCVD)
|
||||
import Config.Pages.Debate.Arguments.Records.BoobyTrapPagers exposing (argumentBoobyTrapPagers)
|
||||
import Config.Pages.Debate.Arguments.Records.CarbsObesity exposing (argumentCarbsObesity)
|
||||
import Config.Pages.Debate.Arguments.Records.CateUpfReductio exposing (argumentCateUpfReductio)
|
||||
import Config.Pages.Debate.Arguments.Records.ColonizingNature exposing (argumentColonizingNature)
|
||||
import Config.Pages.Debate.Arguments.Records.CropDeaths exposing (argumentCropDeaths)
|
||||
import Config.Pages.Debate.Arguments.Records.DairyCowRape exposing (argumentDairyCowRape)
|
||||
import Config.Pages.Debate.Arguments.Records.DietaryCholesterol exposing (argumentDietaryCholesterol)
|
||||
import Config.Pages.Debate.Arguments.Records.Dummy exposing (argumentDummy)
|
||||
import Config.Pages.Debate.Arguments.Records.EfilismPatrolSquad exposing (argumentEfilismPatrolSquad)
|
||||
import Config.Pages.Debate.Arguments.Records.EpidemiologyCausality exposing (argumentEpidemiologyCausality)
|
||||
import Config.Pages.Debate.Arguments.Records.EthicalSlurs exposing (argumentEthicalSlurs)
|
||||
import Config.Pages.Debate.Arguments.Records.FineTuning exposing (argumentFineTuning)
|
||||
import Config.Pages.Debate.Arguments.Records.FlatEarthDebunk exposing (argumentFlatEarthDebunk)
|
||||
import Config.Pages.Debate.Arguments.Records.FructoseNAFLD exposing (argumentFructoseNAFLD)
|
||||
import Config.Pages.Debate.Arguments.Records.HealthPromotingFoods exposing (argumentHealthPromotingFoods)
|
||||
import Config.Pages.Debate.Arguments.Records.HealthSeeker exposing (argumentHealthSeeker)
|
||||
import Config.Pages.Debate.Arguments.Records.HealthyChocolate exposing (argumentHealthyChocolate)
|
||||
import Config.Pages.Debate.Arguments.Records.HealthyDairy exposing (argumentHealthyDairy)
|
||||
import Config.Pages.Debate.Arguments.Records.HealthyFattyFish exposing (argumentHealthyFattyFish)
|
||||
import Config.Pages.Debate.Arguments.Records.HealthyFibre exposing (argumentHealthyFibre)
|
||||
import Config.Pages.Debate.Arguments.Records.HealthyFood exposing (argumentHealthyFood)
|
||||
import Config.Pages.Debate.Arguments.Records.HealthyPlantFoods exposing (argumentHealthyPlantFoods)
|
||||
import Config.Pages.Debate.Arguments.Records.HealthySeedOils exposing (argumentHealthySeedOils)
|
||||
import Config.Pages.Debate.Arguments.Records.HealthySoy exposing (argumentHealthySoy)
|
||||
import Config.Pages.Debate.Arguments.Records.ImmortalityReductio exposing (argumentImmortalityReductio)
|
||||
import Config.Pages.Debate.Arguments.Records.LuigiTerrorist exposing (argumentLuigiTerrorist)
|
||||
import Config.Pages.Debate.Arguments.Records.Malondialdehyde exposing (argumentMalondialdehyde)
|
||||
import Config.Pages.Debate.Arguments.Records.OddOrderPredators exposing (argumentOddOrderPredators)
|
||||
import Config.Pages.Debate.Arguments.Records.Omega3Omega6Ratio exposing (argumentOmega3Omega6Ratio)
|
||||
import Config.Pages.Debate.Arguments.Records.Ostroveganism exposing (argumentOstroveganism)
|
||||
import Config.Pages.Debate.Arguments.Records.PlantBasedCVDReversal exposing (argumentPlantBasedCVDReversal)
|
||||
import Config.Pages.Debate.Arguments.Records.PollinationReductio exposing (argumentPollinationReductio)
|
||||
import Config.Pages.Debate.Arguments.Records.PolyphenolReductio exposing (argumentPolyphenolReductio)
|
||||
import Config.Pages.Debate.Arguments.Records.ScratcherPioneers exposing (argumentScratcherPioneers)
|
||||
import Config.Pages.Debate.Arguments.Records.SodiumCVD exposing (argumentSodiumCVD)
|
||||
import Config.Pages.Debate.Arguments.Records.TMAOCausality exposing (argumentTMAOCausality)
|
||||
import Config.Pages.Debate.Arguments.Records.Template exposing (argument)
|
||||
import Config.Pages.Debate.Arguments.Records.TransPeople exposing (argumentTransPeople)
|
||||
import Config.Pages.Debate.Arguments.Records.TruncatedMeta exposing (argumentTruncatedMeta)
|
||||
import Config.Pages.Debate.Arguments.Records.UnhealthyCoconutOil exposing (argumentUnhealthyCoconutOil)
|
||||
import Config.Pages.Debate.Arguments.Records.UnhealthyProcessedMeat exposing (argumentUnhealthyProcessedMeat)
|
||||
import Config.Pages.Debate.Arguments.Records.UnhealthyRedMeat exposing (argumentUnhealthyRedMeat)
|
||||
import Config.Pages.Debate.Arguments.Records.UnhealthySaturatedFat exposing (argumentUnhealthySaturatedFat)
|
||||
import Config.Pages.Debate.Arguments.Records.VeganSocietyReductio exposing (argumentVeganSocietyReductio)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (..)
|
||||
|
||||
|
||||
argumentList : List Argument
|
||||
argumentList =
|
||||
[ argumentApoBCVD
|
||||
, argumentAnabolicKeto
|
||||
, argumentAntagonisticPleiotropy
|
||||
, argumentCarbsObesity
|
||||
, argumentCateUpfReductio
|
||||
, argumentDietaryCholesterol
|
||||
, argumentFructoseNAFLD
|
||||
, argumentHealthPromotingFoods
|
||||
, argumentHealthSeeker
|
||||
, argumentHealthyChocolate
|
||||
, argumentHealthyDairy
|
||||
, argumentHealthyFattyFish
|
||||
, argumentHealthyFibre
|
||||
, argumentHealthyFood
|
||||
, argumentHealthyPlantFoods
|
||||
, argumentHealthySeedOils
|
||||
, argumentHealthySoy
|
||||
, argumentMalondialdehyde
|
||||
, argumentOmega3Omega6Ratio
|
||||
, argumentPlantBasedCVDReversal
|
||||
, argumentLuigiTerrorist
|
||||
, argumentPolyphenolReductio
|
||||
, argumentSodiumCVD
|
||||
, argumentTMAOCausality
|
||||
, argumentUnhealthyCoconutOil
|
||||
, argumentUnhealthyProcessedMeat
|
||||
, argumentUnhealthyRedMeat
|
||||
, argumentUnhealthySaturatedFat
|
||||
, argumentAbortion
|
||||
, argumentAgnosticism
|
||||
, argumentAgriculturalPredation
|
||||
, argumentAnimalRights
|
||||
, argumentAntiRewilding
|
||||
, argumentAntiVandalism
|
||||
, argumentColonizingNature
|
||||
, argumentCropDeaths
|
||||
, argumentDairyCowRape
|
||||
, argumentEfilismPatrolSquad
|
||||
, argumentEthicalSlurs
|
||||
, argumentFineTuning
|
||||
, argumentImmortalityReductio
|
||||
, argumentOddOrderPredators
|
||||
, argumentOstroveganism
|
||||
, argumentPollinationReductio
|
||||
, argumentScratcherPioneers
|
||||
, argumentTransPeople
|
||||
, argumentVeganSocietyReductio
|
||||
, argumentBoobyTrapPagers
|
||||
, argumentEpidemiologyCausality
|
||||
, argumentFlatEarthDebunk
|
||||
, argumentTruncatedMeta
|
||||
]
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
module Config.Pages.Debate.Arguments.Records.Abortion exposing (argumentAbortion)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentAbortion : Argument
|
||||
argumentAbortion =
|
||||
{ argumentTitle = toTitleCase "Argument Against Sentient Abortions"
|
||||
, propositionTitle = "One's whims are not a sufficient justification for the termination of sentient human life."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "Consenting to becoming pregnant, or at least implicitly accepting the risks of pregnancy by engaging in reckless sex, should disqualify one from having the opportunity to a abort a sentient fetus if the pregnancy doesn't pose a significant health risk to the mother."
|
||||
, proofLink = "https://www.umsu.de/trees/#(P~2Q~5R),(P),(Q),((R~1F~1~3H)~5M),(F),(~3H),(M~5~3W)%7C=(~3W)"
|
||||
, argumentCertainty = 6
|
||||
, argumentImage = "abortion"
|
||||
, argumentHashtags = [ PoliticsAbortion, PhilosophySentience, PhilosophyEthics ]
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P"
|
||||
, definiens = "one consents to becoming pregnant"
|
||||
}
|
||||
, { definiendum = "Q"
|
||||
, definiens = "one consensually engages in sexual activity without contraception"
|
||||
}
|
||||
, { definiendum = "R"
|
||||
, definiens = "one is implicitly committed to at least accepting the average risks for the average pregnancy"
|
||||
}
|
||||
, { definiendum = "F"
|
||||
, definiens = "one's pregnancy persists long enough for fetal sentience to develop"
|
||||
}
|
||||
, { definiendum = "H"
|
||||
, definiens = "one's risk profile during pregnancy is high"
|
||||
}
|
||||
, { definiendum = "M"
|
||||
, definiens = "one is morally bound to carrying the pregnancy to term"
|
||||
}
|
||||
, { definiendum = "W"
|
||||
, definiens = "one's whims are a sufficient justification for the termination of sentient human life"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "If one consents to becoming pregnant or one consensually engages in sexual activity without contraception, then one is implicitly committed to at least accepting the average risks for the average pregnancy."
|
||||
, notation = "P∨Q→R"
|
||||
}
|
||||
, { premise = "One consents to becoming pregnant."
|
||||
, notation = "P"
|
||||
}
|
||||
, { premise = "One consensually engages in sexual activity without contraception."
|
||||
, notation = "Q"
|
||||
}
|
||||
, { premise = "If one is implicitly committed to at least accepting the average risks for the average pregnancy and one's pregnancy persists long enough for fetal sentience to develop and one's risk profile during pregnancy is not high, then one is morally bound to carrying the pregnancy to term."
|
||||
, notation = "R∧F∧¬H→M"
|
||||
}
|
||||
, { premise = "One's pregnancy persists long enough for fetal sentience to develop."
|
||||
, notation = "F"
|
||||
}
|
||||
, { premise = "One's risk profile during pregnancy is not high."
|
||||
, notation = "¬H"
|
||||
}
|
||||
, { premise = "If one is morally bound to carrying the pregnancy to term, then one's whims are not a sufficient justification for the termination of sentient human life."
|
||||
, notation = "M→¬W"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, one's whims are not a sufficient justification for the termination of sentient human life."
|
||||
, conclusionNotation = "¬W"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
module Config.Pages.Debate.Arguments.Records.Agnosticism exposing (argumentAgnosticism)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentAgnosticism : Argument
|
||||
argumentAgnosticism =
|
||||
{ argumentTitle = toTitleCase "Agnosticism Consistency Checker"
|
||||
, propositionTitle = "An interlocutor (who cannot unpack what evidence would lead them to change their doxastic attitude on a proposition) should temporarily withhold the belief that the proposition at hand is true."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "Listen, if one doesn't know what would change their mind on a topic, about which they form strong opinions, then it's not clear why they'd even hold said opinions strongly in the first place. Given this, it would make more sense just to suspend your judgement in the meantime and form no opinions on the subject."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x~6y(~3Pxy~5~3Qxy)),(~6x~6y(~3Qxy~5Rxy)),(~3Por)|=(Ror)"
|
||||
, argumentCertainty = 9
|
||||
, argumentImage = "agnostic"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x,y)"
|
||||
, definiens = "(x) can unpack what evidence would lead them to change their doxastic attitude on (y)"
|
||||
}
|
||||
, { definiendum = "Q(x,y)"
|
||||
, definiens = "(x) knows why they believe that (y) is true"
|
||||
}
|
||||
, { definiendum = "R(x,y)"
|
||||
, definiens = "(x) should temporarily withhold the belief that (y) is true"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a person"
|
||||
}
|
||||
, { definiendum = "y"
|
||||
, definiens = "a proposition"
|
||||
}
|
||||
, { definiendum = "o"
|
||||
, definiens = "the interlocutor"
|
||||
}
|
||||
, { definiendum = "r"
|
||||
, definiens = "the proposition at hand"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "If one cannot unpack what evidence would lead them to change their doxastic attitude on a proposition, then one does does not know why they believe that a proposition is true."
|
||||
, notation = "∀x∀y(¬Pxy→¬Qxy)"
|
||||
}
|
||||
, { premise = "If one does not know why they believe that a proposition is true, then one should temporarily withhold the belief that a proposition is true."
|
||||
, notation = "∀x∀y(¬Qxy→Rxy)"
|
||||
}
|
||||
, { premise = "The interlocutor cannot unpack what evidence would lead them to change their doxastic attitude on the proposition at hand."
|
||||
, notation = "(¬Por)"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, the interlocutor should temporarily withhold the belief that the proposition at hand is true."
|
||||
, conclusionNotation = "Ror"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
module Config.Pages.Debate.Arguments.Records.AgriculturalPredation exposing (argumentAgriculturalPredation)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentAgriculturalPredation : Argument
|
||||
argumentAgriculturalPredation =
|
||||
{ argumentTitle = toTitleCase "Argument for Animal Agrirculture as Predation"
|
||||
, propositionTitle = "Animal agriculture counts as predation."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "Some vegans suggest that killing odd order predators is wrong because predation is permissible. However, if animal agriculture also counts as predation, it's analytically entailed that animal agriculture is permissible as well."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x~6y~6z(Px~4Qxyz~1(Rxyz~2Sxyz)~1Wxyz)),(Qahl),(Rahl~2Sahl),(Wahl)%7C=(Pa)"
|
||||
, argumentCertainty = 10
|
||||
, argumentImage = "predatoragriculture"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) counts as predation"
|
||||
}
|
||||
, { definiendum = "Q(x,y,z)"
|
||||
, definiens = "(x) involves a (y) regularly capturing a (z)"
|
||||
}
|
||||
, { definiendum = "R(x,y,z)"
|
||||
, definiens = "(x) involves a (y) regularly killing a (z)"
|
||||
}
|
||||
, { definiendum = "S(x,y,z)"
|
||||
, definiens = "(x) involves a (y) regularly subduing a (z)"
|
||||
}
|
||||
, { definiendum = "W(x,y,z)"
|
||||
, definiens = "(x) involves a (y) regularly consuming, to the captor's benefit, a (z)"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "an action"
|
||||
}
|
||||
, { definiendum = "y"
|
||||
, definiens = "an animal"
|
||||
}
|
||||
, { definiendum = "z"
|
||||
, definiens = "another animal"
|
||||
}
|
||||
, { definiendum = "a"
|
||||
, definiens = "animal agriculture"
|
||||
}
|
||||
, { definiendum = "h"
|
||||
, definiens = "humans"
|
||||
}
|
||||
, { definiendum = "l"
|
||||
, definiens = "livestock"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "Something counts as predation if, and only if, something involves an animal regularly capturing, killing or subduing, and consuming, to the captor's benefit, another animal."
|
||||
, notation = "∀x∀y∀z(Px↔Qxyz∧(Rxyz∨Sxyz)∧Wxyz)"
|
||||
}
|
||||
, { premise = "Animal agriculture involves humans regularly capturing livestock."
|
||||
, notation = "Qahl"
|
||||
}
|
||||
, { premise = "Animal agriculture involves humans regularly killing or subduing livestock."
|
||||
, notation = "Rahl∨Sahl"
|
||||
}
|
||||
, { premise = "Animal agriculture involves humans regularly consuming, to the captors' benefit, livestock."
|
||||
, notation = "Wahl"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, animal agriculture counts as predation."
|
||||
, conclusionNotation = "Pa"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
module Config.Pages.Debate.Arguments.Records.AnabolicKeto exposing (argumentAnabolicKeto)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentAnabolicKeto : Argument
|
||||
argumentAnabolicKeto =
|
||||
{ argumentTitle = toTitleCase "Anabolic Opportunity Cost on Keto"
|
||||
, propositionTitle = "Ketogenic diets are likely to cost anabolic potential compared to non-ketogenic diets."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "A higher proportion of amino acids are spent on gluconeogenesis while on ketogenic diets, reducing the amount available for hypertrophy. This likely costs anabolic potential on ketogenic diets compared to non-ketogenic diets."
|
||||
, proofLink = "https://www.umsu.de/trees/#(P~5Q),(P),(Q~5R)|=(R)"
|
||||
, argumentCertainty = 5
|
||||
, argumentImage = "anabolicketo"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P"
|
||||
, definiens = "a higher proportion of amino acids are spent on gluconeogenesis while on ketogenic diets compared to non-ketogenic diets"
|
||||
}
|
||||
, { definiendum = "Q"
|
||||
, definiens = "a lower proportion of amino acids are available for hypertrophy on ketogenic diets compared to non-ketogenic diets"
|
||||
}
|
||||
, { definiendum = "R"
|
||||
, definiens = "ketogenic diets are likely to cost anabolic potential compared to non-ketogenic diets"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "If a higher proportion of amino acids are spent on gluconeogenesis while on ketogenic diets compared to non-ketogenic diets, then a lower proportion of amino acids are available for hypertrophy on ketogenic diets compared to non-ketogenic diets."
|
||||
, notation = "P→Q"
|
||||
}
|
||||
, { premise = "If a lower proportion of amino acids are available for hypertrophy on ketogenic diets compared to non-ketogenic diets, then ketogenic diets are likely to cost anabolic potential compared to non-ketogenic diets."
|
||||
, notation = "Q→R"
|
||||
}
|
||||
, { premise = "A higher proportion of amino acids are spent on gluconeogenesis while on ketogenic diets compared to non-ketogenic diets."
|
||||
, notation = "P"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, ketogenic diets are likely to cost anabolic potential compared to non-ketogenic diets."
|
||||
, conclusionNotation = "R"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
module Config.Pages.Debate.Arguments.Records.AnimalRights exposing (argumentAnimalRights)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentAnimalRights : Argument
|
||||
argumentAnimalRights =
|
||||
{ argumentTitle = toTitleCase "Argument for Animal Rights"
|
||||
, propositionTitle = "We should not exploit animals to any greater degree than we would tolerate for humans."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "I view animal rights as the logical extension of trait-adjusted human rights to non-human animals. As such, if one wants to deny that animals should be given these trait-adjusted rights, they'll have to name a trait that accounts for the differential normative evaluation. Typically this is done by rejecting P3 and saying something retarded."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~5~3Qx)),(~3Pa~5~7t(Rta~5(Rth~5~3Ph))),(~3~7t(Rta~5(Rth~5~3Ph))),(Pa)|=(~3Qa)"
|
||||
, argumentCertainty = 10
|
||||
, argumentImage = "animalrights"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) has moral worth"
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "we should exploit (x) to any greater degree than we would tolerate for trait-adjusted humans"
|
||||
}
|
||||
, { definiendum = "R(t,x)"
|
||||
, definiens = "there exists a (t) that is absent in (x)"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a being"
|
||||
}
|
||||
, { definiendum = "t"
|
||||
, definiens = "trait"
|
||||
}
|
||||
, { definiendum = "a"
|
||||
, definiens = "animal"
|
||||
}
|
||||
, { definiendum = "h"
|
||||
, definiens = "human"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "For all things, if a being has moral worth, then we should not exploit it to any greater degree than we would tolerate for trait-adjusted humans."
|
||||
, notation = "∀x(Px→¬Qx)"
|
||||
}
|
||||
, { premise = "If animals don’t have moral worth, then there exists a trait that is absent in animals such that if it were absent in humans, humans wouldn’t have moral worth."
|
||||
, notation = "¬Pa→∃t(Rta→(Rth→¬Ph))"
|
||||
}
|
||||
, { premise = "There doesn’t exist a trait that is absent in animals such that if it were absent in humans, humans wouldn’t have moral worth."
|
||||
, notation = "¬∃t(Rta→(Rth→¬Ph))"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, we should not exploit animals to any greater degree than we would tolerate for trait-adjusted humans."
|
||||
, conclusionNotation = "¬Qa"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
module Config.Pages.Debate.Arguments.Records.AntagonisticPleiotropy exposing (argumentAntagonisticPleiotropy)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentAntagonisticPleiotropy : Argument
|
||||
argumentAntagonisticPleiotropy =
|
||||
{ argumentTitle = toTitleCase "Argument Against Ancestral Diets"
|
||||
, propositionTitle = "Ancestral diets have inherent disadvantages over novel diets"
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "Humans have more genetic adaptations to ancestral foods than novel foods, which makes the long-term negative consequences of antagonistic pleiotropy a greater concern for ancestral foods."
|
||||
, proofLink = "https://www.umsu.de/trees/#(P~5Q),(Q~5R),(P)|=(R)"
|
||||
, argumentCertainty = 6
|
||||
, argumentImage = "antagonisticpleiotropy"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P"
|
||||
, definiens = "humans have more genetic adaptations to ancestral foods than novel foods"
|
||||
}
|
||||
, { definiendum = "Q"
|
||||
, definiens = "antagonistic pleiotropy is more of a concern for ancestral foods than novel foods"
|
||||
}
|
||||
, { definiendum = "R"
|
||||
, definiens = "ancestral foods have inherent disadvantages over novel foods"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "If humans have more genetic adaptations to ancestral foods than novel foods, then antagonistic pleiotropy is more of a concern for ancestral foods than novel foods."
|
||||
, notation = "P→Q"
|
||||
}
|
||||
, { premise = "If antagonistic pleiotropy is more of a concern for ancestral foods than novel foods, then ancestral diets have inherent disadvantages over novel diets."
|
||||
, notation = "Q→R"
|
||||
}
|
||||
, { premise = "Humans have more genetic adaptations to ancestral foods than novel foods."
|
||||
, notation = "P"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, ancestral foods have inherent disadvantages over novel foods."
|
||||
, conclusionNotation = "R"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
module Config.Pages.Debate.Arguments.Records.AntiRewilding exposing (argumentAntiRewilding)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentAntiRewilding : Argument
|
||||
argumentAntiRewilding =
|
||||
{ argumentTitle = toTitleCase "Argument Against Rewilding"
|
||||
, propositionTitle = "Rewilding sentient animals is immoral."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "I view animal rights as the logical extension of trait-adjusted human rights to non-human animals. I think humans have the right not to be bred into wild circumstances where they're faced with the full brutality of the natural world, and by extension I think non-human animals have this right too."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~5~3Qx)),(Pa),(~3Qa~5~3R),(~3R~5Sa)|=(Sa)"
|
||||
, argumentCertainty = 10
|
||||
, argumentImage = "rewilding"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) has negative rights"
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "we should defend (x) from rights violations to any lesser degree than we would tolerate for humans"
|
||||
}
|
||||
, { definiendum = "R"
|
||||
, definiens = "it is permissible to subject animals to conditions that are likely to involve predation, starvation, or death due to environmental exposure to any greater degree than we would tolerate for humans"
|
||||
}
|
||||
, { definiendum = "S(a)"
|
||||
, definiens = "rewilding sentient animals is immoral"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a being"
|
||||
}
|
||||
, { definiendum = "a"
|
||||
, definiens = "sentient animals"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "For all things, if a being has negative rights, then we should not defend a being from rights violations to any lesser degree than we would tolerate for humans."
|
||||
, notation = "∀x(Px→¬Qx)"
|
||||
}
|
||||
, { premise = "Sentient animals have negative rights."
|
||||
, notation = "Pa"
|
||||
}
|
||||
, { premise = "If we should not defend sentient animals from rights violations to any lesser degree than we would tolerate for humans, then it is not permissible to subject sentient animals to conditions that are likely to involve predation, starvation, or death due to environmental exposure to any greater degree than we would tolerate for humans."
|
||||
, notation = "¬Qa→¬R"
|
||||
}
|
||||
, { premise = "If it is not permissible to subject sentient animals to conditions that are likely to involve predation, starvation, or death due to environmental exposure to any greater degree than we would tolerate for humans, then rewilding sentient animals is immoral."
|
||||
, notation = "¬R→Sa"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, rewilding sentient animals is immoral."
|
||||
, conclusionNotation = "Sa"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
module Config.Pages.Debate.Arguments.Records.AntiVandalism exposing (argumentAntiVandalism)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentAntiVandalism : Argument
|
||||
argumentAntiVandalism =
|
||||
{ argumentTitle = toTitleCase "Argument Against Zoo Vandalism"
|
||||
, propositionTitle = "Vandalizing zoos increases the probability of harming the animals they keep."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "The more we pressure institutions that hold innocent animals captive to direct their funds to endeavours or projects unrelated to animal care, the less money those institutions are going to have to devote to animal care."
|
||||
, proofLink = "https://www.umsu.de/trees/#(P~5Q),(P),(Q~5R)%7C=(R)"
|
||||
, argumentCertainty = 8
|
||||
, argumentImage = "antivandalism"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P"
|
||||
, definiens = "zoos must spend extra money cleaning graffiti"
|
||||
}
|
||||
, { definiendum = "Q"
|
||||
, definiens = "zoos will have less money to devote to animal care"
|
||||
}
|
||||
, { definiendum = "R"
|
||||
, definiens = "vandalizing zoos increases the probability of harming the animals they keep"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "If zoos must spend extra money cleaning graffiti, then zoos will have less money to devote to animal care."
|
||||
, notation = "P→Q"
|
||||
}
|
||||
, { premise = "If zoos will have less money to devote to animal care, then vandalizing zoos increases the probability of harming the animals they keep."
|
||||
, notation = "Q→R"
|
||||
}
|
||||
, { premise = "Zoos must spend extra money cleaning graffiti."
|
||||
, notation = "P"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, vandalizing zoos increases the probability of harming the animals they keep."
|
||||
, conclusionNotation = "R"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
module Config.Pages.Debate.Arguments.Records.ApoBCVD exposing (argumentApoBCVD)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentApoBCVD : Argument
|
||||
argumentApoBCVD =
|
||||
{ argumentTitle = toTitleCase "Argument for Atherogenic ApoB"
|
||||
, propositionTitle = "ApoB-containing lipoproteins dose-dependently cause atherosclerosis."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "ApoB-containing lipoproteins consistently and proportionately associate with increased plaque volume after controlling for relevant confounders, which satisfies the conditions outlined for an exposure to cause atherosclerosis."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Qx)),(Qw)|=(Pw)"
|
||||
, argumentCertainty = 9
|
||||
, argumentImage = "lipoprotein"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) dose-dependently causes atherosclerosis"
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "(x) consistently, linearly, and proportionately associates with increased plaque volume after adjustment or control over relevant confounders and covariates"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a substance"
|
||||
}
|
||||
, { definiendum = "w"
|
||||
, definiens = "ApoB-containing lipoproteins"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "For all things, a substance dose-dependently causes atherosclerosis if, and only if, a substance consistently, linearly, and proportionately associates with increased plaque volume after adjustment or control over relevant confounders and covariates."
|
||||
, notation = "∀x(Px↔Qx)"
|
||||
}
|
||||
, { premise = "ApoB-containing lipoproteins consistently, linearly, and proportionately associates with increased plaque volume after adjustment or control over relevant confounders and covariates."
|
||||
, notation = "Qw"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, ApoB-containing lipoproteins dose-dependently cause atherosclerosis."
|
||||
, conclusionNotation = "Pw"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
module Config.Pages.Debate.Arguments.Records.BoobyTrapPagers exposing (argumentBoobyTrapPagers)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentBoobyTrapPagers : Argument
|
||||
argumentBoobyTrapPagers =
|
||||
{ argumentTitle = toTitleCase "Argument Against Israeli Pagers as Booby-Traps"
|
||||
, propositionTitle = "The Israeli pagers were not booby-traps."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "Based on the definitions found in the IHL Databases, it's unlikely that the Israeli pager bombs qualify as booby-traps. However, there is sufficient ambiguity in the language that I'm not convinced it's necessarily an analytical truth."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~4(Qx~1Rx~1Sx))),(Qp),(Rp),(~3Sp)|=(~3Pp)"
|
||||
, argumentCertainty = 4
|
||||
, argumentImage = "pagers"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) is a booby-trap"
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "(x) is a device or material"
|
||||
}
|
||||
, { definiendum = "R(x)"
|
||||
, definiens = "(x) is designed, constructed, or adapted to kill or injure"
|
||||
}
|
||||
, { definiendum = "S(x)"
|
||||
, definiens = "(x) functions (as a device or material that was designed, constructed, or adapted to kill or injure) when a person disturbs or approaches an apparently safe act"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a device"
|
||||
}
|
||||
, { definiendum = "p"
|
||||
, definiens = "Israeli pagers"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "For all things, a device is a booby-trap if, and only if, the device is a device or material AND the device is designed, constructed, or adapted to kill or injure AND x functions (as a device or material that was designed, constructed, or adapted to kill or injure) when a person disturbs or approaches an apparently safe act."
|
||||
, notation = "∀x(Px↔(Qx∧Rx∧Sx))"
|
||||
}
|
||||
, { premise = "The Israeli pagers were devices or materials."
|
||||
, notation = "Qp"
|
||||
}
|
||||
, { premise = "The Israeli pagers were designed, constructed, or adapted to kill or injure."
|
||||
, notation = "Rp"
|
||||
}
|
||||
, { premise = "The Israeli pagers did not function (as devices or materials that were designed, constructed, or adapted to kill or injure) when a person disturbs or approaches an apparently safe act."
|
||||
, notation = "¬Sp"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, the Israeli pagers were not booby-traps."
|
||||
, conclusionNotation = "¬Pp"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
module Config.Pages.Debate.Arguments.Records.CarbsObesity exposing (argumentCarbsObesity)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentCarbsObesity : Argument
|
||||
argumentCarbsObesity =
|
||||
{ argumentTitle = toTitleCase "Argument Against the Obesogenic Carbohydrates"
|
||||
, propositionTitle = "Carbohydrates do not uniquely cause fat accumulation or obesity."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "There are a number of predictions made from the hypothesis that carbohydrates uniquely cause obesity. One of those predictions is that obesity would track with carbohydrate intake, but it doesn't"
|
||||
, proofLink = "https://www.umsu.de/trees/#(P~5Q),(~3Q)|=(~3P)"
|
||||
, argumentCertainty = 9
|
||||
, argumentImage = "carbobesity"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P"
|
||||
, definiens = "carbs uniquely cause fat accumulation or obesity"
|
||||
}
|
||||
, { definiendum = "Q"
|
||||
, definiens = "populations with high carb diets have uniquely higher rates of obesity after adjustment or control over relevant confounders and covariates"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "If carbohydrates uniquely cause fat accumulation or obesity, then, populations with high carbohydrate diets have uniquely higher rates of obesity after adjustment or control over relevant confounders and covariates."
|
||||
, notation = "P→Q"
|
||||
}
|
||||
, { premise = "Populations with high carbohydrate diets do not have uniquely higher rates of obesity after adjustment or control over relevant confounders and covariates."
|
||||
, notation = "¬Q"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, carbs do not uniquely cause fat accumulation or obesity."
|
||||
, conclusionNotation = "¬P"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
module Config.Pages.Debate.Arguments.Records.CateUpfReductio exposing (argumentCateUpfReductio)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentCateUpfReductio : Argument
|
||||
argumentCateUpfReductio =
|
||||
{ argumentTitle = toTitleCase "Cate's Ultraprocessed Food Reductio"
|
||||
, propositionTitle = "Reducing the dietary intake of red meat and butter will be good for us all."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "Cate Shanahan affirmed P1 in a post on X. The position is basically that if an ingredient is included in ultraprocessed foods, then reducing the intake of that ingredient (presumably inside and outside of the ultraprocessed food context) is a good thing."
|
||||
, proofLink = "https://www.umsu.de/trees/#~6x(Px~5Qx),Pr~1Pb|=Qr~1Qb"
|
||||
, argumentCertainty = 10
|
||||
, argumentImage = "cateupfreductio"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) is an ingredient in ultraprocessed foods"
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "reducing the dietary intake of (x) will be good for us all"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a substance"
|
||||
}
|
||||
, { definiendum = "r"
|
||||
, definiens = "red meat"
|
||||
}
|
||||
, { definiendum = "b"
|
||||
, definiens = "butter"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "If a substance is an ingredient in ultraprocessed foods, then reducing the dietary intake of that substance will be good for us all."
|
||||
, notation = "∀x(Px→Qx)"
|
||||
}
|
||||
, { premise = "Red meat and butter are ingredients in ultraprocessed foods."
|
||||
, notation = "Pr∧Pb"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, reducing the dietary intake of red meat and butter will be good for us all."
|
||||
, conclusionNotation = "Qr∧Qb"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
module Config.Pages.Debate.Arguments.Records.ColonizingNature exposing (argumentColonizingNature)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentColonizingNature : Argument
|
||||
argumentColonizingNature =
|
||||
{ argumentTitle = toTitleCase "Argument for Colonizing Nature"
|
||||
, propositionTitle = "We are justified in displacing nature into non-existence"
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "All else equal, is a world where sentient beings are getting torn to shreds and eaten alive or starving to death if they don't succumb to this fate better than a world where this does not happen? I'd argue not. As such, I advocate for non-violently displacing nature into non-existence."
|
||||
, proofLink = "https://www.umsu.de/trees/#(P~1~3Q~1~3R~1~3S~5W),(P),(~3Q),(~3R),(~3S)%7C=(W)"
|
||||
, argumentCertainty = 10
|
||||
, argumentImage = "colonizingnature"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P"
|
||||
, definiens = "the natural world contains intolerable rights violations"
|
||||
}
|
||||
, { definiendum = "Q"
|
||||
, definiens = "we know that nature is net positive or net negative for utility"
|
||||
}
|
||||
, { definiendum = "R"
|
||||
, definiens = "there is any known practical means by which to end the rights violations beyond the use of force"
|
||||
}
|
||||
, { definiendum = "S"
|
||||
, definiens = "the natural world is currently instrumentally vital to facilitating human flourishing"
|
||||
}
|
||||
, { definiendum = "W"
|
||||
, definiens = "we are justified in non-violently displacing nature into non-existence"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "If the natural world contains intolerable rights violations and we do not know that nature is net positive or net negative for utility and there is not any known practical means by which to end the rights violations beyond the use of force and the natural world is not currently instrumentally vital to facilitating human flourishing, then we are justified in non-violently displacing nature into non-existence."
|
||||
, notation = "(P∧¬Q∧¬R∧¬S)→W"
|
||||
}
|
||||
, { premise = "Nature entails intolerable rights violations."
|
||||
, notation = "P"
|
||||
}
|
||||
, { premise = "We do not know if nature is net positive or net negative for utility."
|
||||
, notation = "¬Q"
|
||||
}
|
||||
, { premise = "There is not any known practical means by which to end the rights violations beyond the use of force."
|
||||
, notation = "¬R"
|
||||
}
|
||||
, { premise = "The natural world is not currently instrumentally vital to facilitating human flourishing."
|
||||
, notation = "¬S"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, we are justified in non-violently displacing nature into non-existence."
|
||||
, conclusionNotation = "W"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
module Config.Pages.Debate.Arguments.Records.CropDeaths exposing (argumentCropDeaths)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentCropDeaths : Argument
|
||||
argumentCropDeaths =
|
||||
{ argumentTitle = toTitleCase "Cropland vs Wildland Argument"
|
||||
, propositionTitle = "Proposition"
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "We can't claim to know that cropland kills more animals than wildland, because if we did know this, there would be evidence for it, and there isn't any such evidence."
|
||||
, proofLink = "https://www.umsu.de/trees/#(P~5Q),(~3Q)%7C=(~3P)"
|
||||
, argumentCertainty = 9
|
||||
, argumentImage = "cropdeaths"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P"
|
||||
, definiens = "it is known that cropland leads to more animal death than wildland"
|
||||
}
|
||||
, { definiendum = "Q"
|
||||
, definiens = "there is evidence that cropland leads to more animal death than wildland"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "If it is known that cropland leads to more animal death than wildland, then there is evidence that cropland leads to more animal death than wildland."
|
||||
, notation = "P→Q"
|
||||
}
|
||||
, { premise = "There is not evidence that cropland leads to more animal death than wildland."
|
||||
, notation = "P"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, it is not known that cropland leads to more animal death than wildland."
|
||||
, conclusionNotation = "¬P"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
module Config.Pages.Debate.Arguments.Records.DairyCowRape exposing (argumentDairyCowRape)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentDairyCowRape : Argument
|
||||
argumentDairyCowRape =
|
||||
{ argumentTitle = toTitleCase "Argument for Animal Sex Counting as Rape"
|
||||
, propositionTitle = "An animal mating with another animal qualifies as rape."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "It's not clear that non-human animal procreation isn't an example of rape if we take sexual interaction in the absence of informed consent to be rape. So, it seems to follow that a bull mating with a cow is rape, for example."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x~6y(Px~4(Qxy~1~3Ryx))),(Qae),(~3Rea)|=(Pa)"
|
||||
, argumentCertainty = 10
|
||||
, argumentImage = "cowrape"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) qualifies as rape"
|
||||
}
|
||||
, { definiendum = "Q(x,y)"
|
||||
, definiens = "(x) involves sexual contact with (y)"
|
||||
}
|
||||
, { definiendum = "R(y,x)"
|
||||
, definiens = "(y) renders informed consent for (x)"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "an action"
|
||||
}
|
||||
, { definiendum = "y"
|
||||
, definiens = "an involved party"
|
||||
}
|
||||
, { definiendum = "a"
|
||||
, definiens = "an animal mating with another animal"
|
||||
}
|
||||
, { definiendum = "e"
|
||||
, definiens = "another animal"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "An action qualifies as rape if, and only if, the action involves sexual contact with an involved party and the involved party does not render informed consent for the action."
|
||||
, notation = "∀x∀y(Px↔(Qxy∧¬Ryx))"
|
||||
}
|
||||
, { premise = "An animal mating with another animal involves sexual contact with another animal."
|
||||
, notation = "Qae"
|
||||
}
|
||||
, { premise = "Said animal does not render informed consent to an animal mating with them."
|
||||
, notation = "¬Rea"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, an animal mating with another animal qualifies as rape."
|
||||
, conclusionNotation = "Pa"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
module Config.Pages.Debate.Arguments.Records.DietaryCholesterol exposing (argumentDietaryCholesterol)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentDietaryCholesterol : Argument
|
||||
argumentDietaryCholesterol =
|
||||
{ argumentTitle = toTitleCase "Argument for Atherogenic Dietary Cholesterol"
|
||||
, propositionTitle = "Consuming high amounts of dietary cholesterol increases heart disease risk."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "LDL causally associates with heart disease in a linear and proportional manner, and in all cases exposures that durably increase LDL over time produce likewise increases in heart disease risk. Dietary cholesterol is one such exposure."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~5Qx)),(Pd)|=(Qd)"
|
||||
, argumentCertainty = 9
|
||||
, argumentImage = "dietarycholesterol"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "consuming high amounts of (x) increases LDL"
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "(x) increases heart disease risk"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a substance"
|
||||
}
|
||||
, { definiendum = "d"
|
||||
, definiens = "dietary cholesterol"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "For all things, if consuming high amounts of a substance increases LDL, then consuming high amounts of a substance increases heart disease risk."
|
||||
, notation = "∀x(Px→Qx)"
|
||||
}
|
||||
, { premise = "Consuming high amounts of dietary cholesterol increases LDL."
|
||||
, notation = "Pd"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, consuming high amounts of dietary cholesterol increases heart disease risk."
|
||||
, conclusionNotation = "Qd"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
module Config.Pages.Debate.Arguments.Records.Dummy exposing (argumentDummy)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentDummy : Argument
|
||||
argumentDummy =
|
||||
{ argumentTitle = toTitleCase ""
|
||||
, propositionTitle = ""
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = ""
|
||||
, proofLink = ""
|
||||
, argumentCertainty = 6
|
||||
, argumentImage = ""
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = ""
|
||||
, definiens = ""
|
||||
}
|
||||
, { definiendum = ""
|
||||
, definiens = ""
|
||||
}
|
||||
, { definiendum = ""
|
||||
, definiens = ""
|
||||
}
|
||||
, { definiendum = ""
|
||||
, definiens = ""
|
||||
}
|
||||
, { definiendum = ""
|
||||
, definiens = ""
|
||||
}
|
||||
, { definiendum = ""
|
||||
, definiens = ""
|
||||
}
|
||||
, { definiendum = ""
|
||||
, definiens = ""
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "If evidence that is stronger than the best animal food epidemiology is required to demonstrate causality and confounding is a causal concept, then evidence that is stronger than the best animal food epidemiology is required to validate potential confounders."
|
||||
, notation = "(P∧Q→R)"
|
||||
}
|
||||
, { premise = "Evidence that is stronger than the best animal food epidemiology is required to demonstrate causality."
|
||||
, notation = "P"
|
||||
}
|
||||
, { premise = "Confounding is a causal concept."
|
||||
, notation = "Q"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, evidence that is stronger than the best animal food epidemiology is required to validate potential confounders."
|
||||
, conclusionNotation = "R"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
module Config.Pages.Debate.Arguments.Records.EfilismPatrolSquad exposing (argumentEfilismPatrolSquad)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentEfilismPatrolSquad : Argument
|
||||
argumentEfilismPatrolSquad =
|
||||
{ argumentTitle = toTitleCase "The Eternal Intergalactic Sentience Patrol Squad"
|
||||
, propositionTitle = "Efilists are committed to pragmatic natalism."
|
||||
, propositionReductio = "Efilists fundamentally believe that sentient life is inherently characterized by suffering and that the most ethical action is to prevent the creation of any new sentient beings, ultimately aiming to completely eliminate all conscious life in the universe to end suffering permanently."
|
||||
, propositionSummary = "If efilists follow their own logic to its ultimate conclusion, they would paradoxically be committed to a form of pragmatic natalism - the very opposite of their core philosophical stance."
|
||||
, proofLink = "https://www.umsu.de/trees/#(P~5Q),(~3Q),(~3P~1R~5~3S),(R),(~3S~5W)|=(W)"
|
||||
, argumentCertainty = 10
|
||||
, argumentImage = "efilism"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P"
|
||||
, definiens = "humans abstaining from procreation maximally reduces rights violations"
|
||||
}
|
||||
, { definiendum = "Q"
|
||||
, definiens = "humans have sterilized all sentient life in the universe"
|
||||
}
|
||||
, { definiendum = "R"
|
||||
, definiens = "many more generations are required to sterilize all sentient life in the universe"
|
||||
}
|
||||
, { definiendum = "S"
|
||||
, definiens = "efilists should abstain from procreation until all sentient life in the universe is sterilized"
|
||||
}
|
||||
, { definiendum = "W"
|
||||
, definiens = "efilists are committed to pragmatic natalism"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "If humans abstaining from procreation maximally reduces rights violations, then humans have sterilized all sentient life in the universe."
|
||||
, notation = "P→Q"
|
||||
}
|
||||
, { premise = "Humans have not sterilized all sentient life in the universe."
|
||||
, notation = "¬Q"
|
||||
}
|
||||
, { premise = "If humans abstaining from procreation does not maximally reduce rights violations and many more generations are required to sterilize all sentient life in the universe, then efilists should not abstain from procreation until all sentient life in the universe is sterilized."
|
||||
, notation = "¬P∧R→¬S"
|
||||
}
|
||||
, { premise = "Many more generations are required to sterilize all sentient life in the universe."
|
||||
, notation = "R"
|
||||
}
|
||||
, { premise = "If efilists should not abstain from procreation until all sentient life in the universe is sterilized, then efilists are committed to pragmatic natalism."
|
||||
, notation = "¬S→W"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, efilists are committed to pragmatic natalism."
|
||||
, conclusionNotation = "W"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
module Config.Pages.Debate.Arguments.Records.EpidemiologyCausality exposing (argumentEpidemiologyCausality)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentEpidemiologyCausality : Argument
|
||||
argumentEpidemiologyCausality =
|
||||
{ argumentTitle = toTitleCase "Argument for Nutritional Epidemiology"
|
||||
, propositionTitle = "Nutritional epidemiology generally provides good causal estimates."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "It's just straightforwardly the case that nutritional epidemiology has outstanding translation rates with randomized controlled trials, or at least these is overwhelmingly consistent compatibility in the results. If randomized controlled trials are the standard against which other research methods are to be evaluated, it's not clear why nutritional epidemiology wouldn't be trustworthy in the aggregate."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~5Qx)),(Pe)|=(Qe)"
|
||||
, argumentCertainty = 8
|
||||
, argumentImage = "epidemiologycausality"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) consistently identifies associations that are later confirmed by randomized controlled trials"
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "(x) generally provides good causal estimates"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a research method"
|
||||
}
|
||||
, { definiendum = "e"
|
||||
, definiens = "nutritional epidemiology"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "For all things, if a research method consistently identifies associations that are later confirmed by randomized controlled trials, then the research method generally provides good causal estimates."
|
||||
, notation = "∀x(Px→Qx)"
|
||||
}
|
||||
, { premise = "Nutritional epidemiology consistently identifies associations that are later confirmed by randomized controlled trials."
|
||||
, notation = "Pe"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, nutritional epidemiology generally provides good causal estimates."
|
||||
, conclusionNotation = "Qe"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
module Config.Pages.Debate.Arguments.Records.EthicalSlurs exposing (argumentEthicalSlurs)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentEthicalSlurs : Argument
|
||||
argumentEthicalSlurs =
|
||||
{ argumentTitle = toTitleCase "Argument for Using the Term Retard"
|
||||
, propositionTitle = "It is generally permissible to use the term retard with an altered non-bigoted meaning."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "The only historical examples of bigoted terms, such as slurs, becoming non-harmful to the demographics toward which they were historically targeted involve literally changing the usage of the term to something non-bigoted. I don’t see any historical precedent for a methodology that has been as successful in achieving this goal as altering the term's usage. Such as using the term \"nigga\" to mean \"friend\", for example."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Qx)),(~6x(~3Px~5Rx)),(~3Pr),(~3Qr~1Rr~5Sr),(Sr~5Wr)|=(Wr)"
|
||||
, argumentCertainty = 7
|
||||
, argumentImage = "ethicalslurs"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x)'s negative connotations have been neutralised"
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "(x) has been rendered non-bigoted via altered usage"
|
||||
}
|
||||
, { definiendum = "R(x)"
|
||||
, definiens = "oppressed people will continue to suffer from the use of (x)"
|
||||
}
|
||||
, { definiendum = "S(x)"
|
||||
, definiens = "it is permissible to neutralise the term retard's negative connotations"
|
||||
}
|
||||
, { definiendum = "W(x)"
|
||||
, definiens = "it is generally permissible to use the term retard with an altered non-bigoted meaning"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a slur"
|
||||
}
|
||||
, { definiendum = "r"
|
||||
, definiens = "retard"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "For all slurs, a slur's negative connotations have been neutralised if, and only if, slur has been rendered non-bigoted via altered usage."
|
||||
, notation = "∀x(Px↔Qx)"
|
||||
}
|
||||
, { premise = "For all slurs, if it is not the case that slur's negative connotations have been neutralised, then oppressed people will continue to suffer from the use of slur."
|
||||
, notation = "∀x(¬Px→Rx)"
|
||||
}
|
||||
, { premise = "It is not the case that the term retard's negative connotations have been neutralised."
|
||||
, notation = "¬Pr"
|
||||
}
|
||||
, { premise = "If the term retard has not been rendered non-bigoted via altered usage and oppressed people will continue to suffer from the use of the term retard, then it is permissible to neutralise the term retard's negative connotations."
|
||||
, notation = "¬Qr∧Rr→Sr"
|
||||
}
|
||||
, { premise = "If it is permissible to neutralise the term retard's negative connotations, then It is generally permissible to use the term retard with an altered non-bigoted meaning."
|
||||
, notation = "Sr→Wr"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, it is generally permissible to use the term retard with an altered non-bigoted meaning."
|
||||
, conclusionNotation = "Wr"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
module Config.Pages.Debate.Arguments.Records.FineTuning exposing (argumentFineTuning)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentFineTuning : Argument
|
||||
argumentFineTuning =
|
||||
{ argumentTitle = toTitleCase "Fine Tuning Debunk"
|
||||
, propositionTitle = "Fine tuning is an infinitely regressive explanation for God"
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "It's not clear why God's constitution wouldn't count as finely tuned, and to the extent that it does count as finely-tuned, it's by extension unclear why fine-tuning wouldn't be an infinitely regressive argument for God's existence."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~5Qx)),(Pg),(Qg~5R)%7C=(R)"
|
||||
, argumentCertainty = 10
|
||||
, argumentImage = "finetuning"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) is finely tuned"
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "(x) has a designer"
|
||||
}
|
||||
, { definiendum = "R"
|
||||
, definiens = "fine tuning is an infinitely regressive explanation for God"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a thing"
|
||||
}
|
||||
, { definiendum = "g"
|
||||
, definiens = "God's constitution"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "If something is finely tuned, then something has a designer."
|
||||
, notation = "∀x(Px→Qx)"
|
||||
}
|
||||
, { premise = "God's constitution is finely tuned."
|
||||
, notation = "Pg"
|
||||
}
|
||||
, { premise = "If God's constitution has a designer, then fine tuning is an infinitely regressive explanation for God."
|
||||
, notation = "Qg→R"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, fine tuning is an infinitely regressive explanation for God."
|
||||
, conclusionNotation = "R"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
module Config.Pages.Debate.Arguments.Records.FlatEarthDebunk exposing (argumentFlatEarthDebunk)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentFlatEarthDebunk : Argument
|
||||
argumentFlatEarthDebunk =
|
||||
{ argumentTitle = toTitleCase "Flat Earth Internal Critique"
|
||||
, propositionTitle = "The stars in the sky will not be perceived as rotating clockwise from anywhere else on the flat Earth, as long as you are looking towards the rotational plane."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "The argument is structured to demonstrate that, within the context of a flat Earth model, if the stars are perceived as rotating counter-clockwise from the center, they cannot also be perceived as rotating clockwise from any point on the Earth."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x~6y~6z(Pxy~5(Qyz~5Rxz))),(Pkt~1Qta),(Rka~5~3Ska)|=(~3Ska)"
|
||||
, argumentCertainty = 10
|
||||
, argumentImage = "flatearth"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x,y)"
|
||||
, definiens = "(x) is perceived as rotating counter-clockwise from point (y)"
|
||||
}
|
||||
, { definiendum = "Q(y,z)"
|
||||
, definiens = "(y) is on the same side of the rotational plane as (z)"
|
||||
}
|
||||
, { definiendum = "R(x,z)"
|
||||
, definiens = "(x) will be perceived as rotating counter-clockwise from (z), as long as you are looking towards the plane"
|
||||
}
|
||||
, { definiendum = "S(x,z)"
|
||||
, definiens = "(x) will be perceived as rotating clockwise from (z), as long as you are looking towards the plane"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "an object"
|
||||
}
|
||||
, { definiendum = "y"
|
||||
, definiens = "vantage point A"
|
||||
}
|
||||
, { definiendum = "z"
|
||||
, definiens = "vantage points B"
|
||||
}
|
||||
, { definiendum = "k"
|
||||
, definiens = "stars in the sky"
|
||||
}
|
||||
, { definiendum = "t"
|
||||
, definiens = "the center of the flat Earth"
|
||||
}
|
||||
, { definiendum = "a"
|
||||
, definiens = "anywhere else on the flat Earth"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "If an object is perceived as rotating counter-clockwise from vantage point A, then, for all vantage points B, if vantage point A is on the same side of the rotational plane as vantage points B, then the object will be perceived as rotating counter-clockwise from vantage points B, as long as you are looking towards the rotational plane."
|
||||
, notation = "∀x∀y∀z(Pxy→(Qyz→Rxz))"
|
||||
}
|
||||
, { premise = "The stars in the sky are perceived as rotating counter-clockwise from the center of the flat Earth and the center of the flat Earth is on the same side of the rotational plane as anywhere else on the flat Earth."
|
||||
, notation = "Pkt∧Qta"
|
||||
}
|
||||
, { premise = "If the stars in the sky are perceived as rotating counter-clockwise from anywhere else on the flat Earth, as long as you are looking towards the rotational plane, then the stars in the sky will not be perceived as rotating clockwise from anywhere else on the flat Earth, as long as you are looking towards the rotational plane."
|
||||
, notation = "Rka→¬Ska"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, the stars in the sky will not be perceived as rotating clockwise from anywhere else on the flat Earth, as long as you are looking towards the rotational plane."
|
||||
, conclusionNotation = "¬Ska"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
module Config.Pages.Debate.Arguments.Records.FructoseNAFLD exposing (argumentFructoseNAFLD)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentFructoseNAFLD : Argument
|
||||
argumentFructoseNAFLD =
|
||||
{ argumentTitle = toTitleCase "Argument Against Lipogenic Fructose"
|
||||
, propositionTitle = "Fructose doesn't seem to uniquely cause fatty liver disease."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "Experimental investigations into fructose overfeeding have consistently failed to produce a fatty liver phenotype in humans. This suggests that fructose, contrary to popular belief in some domains, does not uniquely cause fatty liver disease."
|
||||
, proofLink = "https://www.umsu.de/trees/#(P~5~3Q),(P)|=(~3Q)"
|
||||
, argumentCertainty = 8
|
||||
, argumentImage = "fructosenafld"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P"
|
||||
, definiens = "experimental investigations into fructose overfeeding consistently fail to recreate a fatty liver phenotype in humans"
|
||||
}
|
||||
, { definiendum = "Q"
|
||||
, definiens = "fructose seems to uniquely cause fatty liver disease"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "If experimental investigations into fructose overfeeding consistently fail to recreate a fatty liver phenotype in humans, then fructose does not seem to uniquely cause fatty liver disease."
|
||||
, notation = "P→¬Q"
|
||||
}
|
||||
, { premise = "Experimental investigations into fructose overfeeding consistently fail to recreate a fatty liver phenotype in humans."
|
||||
, notation = "P"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, fructose does not seem to uniquely cause fatty liver disease."
|
||||
, conclusionNotation = "¬Q"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
module Config.Pages.Debate.Arguments.Records.HealthPromotingFoods exposing (argumentHealthPromotingFoods)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentHealthPromotingFoods : Argument
|
||||
argumentHealthPromotingFoods =
|
||||
{ argumentTitle = toTitleCase "Argument for Food's Inherent Health Value"
|
||||
, propositionTitle = "All foods are definitionally health-promoting."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "Given that food is, by its very definition, material that provides essential nutrients and energy to sustain bodily functions and growth, it follows that anything classified as food must be inherently health-promoting by its very nature."
|
||||
, proofLink = "https://www.umsu.de/trees/#(P~5Q),(P)|=(Q)"
|
||||
, argumentCertainty = 10
|
||||
, argumentImage = "healthfoods"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P"
|
||||
, definiens = "food is defined as material consisting essentially of protein, carbohydrate, and/or fat used in the body of an organism to sustain growth, repair, and vital processes and to furnish energy"
|
||||
}
|
||||
, { definiendum = "Q"
|
||||
, definiens = "all foods are definitionally health-promoting"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "If food is defined as material consisting essentially of protein, carbohydrate, and/or fat used in the body of an organism to sustain growth, repair, and vital processes and to furnish energy, then all foods are definitionally health-promoting."
|
||||
, notation = "P→Q"
|
||||
}
|
||||
, { premise = "Food is defined as material consisting essentially of protein, carbohydrate, and/or fat used in the body of an organism to sustain growth, repair, and vital processes and to furnish energy."
|
||||
, notation = "P"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, all foods are definitionally health-promoting."
|
||||
, conclusionNotation = "Q"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
module Config.Pages.Debate.Arguments.Records.HealthSeeker exposing (argumentHealthSeeker)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentHealthSeeker : Argument
|
||||
argumentHealthSeeker =
|
||||
{ argumentTitle = toTitleCase "Ancestral Health Consistency Checker"
|
||||
, propositionTitle = "If someone (who favours consuming ancestral foods to the exclusion of novel foods because they value reducing disease risk) is not in favour of consuming a novel food (that reduces disease risk when replacing an ancestral food), then that person would be acting against their values."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "If someone values consuming ancestral foods over novel foods because they have the overall value of reducing disease risk, but a novel food reduces disease risk when replacing an ancestral food, they would be acting against their values by rejecting the novel food."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~7x(Px)~1~7y(Qy)~5~6x~6y(~3Rxy~5Sx)),(~7x(Px)),(~7y(Qy))|=(~6x~6y(~3Rxy~5Sx))"
|
||||
, argumentCertainty = 10
|
||||
, argumentImage = "healthseeker"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) favours consuming ancestral foods to the exclusion of (y) because they value reducing disease risk"
|
||||
}
|
||||
, { definiendum = "Q(y)"
|
||||
, definiens = "(y) reduces disease risk when replacing an ancestral food"
|
||||
}
|
||||
, { definiendum = "R(x,y)"
|
||||
, definiens = "(x) is in favour of consuming that (y)"
|
||||
}
|
||||
, { definiendum = "S(x)"
|
||||
, definiens = "(x) would be acting against their values"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "someone"
|
||||
}
|
||||
, { definiendum = "y"
|
||||
, definiens = "novel food"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "If there exists someone who favours consuming ancestral foods to the exclusion of novel foods because they value reducing disease risk, and there exists a novel food that reduces disease risk when replacing an ancestral food, then if that person is not in favour of consuming that novel food, then that person would be acting against their values."
|
||||
, notation = "∃x(Px)∧∃y(Qy)→∀x∀y(¬Rxy→Sx)"
|
||||
}
|
||||
, { premise = "There exists someone who favours consuming ancestral foods to the exclusion of novel foods because they value reducing disease risk."
|
||||
, notation = "∃x(Px)"
|
||||
}
|
||||
, { premise = "There exists a novel food that reduces disease risk when replacing an ancestral food."
|
||||
, notation = "∃y(Qy)"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, if that person is not in favour of consuming that novel food, then that person would be acting against their values."
|
||||
, conclusionNotation = "∀x∀y(¬Rxy→Sx)"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
module Config.Pages.Debate.Arguments.Records.HealthyChocolate exposing (argumentHealthyChocolate)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentHealthyChocolate : Argument
|
||||
argumentHealthyChocolate =
|
||||
{ argumentTitle = toTitleCase "Argument for Healthy Chocolate"
|
||||
, propositionTitle = "Chocolate does not cause atherosclerosis."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "Despite chocolate containing high amounts of saturated fat, populations that consume more chocolate do not exhibit higher rates of atherosclerosis, suggesting that chocolate does not have the same effect on heart disease risk as most other saturated fat sources."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~5Qx)),(~3Qc)|=(~3Pc)"
|
||||
, argumentCertainty = 7
|
||||
, argumentImage = "chocolate"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) has a strong tendency to associate with a reduced risk of morbidity and/or mortality after adjusting and/or controlling for relevant variables."
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "there is a dearth of epistemically countervailing data on (x)."
|
||||
}
|
||||
, { definiendum = "R(x)"
|
||||
, definiens = "it is more reasonable to believe that (x) is healthy than it is to believe the opposite."
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a food"
|
||||
}
|
||||
, { definiendum = "c"
|
||||
, definiens = "chocolate"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "For all things, if a food has a strong tendency to associate with a reduced risk of morbidity and/or mortality after adjusting and/or controling for relevant variables and there is a dearth of epistemically countervailing data on that food, then it is more reasonable to believe that the food is healthy than it is to believe the opposite."
|
||||
, notation = "∀x((Px∧Qx)→Rx)"
|
||||
}
|
||||
, { premise = "Chocolate has a strong tendency to associate with a reduced risk of morbidity and mortality after adjustment and/or controlling for relevant variables."
|
||||
, notation = "Pc"
|
||||
}
|
||||
, { premise = "There is a dearth of epistemically countervailing data on chocolate."
|
||||
, notation = "Qc"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, it is more reasonable to believe that chocolate is healthy than it is to believe the opposite."
|
||||
, conclusionNotation = "Rc"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
module Config.Pages.Debate.Arguments.Records.HealthyDairy exposing (argumentHealthyDairy)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentHealthyDairy : Argument
|
||||
argumentHealthyDairy =
|
||||
{ argumentTitle = toTitleCase "Argument for Healthy Dairy Products"
|
||||
, propositionTitle = "Non-churned, non-homogenized dairy do not cause atherosclerosis."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "The diet-heart hypothesis would predict that populations consuming more dairy foods should have higher rates of the disease. However, even when you account for factors that could plausibly influence the results, non-churned, non-homogenized dairy have been shown to consistently reduce the risk of morbidity and mortality, strongly suggesting that they directly contribute to better health outcomes, particularly with respect to cardiovascular disease and colorectal cancer."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~5Qx)),(~3Qh)|=(~3Ph)"
|
||||
, argumentCertainty = 7
|
||||
, argumentImage = "dairy"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) causes atherosclerosis"
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "populations consuming more (x) have higher rates of atherosclerosis after adjustment or control over relevant confounders and covariates"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "high saturated fat food"
|
||||
}
|
||||
, { definiendum = "h"
|
||||
, definiens = "non-churned, non-homogenized dairy"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "For all things, if a high saturated fat food causes atherosclerosis, then populations consuming more of the high saturated fat food have higher rates of atherosclerosis after adjustment or control over relevant confounders and covariates."
|
||||
, notation = "∀x(Px→Qx)"
|
||||
}
|
||||
, { premise = "Populations consuming more non-churned, non-homogenized dairy do not have higher rates of atherosclerosis after adjustment or control over relevant confounders and covariates."
|
||||
, notation = "¬Qh"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, non-churned, non-homogenized dairy do not cause atherosclerosis."
|
||||
, conclusionNotation = "¬Ph"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
module Config.Pages.Debate.Arguments.Records.HealthyFattyFish exposing (argumentHealthyFattyFish)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentHealthyFattyFish : Argument
|
||||
argumentHealthyFattyFish =
|
||||
{ argumentTitle = toTitleCase "Argument for Healthy Fatty Fish"
|
||||
, propositionTitle = "Fatty fish is healthy."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "Even when you account for factors that could plausibly influence the results, fatty fish have been shown to consistently reduce the risk of morbidity and mortality, strongly suggesting that they directly contribute to better health outcomes, particularly with respect to cardiovascular disease."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Qx)),(Qf)|=(Pf)"
|
||||
, argumentCertainty = 8
|
||||
, argumentImage = "fattyfish"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) has a strong tendency to associate with a reduced risk of morbidity and/or mortality after adjusting and/or controlling for relevant variables."
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "there is a dearth of epistemically countervailing data on (x)."
|
||||
}
|
||||
, { definiendum = "R(x)"
|
||||
, definiens = "it is more reasonable to believe that (x) is healthy than it is to believe the opposite."
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a food"
|
||||
}
|
||||
, { definiendum = "t"
|
||||
, definiens = "fatty fish"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "For all things, if a food has a strong tendency to associate with a reduced risk of morbidity and/or mortality after adjusting and/or controling for relevant variables and there is a dearth of epistemically countervailing data on that food, then it is more reasonable to believe that the food is healthy than it is to believe the opposite."
|
||||
, notation = "∀x((Px∧Qx)→Rx)"
|
||||
}
|
||||
, { premise = "Fatty fish have a strong tendency to associate with a reduced risk of morbidity and mortality after adjustment and/or controlling for relevant variables."
|
||||
, notation = "Pt"
|
||||
}
|
||||
, { premise = "There is a dearth of epistemically countervailing data on fatty fish."
|
||||
, notation = "Qt"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, it is more reasonable to believe that fatty fish are healthy than it is to believe the opposite."
|
||||
, conclusionNotation = "Rt"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
module Config.Pages.Debate.Arguments.Records.HealthyFibre exposing (argumentHealthyFibre)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentHealthyFibre : Argument
|
||||
argumentHealthyFibre =
|
||||
{ argumentTitle = toTitleCase "Argument for Healthy Fibre"
|
||||
, propositionTitle = "Fibre, whether whole or refined, is healthy."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "Even when you account for factors that could plausibly influence the results, both refined and whole fibre have been shown to consistently reduce the risk of morbidity and mortality, strongly suggesting that they directly contribute to better health outcomes, particularly with respect to cardiovascular disease."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Qx)),(Qb)|=(Pb)"
|
||||
, argumentCertainty = 9
|
||||
, argumentImage = "fibre"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) has a strong tendency to associate with a reduced risk of morbidity and/or mortality after adjusting and/or controlling for relevant variables."
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "there is a dearth of epistemically countervailing data on (x)."
|
||||
}
|
||||
, { definiendum = "R(x)"
|
||||
, definiens = "it is more reasonable to believe that (x) is healthy than it is to believe the opposite."
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a food"
|
||||
}
|
||||
, { definiendum = "f"
|
||||
, definiens = "fibre"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "For all things, if a food has a strong tendency to associate with a reduced risk of morbidity and/or mortality after adjusting and/or controling for relevant variables and there is a dearth of epistemically countervailing data on that food, then it is more reasonable to believe that the food is healthy than it is to believe the opposite."
|
||||
, notation = "∀x((Px∧Qx)→Rx)"
|
||||
}
|
||||
, { premise = "Fibre has a strong tendency to associate with a reduced risk of morbidity and mortality after adjustment and/or controlling for relevant variables."
|
||||
, notation = "Pf"
|
||||
}
|
||||
, { premise = "There is a dearth of epistemically countervailing data on fibre."
|
||||
, notation = "Qf"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, it is more reasonable to believe that fibre is healthy than it is to believe the opposite."
|
||||
, conclusionNotation = "Rf"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
module Config.Pages.Debate.Arguments.Records.HealthyFood exposing (argumentHealthyFood)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentHealthyFood : Argument
|
||||
argumentHealthyFood =
|
||||
{ argumentTitle = toTitleCase "Argument For Healthy Food Substitution"
|
||||
, propositionTitle = "Pepsi is healthy compared to leafy greens when trapped on a desert island."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "A food is considered healthier than another in a specific context if it increases the time before illness or disease sets in when replacing the other food. On a desert island, since Pepsi can extend the time before starvation compared to leafy greens, it is considered healthier than leafy greens in that context."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x~6y~6z~6w(Pxyw~4Qwxzy)),(Qdpsl)|=(Ppld)"
|
||||
, argumentCertainty = 10
|
||||
, argumentImage = "foodsubstitution"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x,y,w)"
|
||||
, definiens = "(x) is healthy compared to (w) when in (y)"
|
||||
}
|
||||
, { definiendum = "Q(x,y,z,w)"
|
||||
, definiens = "when within a (y), the consumption of (x) is likely to increase the lag-time to the onset of (z) when replacing (w)"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a food"
|
||||
}
|
||||
, { definiendum = "y"
|
||||
, definiens = "a another food"
|
||||
}
|
||||
, { definiendum = "z"
|
||||
, definiens = "an illness or disease"
|
||||
}
|
||||
, { definiendum = "w"
|
||||
, definiens = "a context"
|
||||
}
|
||||
, { definiendum = "p"
|
||||
, definiens = "Pepsi"
|
||||
}
|
||||
, { definiendum = "d"
|
||||
, definiens = "trapped on a desert island"
|
||||
}
|
||||
, { definiendum = "s"
|
||||
, definiens = "starvation"
|
||||
}
|
||||
, { definiendum = "l"
|
||||
, definiens = "leafy greens"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "A given a food is healthy compared to another given food when in a given context if, and only if, when within that context, the consumption of that given a food is likely to increase the lag-time to the onset of illness, disease, or infirmity when replacing a given other food."
|
||||
, notation = "∀x∀y∀z∀w(Pxyw↔Qwxzy)"
|
||||
}
|
||||
, { premise = "When trapped on a desert island the consumption of Pepsi increases the lag-time to the onset of starvation when replacing leafy greens."
|
||||
, notation = "Qdpsl"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, Pepsi is healthy compared to leafy greens when trapped on a desert island."
|
||||
, conclusionNotation = "Ppld"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
module Config.Pages.Debate.Arguments.Records.HealthyPlantFoods exposing (argumentHealthyPlantFoods)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentHealthyPlantFoods : Argument
|
||||
argumentHealthyPlantFoods =
|
||||
{ argumentTitle = toTitleCase "Argument for Healthy Plant Foods"
|
||||
, propositionTitle = "Whole plant foods are healthy."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "Since whole plant foods consistently consistently associate with reduced risk of illness and death, it is reasonable to conclude that whole plant foods are healthy."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Qx)),(Qf)|=(Pf)"
|
||||
, argumentCertainty = 9
|
||||
, argumentImage = "plantfoods"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) has a strong tendency to associate with a reduced risk of morbidity and/or mortality after adjusting and/or controlling for relevant variables."
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "there is a dearth of epistemically countervailing data on (x)."
|
||||
}
|
||||
, { definiendum = "R(x)"
|
||||
, definiens = "it is more reasonable to believe that (x) is healthy than it is to believe the opposite."
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a food"
|
||||
}
|
||||
, { definiendum = "w"
|
||||
, definiens = "whole plant foods"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "For all things, if a food has a strong tendency to associate with a reduced risk of morbidity and/or mortality after adjusting and/or controling for relevant variables and there is a dearth of epistemically countervailing data on that food, then it is more reasonable to believe that the food is healthy than it is to believe the opposite."
|
||||
, notation = "∀x((Px∧Qx)→Rx)"
|
||||
}
|
||||
, { premise = "Whole plant foods have a strong tendency to associate with a reduced risk of morbidity and mortality after adjustment and/or controlling for relevant variables."
|
||||
, notation = "Pw"
|
||||
}
|
||||
, { premise = "There is a dearth of epistemically countervailing data on whole plant foods."
|
||||
, notation = "Qw"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, it is more reasonable to believe that whole plant foods are healthy than it is to believe the opposite."
|
||||
, conclusionNotation = "Rw"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
module Config.Pages.Debate.Arguments.Records.HealthySeedOils exposing (argumentHealthySeedOils)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentHealthySeedOils : Argument
|
||||
argumentHealthySeedOils =
|
||||
{ argumentTitle = toTitleCase "Argument for Healthy Seed Oils"
|
||||
, propositionTitle = "Non-hydrogenated vegetable oils are healthy."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "Even when you account for known factors, or model a reasonable accounting of unknown factors, that could plausibly influence the results (such as with adjustment models in prospective cohort studies or randomization in controlled trials), non-hydrogenated vegetable oils have been shown to consistently reduce the risk of morbidity and mortality in both prospective cohort studies and randomized controlled trials, strongly suggesting that they directly contribute to better health outcomes."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~5Qx)),(Pv)|=(Qv)"
|
||||
, argumentCertainty = 9
|
||||
, argumentImage = "seedoils"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) has a strong tendency to associate with a reduced risk of morbidity and/or mortality after adjusting and/or controlling for relevant variables."
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "there is a dearth of epistemically countervailing data on (x)."
|
||||
}
|
||||
, { definiendum = "R(x)"
|
||||
, definiens = "it is more reasonable to believe that (x) is healthy than it is to believe the opposite."
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a food"
|
||||
}
|
||||
, { definiendum = "v"
|
||||
, definiens = "non-hydrogenated vegetable oils"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "For all things, if a food has a strong tendency to associate with a reduced risk of morbidity and/or mortality after adjusting and/or controling for relevant variables and there is a dearth of epistemically countervailing data on that food, then it is more reasonable to believe that the food is healthy than it is to believe the opposite."
|
||||
, notation = "∀x((Px∧Qx)→Rx)"
|
||||
}
|
||||
, { premise = "Non-hydrogenated vegetable oils have a strong tendency to associate with a reduced risk of morbidity and mortality after adjustment and/or controlling for relevant variables."
|
||||
, notation = "Pv"
|
||||
}
|
||||
, { premise = "There is a dearth of epistemically countervailing data on non-hydrogenated vegetable oils."
|
||||
, notation = "Qv"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, it is more reasonable to believe that non-hydrogenated vegetable oils are healthy than it is to believe the opposite."
|
||||
, conclusionNotation = "Rv"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
module Config.Pages.Debate.Arguments.Records.HealthySoy exposing (argumentHealthySoy)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentHealthySoy : Argument
|
||||
argumentHealthySoy =
|
||||
{ argumentTitle = toTitleCase "Argument for Healthy Soy Products"
|
||||
, propositionTitle = "Soy products are healthy."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "Even when you account for factors that could plausibly influence the results, non-hydrogenated soy products have been shown to consistently reduce the risk of morbidity and mortality, strongly suggesting that they directly contribute to better health outcomes, particularly with respect to cardiovascular disease."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Qx)),(Qs)|=(Ps)"
|
||||
, argumentCertainty = 7
|
||||
, argumentImage = "soyproducts"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) has a strong tendency to associate with a reduced risk of morbidity and/or mortality after adjusting and/or controlling for relevant variables."
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "there is a dearth of epistemically countervailing data on (x)."
|
||||
}
|
||||
, { definiendum = "R(x)"
|
||||
, definiens = "it is more reasonable to believe that (x) is healthy than it is to believe the opposite."
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a food"
|
||||
}
|
||||
, { definiendum = "s"
|
||||
, definiens = "soy products"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "For all things, if a food has a strong tendency to associate with a reduced risk of morbidity and/or mortality after adjusting and/or controling for relevant variables and there is a dearth of epistemically countervailing data on that food, then it is more reasonable to believe that the food is healthy than it is to believe the opposite."
|
||||
, notation = "∀x((Px∧Qx)→Rx)"
|
||||
}
|
||||
, { premise = "Soy products have a strong tendency to associate with a reduced risk of morbidity and mortality after adjustment and/or controlling for relevant variables."
|
||||
, notation = "Ps"
|
||||
}
|
||||
, { premise = "There is a dearth of epistemically countervailing data on soy products."
|
||||
, notation = "Qs"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, it is more reasonable to believe that soy products are healthy than it is to believe the opposite."
|
||||
, conclusionNotation = "Rs"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
module Config.Pages.Debate.Arguments.Records.ImmortalityReductio exposing (argumentImmortalityReductio)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentImmortalityReductio : Argument
|
||||
argumentImmortalityReductio =
|
||||
{ argumentTitle = toTitleCase "Appeal to Nature Immortality Reductio"
|
||||
, propositionTitle = "Senescence does not result in death."
|
||||
, propositionReductio = "People who appeal to nature in this fashion assert that death cannot result from natural biological processes. Usually this is asserted in order to avoid accepting that LDL is causative of atherosclerosis."
|
||||
, propositionSummary = "If one commits to this variation of the appeal to nature fallacy, it's unclear why they wouldn't be subsequently committed to affirm that humans are immortal, like Connor fucking MacLeod."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x~6y(Hx~5~3Rxy)),(Hs)%7C=(~3Rsd)"
|
||||
, argumentCertainty = 10
|
||||
, argumentImage = "immortality"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "humans undergo (x)"
|
||||
}
|
||||
, { definiendum = "Q(x,y)"
|
||||
, definiens = "(x) results in (y)"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "normal physiological process"
|
||||
}
|
||||
, { definiendum = "y"
|
||||
, definiens = "negative health outcome"
|
||||
}
|
||||
, { definiendum = "s"
|
||||
, definiens = "senescence"
|
||||
}
|
||||
, { definiendum = "d"
|
||||
, definiens = "death"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "If humans undergo a normal physiological process, then the normal physiological process does not result in a negative health outcome."
|
||||
, notation = "∀x∀y(Px→¬Qxy)"
|
||||
}
|
||||
, { premise = "Humans undergo senescence."
|
||||
, notation = "Ps"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, senescence does not result in death."
|
||||
, conclusionNotation = "¬Qsd"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
module Config.Pages.Debate.Arguments.Records.LuigiTerrorist exposing (argumentLuigiTerrorist)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentLuigiTerrorist : Argument
|
||||
argumentLuigiTerrorist =
|
||||
{ argumentTitle = toTitleCase "Argumnent for Luigi Mangione Being a Terrorist"
|
||||
, propositionTitle = "Luigi Mangione is a domestic terrorist"
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "According to the FBI's definition of a \" domestic terrorist \", it is quite clear that Luigi Mangione qualifies, based on his actions. It just seems like an analytic truth."
|
||||
, proofLink = "https://www.umsu.de/trees/#~6x(Px~4Qx),Qm|=Pm"
|
||||
, argumentCertainty = 10
|
||||
, argumentImage = "luigiterrorist"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) commits violent, criminal acts to further ideological goals stemming from domestic influence"
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "(x) is a domestic terrorist"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "an individual"
|
||||
}
|
||||
, { definiendum = "m"
|
||||
, definiens = "Luigi Mangione"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "An individual is a domestic terrorist if, and only if, the individual commits violent, criminal acts to further ideological goals stemming from domestic influences."
|
||||
, notation = "∀x(Px↔Qx)"
|
||||
}
|
||||
, { premise = "Luigi Mangione committed violent, criminal acts to further ideological goals stemming from domestic influence."
|
||||
, notation = "Qm"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, Luigi Mangione is a domestic terrorist."
|
||||
, conclusionNotation = "Pm"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
module Config.Pages.Debate.Arguments.Records.Malondialdehyde exposing (argumentMalondialdehyde)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentMalondialdehyde : Argument
|
||||
argumentMalondialdehyde =
|
||||
{ argumentTitle = toTitleCase "Atherogenic Omega-3 Reductio"
|
||||
, propositionTitle = "Omega-3s are atherogenic."
|
||||
, propositionReductio = "Certain anti-seed oil proponents assert that seed oils cause atherosclerosis via omega-6-derived malondialdehyde, and that this is the only cause of atherosclerosis. However, they often also assert that omega-3 fatty acids are anti-atherogenic, despite the fact that omega-3s actually produce more malondialdehyde than omega-6s."
|
||||
, propositionSummary = "If one takes the view that in order for a substance to increase the risk of atherosclerosis, it must facilitate the oxidative modification of LDL particles via malondialdehyde production, and one also affirms that omega-3s are anti-atherogenic, then this would imply that all fatty acids that produce malondialdehyde, including omega-3s, must also be atherogenic, which contradicts the their belief that omega-3s are heart-healthy."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Qx)),(Qm),(Pm~5~6x(Rx))%7C=(Ro)"
|
||||
, argumentCertainty = 6
|
||||
, argumentImage = "mda"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) increases the risk of atherosclerosis"
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "(x) facilitates the oxidative modification of LDL particles"
|
||||
}
|
||||
, { definiendum = "R(x)"
|
||||
, definiens = "all (x) are atherogenic"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a substance"
|
||||
}
|
||||
, { definiendum = "y"
|
||||
, definiens = "malondialdehyde-producing fatty acids"
|
||||
}
|
||||
, { definiendum = "m"
|
||||
, definiens = "malondialdehyde"
|
||||
}
|
||||
, { definiendum = "o"
|
||||
, definiens = "omega-3s"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "A substance increases the risk of atherosclerosis if, and only if, that substance facilitates the oxidative modification of LDL particles."
|
||||
, notation = "∀x(Px↔Qx)"
|
||||
}
|
||||
, { premise = "Malondialdehyde facilitates the oxidative modification of LDL particles."
|
||||
, notation = "Qm"
|
||||
}
|
||||
, { premise = "If malondialdehyde increases the risk of atherosclerosis, then all malondialdehyde-producing fatty acids are atherogenic."
|
||||
, notation = "Pm→∀y(Ry)"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, omega-3s are atherogenic."
|
||||
, conclusionNotation = "Ro"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
module Config.Pages.Debate.Arguments.Records.OddOrderPredators exposing (argumentOddOrderPredators)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentOddOrderPredators : Argument
|
||||
argumentOddOrderPredators =
|
||||
{ argumentTitle = toTitleCase "Argument for Culling Odd Order Predators"
|
||||
, propositionTitle = "It is permissible to prevent predation with lethal force to the same degree we would tolerate for humans."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "I view animal rights as the logical extension of trait-adjusted human rights to non-human animals. I think humans have the right not to be exposed to circumstances where they're hunted for food, and I think it is permissible to use lethal force to save the lives of the hunted, all else equal. By extension I think non-human animals have this right too."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~5~3Qx)),(Pa),(~3Qa~5R)%7C=(R)"
|
||||
, argumentCertainty = 10
|
||||
, argumentImage = "oddorderpredators"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) has negative rights"
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "we should defend (x) from rights violations to any lesser degree than we would tolerate for trait-adjusted humans"
|
||||
}
|
||||
, { definiendum = "R(x)"
|
||||
, definiens = "it is permissible to prevent predation with lethal force to the same degree we would tolerate for trait-adjusted humans"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a being"
|
||||
}
|
||||
, { definiendum = "a"
|
||||
, definiens = "animal"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "For all things, if something has negative rights, then we should not defend it from rights violations to any lesser degree than we would tolerate for trait-adjusted humans."
|
||||
, notation = "∀x(Px→¬Qx)"
|
||||
}
|
||||
, { premise = "Animals have negative rights."
|
||||
, notation = "Pa"
|
||||
}
|
||||
, { premise = "If we should not defend animals from rights violations to any lesser degree than we would tolerate for humans, then it is permissible to prevent predation with lethal force to the same degree we would tolerate for trait-adjusted humans."
|
||||
, notation = "¬Qa→R"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, it is permissible to prevent predation with lethal force to the same degree we would tolerate for trait-adjusted humans."
|
||||
, conclusionNotation = "R"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
module Config.Pages.Debate.Arguments.Records.Omega3Omega6Ratio exposing (argumentOmega3Omega6Ratio)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentOmega3Omega6Ratio : Argument
|
||||
argumentOmega3Omega6Ratio =
|
||||
{ argumentTitle = toTitleCase "Argument Against the Omega-6/Omega-3 Ratio"
|
||||
, propositionTitle = "The omega-6/omega-3 ratio is unlikely to matter for health."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "More often than not, the associated risks of a high omega-6/omega-3 ratio are better explained by omega-3 alone. In multivariable analyses, the ratio looks like it matters, but in univariable anaylses, low omega-3 is almost always driving the risk via lowering the denominator."
|
||||
, proofLink = "https://www.umsu.de/trees/#(P~5Q),(~3Q)|=(~3P)"
|
||||
, argumentCertainty = 7
|
||||
, argumentImage = "omega6omega3ratio"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P"
|
||||
, definiens = "increases or decreases in disease risk associated with a high or low omega-6/omega-3 ratio are better explained by changes in omega-3 alone"
|
||||
}
|
||||
, { definiendum = "Q"
|
||||
, definiens = "the omega-6/omega-3 ratio is likely to matter for health"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "If increases or decreases in disease risk associated with a high or low omega-6/omega-3 ratio are better explained by changes in omega-3 alone, then the omega-6/omega-3 ratio is not likely to matter for health."
|
||||
, notation = "P→¬Q"
|
||||
}
|
||||
, { premise = "Increases or decreases in disease risk associated with a high or low omega-6/omega-3 ratio are better explained by changes in omega-3 alone."
|
||||
, notation = "P"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, the omega-6/omega-3 ratio is not likely to matter for health."
|
||||
, conclusionNotation = "¬Q"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
module Config.Pages.Debate.Arguments.Records.Ostroveganism exposing (argumentOstroveganism)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentOstroveganism : Argument
|
||||
argumentOstroveganism =
|
||||
{ argumentTitle = toTitleCase "Argument for Vegan Bivalves"
|
||||
, propositionTitle = "Bivalves are not likely to be sentient."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "I view animal rights as the logical extension of trait-adjusted human rights to non-human animals. However, I do not believe that non-sentient human bodies, such as brainless or brain-dead human bodies, have such human rights. By extension, I don't believe that non-human animals that lack brains possess these rights either."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Qx~1Rx~1(Sx~2Wx))),(Qc~1~3Rc~1Sc~1~3Wc),(~3Pc~5~6x(~3Tx))|=(~3Tb)"
|
||||
, argumentCertainty = 10
|
||||
, argumentImage = "ostroveganism"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) counts as a brain"
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "(x) is a complex network of interconnected neurons"
|
||||
}
|
||||
, { definiendum = "R(x)"
|
||||
, definiens = "(x) integrates neuronal pathways from multiple sensory organs"
|
||||
}
|
||||
, { definiendum = "S(x)"
|
||||
, definiens = "(x) presents with distinct functional regions"
|
||||
}
|
||||
, { definiendum = "W(x)"
|
||||
, definiens = "(x) presents with nuclei with white matter tracts that facilitate inter-regional communication"
|
||||
}
|
||||
, { definiendum = "T(x)"
|
||||
, definiens = "the corresponding (y) is likely to be sentient"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "an object"
|
||||
}
|
||||
, { definiendum = "y"
|
||||
, definiens = "brainless biological system into which cerebral ganglia are integrated"
|
||||
}
|
||||
, { definiendum = "c"
|
||||
, definiens = "cerebral ganglia"
|
||||
}
|
||||
, { definiendum = "b"
|
||||
, definiens = "bivalves"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "Something counts as a brain if, and only if, something is a complex network of interconnected neurons, integrates neuronal pathways from multiple sensory organs, and presents with distinct functional regions or nuclei with white matter tracts that facilitate inter-regional communication."
|
||||
, notation = "∀x(Px↔(Qx∧Rx∧(Sx∨Wx)))"
|
||||
}
|
||||
, { premise = "Cerebral ganglia meet criteria one and three, but not criteria two and four."
|
||||
, notation = "Qc∧¬Rc∧Sc∧¬Wc"
|
||||
}
|
||||
, { premise = "If cerebral ganglia do not count as brains, then the corresponding brainless biological system into which the cerebral ganglia are integrated is not likely to be sentient."
|
||||
, notation = "¬Pc→∀x(¬Tx)"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, bivalves are not likely to be sentient."
|
||||
, conclusionNotation = "¬Tb"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
module Config.Pages.Debate.Arguments.Records.PlantBasedCVDReversal exposing (argumentPlantBasedCVDReversal)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentPlantBasedCVDReversal : Argument
|
||||
argumentPlantBasedCVDReversal =
|
||||
{ argumentTitle = toTitleCase "Argument Against Plant-Based CVD Reversal"
|
||||
, propositionTitle = "Plant-based diets do not appear to clinically reverse atherosclerosis."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "To date, there is not a single case of supposed heart disease reversal from a plant-based diet that is actually compatible with established definitions of heart disease reversal in the literature."
|
||||
, proofLink = "https://www.umsu.de/trees/#(P~1~3Q~5~3R),(P),(~3Q)|=(~3R)"
|
||||
, argumentCertainty = 8
|
||||
, argumentImage = "plantbasedcvd"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P"
|
||||
, definiens = "there are established definitions for atherosclerosis reversal in the domain of cardiology"
|
||||
}
|
||||
, { definiendum = "Q"
|
||||
, definiens = "current research on plant-based diets and atherosclerosis reversal satisfy the definitions for atherosclerosis reversal in the domain of cardiology"
|
||||
}
|
||||
, { definiendum = "R"
|
||||
, definiens = "plant-based diets do not appear to clinically reverse atherosclerosis"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "If there are established definitions for atherosclerosis reversal in the domain of cardiology and current research on plant-based diets and atherosclerosis reversal do not satisfy the definitions for atherosclerosis reversal in the domain of cardiology, then plant-based diets do not appear to clinically reverse atherosclerosis."
|
||||
, notation = "P∧¬Q→¬R"
|
||||
}
|
||||
, { premise = "There are established definitions for atherosclerosis reversal in the domain of cardiology."
|
||||
, notation = "P"
|
||||
}
|
||||
, { premise = "Current research on plant-based diets and atherosclerosis reversal do not satisfy the definitions for atherosclerosis reversal in the domain of cardiology."
|
||||
, notation = "¬Q"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, plant-based diets do not appear to clinically reverse atherosclerosis."
|
||||
, conclusionNotation = "¬R"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
module Config.Pages.Debate.Arguments.Records.PollinationReductio exposing (argumentPollinationReductio)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentPollinationReductio : Argument
|
||||
argumentPollinationReductio =
|
||||
{ argumentTitle = toTitleCase "Vegan Anti-Pollination Reductio"
|
||||
, propositionTitle = "Apples are not vegan"
|
||||
, propositionReductio = "Some vegans hold to a deontic principle that any form of animal exploitation is wrong, and the products of exploitation are to be boycotted and designated non-vegan."
|
||||
, propositionSummary = "If one accepts that no animal exploitation is permissible, they're committed to some truly hilarious positions, such as apples not being vegan because we exploit the natural behaviour of bees to pollinate our apple trees."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~4~3Qx)),(Qb),(~3Pb~5~6y(~3Ry))|=(~3Ra)"
|
||||
, argumentCertainty = 10
|
||||
, argumentImage = "pollinationreductio"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) is vegan"
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "(x) involves human on non-human animal exploitation"
|
||||
}
|
||||
, { definiendum = "R(y)"
|
||||
, definiens = "(y) generated are vegan"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a being"
|
||||
}
|
||||
, { definiendum = "y"
|
||||
, definiens = "a product"
|
||||
}
|
||||
, { definiendum = "b"
|
||||
, definiens = "bees pollinating human crops"
|
||||
}
|
||||
, { definiendum = "a"
|
||||
, definiens = "apples"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "Something is vegan if, and only if, something does not involve human on non-human animal exploitation."
|
||||
, notation = "∀x(Px↔¬Qx)"
|
||||
}
|
||||
, { premise = "Bees pollinating human crops involves human on non-human exploitation."
|
||||
, notation = "Qb"
|
||||
}
|
||||
, { premise = "If bees pollinating human crops is not vegan, then the products generated are not vegan."
|
||||
, notation = "¬Pb→∀y(¬Ry)"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, apples are not vegan."
|
||||
, conclusionNotation = "¬Ra"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
module Config.Pages.Debate.Arguments.Records.PolyphenolReductio exposing (argumentPolyphenolReductio)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentPolyphenolReductio : Argument
|
||||
argumentPolyphenolReductio =
|
||||
{ argumentTitle = toTitleCase "Anti-Polyphenol Reductio"
|
||||
, propositionTitle = "Anti-polyphenol, ancestral diet advocates are committed to favouring GMOs."
|
||||
, propositionReductio = "Some carnivore diet proponents suggest that phytochemical compounds, such as polyphenols, are actually harmful to human beings."
|
||||
, propositionSummary = "If one is committed to the notions that polyphenols in plants are bad for humans, and that grass-fed red meat is the healthiest available type of red meat, then they're pragmatically committed to being pro-GMO to lower the grass-derived polyphenol content of grass-fed beef."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x~6y(Px~1Qxy~5Rxy)),(Pp),(Qpg),(Rpg~5Spg),(Spg~5Wp)|=(Wp)"
|
||||
, argumentCertainty = 7
|
||||
, argumentImage = "polyphenolreductio"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) is harmful"
|
||||
}
|
||||
, { definiendum = "Q(x,y)"
|
||||
, definiens = "(x) is contained in (y)"
|
||||
}
|
||||
, { definiendum = "R(x,y)"
|
||||
, definiens = "(x) renders (y) harmful"
|
||||
}
|
||||
, { definiendum = "S(p,g)"
|
||||
, definiens = "genetic modification that removes (p) from grass renders (g) less harmful"
|
||||
}
|
||||
, { definiendum = "W(p)"
|
||||
, definiens = "health-conscious, anti-polyphenol, ancestral diet advocates are committed to favouring GMOs"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "plant defense chemicals"
|
||||
}
|
||||
, { definiendum = "y"
|
||||
, definiens = "a food"
|
||||
}
|
||||
, { definiendum = "p"
|
||||
, definiens = "polyphenols"
|
||||
}
|
||||
, { definiendum = "g"
|
||||
, definiens = "grass-fed beef"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "If plant defense chemicals are harmful and plant defense chemicals are contained in a food, then plant defense chemicals render the food harmful."
|
||||
, notation = "∀x∀y(Px∧Qxy→Rxy)"
|
||||
}
|
||||
, { premise = "Polyphenols from grass are harmful."
|
||||
, notation = "Pp"
|
||||
}
|
||||
, { premise = "Polyphenols from grass are contained in grass-fed beef."
|
||||
, notation = "Qpg"
|
||||
}
|
||||
, { premise = "If polyphenols from grass render grass-fed beef harmful, then genetic modification that removes polyphenols from grass renders grass-fed beef less harmful."
|
||||
, notation = "Rpg→Spg"
|
||||
}
|
||||
, { premise = "If genetic modification that removes polyphenols from grass renders grass-fed beef less harmful, then health-conscious, anti-polyphenol, ancestral diet advocates are committed to favouring GMOs."
|
||||
, notation = "Spg→Wp"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, health-conscious, anti-polyphenol, ancestral diet advocates are committed to favouring GMOs."
|
||||
, conclusionNotation = "Wp"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
module Config.Pages.Debate.Arguments.Records.ScratcherPioneers exposing (argumentScratcherPioneers)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentScratcherPioneers : Argument
|
||||
argumentScratcherPioneers =
|
||||
{ argumentTitle = toTitleCase "Tattoo Pioneers were Scratchers"
|
||||
, propositionTitle = "The original trailblazers of modern tattooing were scratchers."
|
||||
, propositionReductio = "Some tattoo artists condemn scratchers and their associated culture due to poor observation of sanitation standards and lack of mentorship and also simultaneously hold the original trailblazers of the tattoo industry in high esteem."
|
||||
, propositionSummary = "If what qualifies a given tattoo artist as a scratcher is poor observation of sanitation standards and lack of mentorship, then it's just straightforwardly entailed that the original trailblazers of the tattoo industry were scratchers."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Qx~2Rx~2Sx)),(Qt),(Rt),(St)%7C=(Pt)"
|
||||
, argumentCertainty = 10
|
||||
, argumentImage = "tattooscratchers"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) is a scratcher"
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "(x) tattoos without a license"
|
||||
}
|
||||
, { definiendum = "R(x)"
|
||||
, definiens = "(x) tattoos without observing basic health standards"
|
||||
}
|
||||
, { definiendum = "S(x)"
|
||||
, definiens = "(x) tattoos without having undertaken apprenticeship"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a tattoo artist"
|
||||
}
|
||||
, { definiendum = "t"
|
||||
, definiens = "original trailblazers of modern tattooing"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "A tattoo artist is a scratcher if, and only if, the tattoo artist tattoos without a license and/or one tattoos without observing basic health standards and/or one tattoos without having undertaken apprenticeship."
|
||||
, notation = "∀x(Px↔Qx∨Rx∨Sx)"
|
||||
}
|
||||
, { premise = "The original trailblazers of modern tattooing tattooed without licenses."
|
||||
, notation = "Qt"
|
||||
}
|
||||
, { premise = "The original trailblazers of modern tattooing tattooed without observing basic health standards."
|
||||
, notation = "Rt"
|
||||
}
|
||||
, { premise = "The original trailblazers of modern tattooing tattooed without having undertaken apprenticeship."
|
||||
, notation = "St"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, the original trailblazers of modern tattooing were scratchers."
|
||||
, conclusionNotation = "Pt"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
module Config.Pages.Debate.Arguments.Records.SodiumCVD exposing (argumentSodiumCVD)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentSodiumCVD : Argument
|
||||
argumentSodiumCVD =
|
||||
{ argumentTitle = toTitleCase "Argument for Atherogenic Sodium"
|
||||
, propositionTitle = "Higher intakes of sodium increases cardiovascular disease risk."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "In all of the strongest analysis on the relationship between sodium intake and cardiovascular disease risk, there is a linear and proportional relationship. Particularly when the strongest measurement methods are used, such as multiple 24-hour urinary collections."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~1Q~5Rx)),(Ps),(Q)|=(Rs)"
|
||||
, argumentCertainty = 9
|
||||
, argumentImage = "sodiumcvd"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) consistently raises blood pressure in controlled studies"
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "elevated blood pressure is known to cause cardiovascular disease"
|
||||
}
|
||||
, { definiendum = "R(x)"
|
||||
, definiens = "higher intakes of substance (x) increases cardiovascular disease risk"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a substance"
|
||||
}
|
||||
, { definiendum = "s"
|
||||
, definiens = "sodium"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "For all things, if a substance consistently raises blood pressure in controlled studies and elevated blood pressure is known to cause cardiovascular disease, then higher intakes of that substance increases cardiovascular disease risk."
|
||||
, notation = "∀x(Px∧Q→Rx)"
|
||||
}
|
||||
, { premise = "Sodium consistently raises blood pressure in controlled studies."
|
||||
, notation = "Ps"
|
||||
}
|
||||
, { premise = "Elevated blood pressure is known to cause cardiovascular disease."
|
||||
, notation = "Q"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, higher intakes of sodium increases cardiovascular disease risk."
|
||||
, conclusionNotation = "Rs"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
module Config.Pages.Debate.Arguments.Records.TMAOCausality exposing (argumentTMAOCausality)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentTMAOCausality : Argument
|
||||
argumentTMAOCausality =
|
||||
{ argumentTitle = toTitleCase "Argument Against TMAO Being Causal in CVD"
|
||||
, propositionReductio = ""
|
||||
, propositionTitle = "TMAO is not likely to be causative of heart disease."
|
||||
, propositionSummary = "In the strongest research we have on the relationship between TMAO and heart disease risk, such as with Mendelian randomization and genome-wide associational studies, there is no persuasive causal link between TMAO in the blood and heart disease risk."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Qx)),(~3Qt)|=(~3Pt)"
|
||||
, argumentCertainty = 9
|
||||
, argumentImage = "tmaocausality"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) is likely to be causative of heart diseas"
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "(x) consistently associates with an increased risk of heart disease after adjustment or control over relevant confounders and covariates"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a substance"
|
||||
}
|
||||
, { definiendum = "t"
|
||||
, definiens = "TMAO"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "For all things, if a substance is likely to be causative of heart disease if, then the substance consistently associates with an increased risk of heart disease after adjustment or control over relevant confounders and covariates."
|
||||
, notation = "∀x(Px↔Qx)"
|
||||
}
|
||||
, { premise = "TMAO consistently associates with an increased risk of heart disease after adjustment or control over relevant confounders and covariates."
|
||||
, notation = "¬Qt"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, TMAO is not likely to be causative of heart disease."
|
||||
, conclusionNotation = "¬Pt"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
module Config.Pages.Debate.Arguments.Records.Template exposing (argument)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argument : Argument
|
||||
argument =
|
||||
{ argumentTitle = toTitleCase ""
|
||||
, propositionTitle = ""
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = ""
|
||||
, proofLink = ""
|
||||
, argumentCertainty = 1
|
||||
, argumentImage = ""
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = ""
|
||||
, definiens = ""
|
||||
}
|
||||
, { definiendum = ""
|
||||
, definiens = ""
|
||||
}
|
||||
, { definiendum = ""
|
||||
, definiens = ""
|
||||
}
|
||||
, { definiendum = ""
|
||||
, definiens = ""
|
||||
}
|
||||
, { definiendum = ""
|
||||
, definiens = ""
|
||||
}
|
||||
, { definiendum = ""
|
||||
, definiens = ""
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = ""
|
||||
, notation = ""
|
||||
}
|
||||
, { premise = ""
|
||||
, notation = ""
|
||||
}
|
||||
, { premise = ""
|
||||
, notation = ""
|
||||
}
|
||||
, { premise = ""
|
||||
, notation = ""
|
||||
}
|
||||
, { premise = ""
|
||||
, notation = ""
|
||||
}
|
||||
]
|
||||
, conclusion = ""
|
||||
, conclusionNotation = ""
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
module Config.Pages.Debate.Arguments.Records.TransPeople exposing (argumentTransPeople)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentTransPeople : Argument
|
||||
argumentTransPeople =
|
||||
{ argumentTitle = toTitleCase "Argument For Trans Identity"
|
||||
, propositionTitle = "A trans person of the male sex is a woman and a trans person with female sex is a man."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "Virtually 100% of the debate surrounding trans identity is merely a trivial semantic disagreement about what constitutes a man or a woman. Below is a formal argument for characterization of a man and a women that maximally satisfies both parties and minimizes absurdities."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Rx~1Wx)),(~6x(Qx~4Sx~1Wx)),(Ra~1Wa),(Sg~1Wg)|=(Pa~1Qg)"
|
||||
, argumentCertainty = 10
|
||||
, argumentImage = "transpeople"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "Male"
|
||||
, definiens = "the cluster of traits that associate with small, but not large, gametes."
|
||||
}
|
||||
, { definiendum = "Female"
|
||||
, definiens = "the cluster of traits that associate with large, but not small, gametes."
|
||||
}
|
||||
, { definiendum = "P(x)"
|
||||
, definiens = "(x) is a woman"
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "(x) is a man"
|
||||
}
|
||||
, { definiendum = "R(x)"
|
||||
, definiens = "(x) possesses a sufficiently greater sum of weighted traits that more closely associate with large gametes than weighted traits that associate with small gametes"
|
||||
}
|
||||
, { definiendum = "S(x)"
|
||||
, definiens = "(x) possesses a sufficiently greater sum of weighted traits that more closely associate with small gametes than weighted traits that associate with large gametes"
|
||||
}
|
||||
, { definiendum = "W(x)"
|
||||
, definiens = "(x) is over 18 years of age"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "someone"
|
||||
}
|
||||
, { definiendum = "a"
|
||||
, definiens = "a trans person of the male sex"
|
||||
}
|
||||
, { definiendum = "g"
|
||||
, definiens = "a trans person of the female sex"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "Someone is a woman if, and only if, someone possesses a sufficiently greater sum of weighted traits that more closely associate with large gametes than weighted traits that associate with small gametes and someone is over 18 years of age."
|
||||
, notation = "∀x(Px↔Rx∧Wx)"
|
||||
}
|
||||
, { premise = "Someone is a man if, and only if, someone possesses a sufficiently greater sum of weighted traits that more closely associate with small gametes than weighted traits that associate with large gametes and someone is over 18 years of age."
|
||||
, notation = "∀x(Qx↔Sx∧Wx)"
|
||||
}
|
||||
, { premise = "A trans person of the male sex possesses a sufficiently greater sum of weighted traits that more closely associate with large gametes than weighted traits that associate with small gametes and a trans person with small gametes is over 18 years of age."
|
||||
, notation = "Ra∧Wa"
|
||||
}
|
||||
, { premise = "A trans person of the female sex possesses a sufficiently greater sum of weighted traits that more closely associate with small gametes than weighted traits that associate with large gametes and a trans person with large gametes is over 18 years of age."
|
||||
, notation = "Sg∧Wg"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, a trans person of the male sex is a woman and a trans person with female sex is a man."
|
||||
, conclusionNotation = "Pa∧Qg"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
module Config.Pages.Debate.Arguments.Records.TruncatedMeta exposing (argumentTruncatedMeta)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentTruncatedMeta : Argument
|
||||
argumentTruncatedMeta =
|
||||
{ argumentTitle = toTitleCase "Argument For Truncated Meta-Analysis"
|
||||
, propositionTitle = "Meta-analytic summations that include adequately powered studies to the exclusion of insufficiently powered studies will provide better causal estimates than meta-analytic summations that include both adequately powered studies and insufficiently powered studies."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "Some people argue that omission of studies from meta-analysis is bad form because the more point estimates, the better. However, I argue that there are circumstances where including more studies can actually lower the quality of causal estimates."
|
||||
, proofLink = "https://www.umsu.de/trees/#(P~5Q),(P)%7C=(Q)"
|
||||
, argumentCertainty = 7
|
||||
, argumentImage = "truncatedmetas"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P"
|
||||
, definiens = "underpowered studies provide weaker causal estimates than adequately powered studies"
|
||||
}
|
||||
, { definiendum = "Q"
|
||||
, definiens = "meta-analytic summations that include adequately powered studies to the exclusion of insufficiently powered studies will provide better causal estimates than meta-analytic summations that include both adequately powered studies and insufficiently powered studies"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "If underpowered studies provide weaker causal estimates than adequately powered studies, then meta-analytic summations that include adequately powered studies to the exclusion of insufficiently powered studies will provide better causal estimates than meta-analytic summations that include both adequately powered studies and insufficiently powered studies."
|
||||
, notation = "P→Q"
|
||||
}
|
||||
, { premise = "Underpowered studies provide weaker causal estimates than adequately powered studies."
|
||||
, notation = "P"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, meta-analytic summations that include adequately powered studies to the exclusion of insufficiently powered studies will provide better causal estimates than meta-analytic summations that include both adequately powered studies and insufficiently powered studies."
|
||||
, conclusionNotation = "Q"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
module Config.Pages.Debate.Arguments.Records.UnhealthyCoconutOil exposing (argumentUnhealthyCoconutOil)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentUnhealthyCoconutOil : Argument
|
||||
argumentUnhealthyCoconutOil =
|
||||
{ argumentTitle = toTitleCase "Argument For Atherogenic Coconut Oil"
|
||||
, propositionTitle = "There is not a reason to believe that coconut oil is any better for heart health than other saturated fat sources that increase LDL-C."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "LDL causally associates with heart disease in a linear and proportional manner, and in all cases exposures that durably increase LDL over time produce likewise increases in heart disease risk. Coconut oil is one such exposure."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~1Qx~5~3Rx)),(Pc),(Qc)|=(~3Rc)"
|
||||
, argumentCertainty = 9
|
||||
, argumentImage = "coconutoil"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P"
|
||||
, definiens = "a given (x) increases LDL-C at a similar rate to other saturated fat sources"
|
||||
}
|
||||
, { definiendum = "Q"
|
||||
, definiens = "a given (x) has no other known qualities that counteract said increase in LDL-C"
|
||||
}
|
||||
, { definiendum = "R"
|
||||
, definiens = "there is a reason to believe that such an (x) is any better for heart health than other (x) that increase LDL-C"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a saturated fat source"
|
||||
}
|
||||
, { definiendum = "c"
|
||||
, definiens = "coconut oil"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "If a given saturated fat source increases LDL-C at a similar rate to other saturated fat sources and and a given saturated fat source has no other known qualities that counteract said increase in LDL-C, then there is not a reason to believe that such a saturated fat source is any better for heart health than other saturated fat sources that increase LDL-C."
|
||||
, notation = "∀x(Px∧Qx→¬Rx)"
|
||||
}
|
||||
, { premise = "Coconut oil increases LDL-C at a similar rate to other saturated fat sources."
|
||||
, notation = "Pc"
|
||||
}
|
||||
, { premise = "Coconut oil has no other known qualities that counteract said increase in LDL-C."
|
||||
, notation = "Qc"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, there is not a reason to believe that coconut oil is any better for heart health than other saturated fat sources that increase LDL-C."
|
||||
, conclusionNotation = "¬Rc"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
module Config.Pages.Debate.Arguments.Records.UnhealthyProcessedMeat exposing (argumentUnhealthyProcessedMeat)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentUnhealthyProcessedMeat : Argument
|
||||
argumentUnhealthyProcessedMeat =
|
||||
{ argumentTitle = toTitleCase "Argument for Unhealthy Processed Meat"
|
||||
, propositionTitle = "Processed meat is unhealthy."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "Even when you account for factors that could plausibly influence the results, processed meat has been shown to consistently increase the risk of morbidity and mortality, strongly suggesting that they directly contribute to worse health outcomes, particularly with respect to colorectal cancer and heart disease."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Qx)),(Qs)|=(Ps)"
|
||||
, argumentCertainty = 8
|
||||
, argumentImage = "processedmeat"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) has a strong tendency to associate with an increased risk of morbidity and/or mortality after adjusting and/or controlling for relevant variables."
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "there is a dearth of epistemically countervailing data on (x)."
|
||||
}
|
||||
, { definiendum = "R(x)"
|
||||
, definiens = "it is more reasonable to believe that (x) is unhealthy than it is to believe the opposite."
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a food"
|
||||
}
|
||||
, { definiendum = "p"
|
||||
, definiens = "processed meat"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "For all things, if a food has a strong tendency to associate with an increased risk of morbidity and/or mortality after adjusting and/or controling for relevant variables and there is a dearth of epistemically countervailing data on that food, then it is more reasonable to believe that the food is healthy than it is to believe the opposite."
|
||||
, notation = "∀x((Px∧Qx)→Rx)"
|
||||
}
|
||||
, { premise = "Processed meat has a strong tendency to associate with an increased risk of morbidity and mortality after adjustment and/or controlling for relevant variables."
|
||||
, notation = "Pp"
|
||||
}
|
||||
, { premise = "There is a dearth of epistemically countervailing data on processed meat."
|
||||
, notation = "Qp"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, it is more reasonable to believe that processed meat is unhealthy than it is to believe the opposite."
|
||||
, conclusionNotation = "Rp"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
module Config.Pages.Debate.Arguments.Records.UnhealthyRedMeat exposing (argumentUnhealthyRedMeat)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentUnhealthyRedMeat : Argument
|
||||
argumentUnhealthyRedMeat =
|
||||
{ argumentTitle = toTitleCase "Argument for Unhealthy Red Meat"
|
||||
, propositionTitle = "Red meat and processed meat are unhealthy."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "Even when you account for factors that could plausibly influence the results, unprocessed red meat has been shown to consistently increase the risk of morbidity and mortality, strongly suggesting that they directly contribute to worse health outcomes, particularly with respect to colorectal cancer and heart disease."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Qx)),(Qm)|=(Pm)"
|
||||
, argumentCertainty = 7
|
||||
, argumentImage = "redmeat"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) has a strong tendency to associate with an increased risk of morbidity and/or mortality after adjusting and/or controlling for relevant variables."
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "there is a dearth of epistemically countervailing data on (x)."
|
||||
}
|
||||
, { definiendum = "R(x)"
|
||||
, definiens = "it is more reasonable to believe that (x) is unhealthy than it is to believe the opposite."
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a food"
|
||||
}
|
||||
, { definiendum = "r"
|
||||
, definiens = "red meat"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "For all things, if a food has a strong tendency to associate with an increased risk of morbidity and/or mortality after adjusting and/or controling for relevant variables and there is a dearth of epistemically countervailing data on that food, then it is more reasonable to believe that the food is healthy than it is to believe the opposite."
|
||||
, notation = "∀x((Px∧Qx)→Rx)"
|
||||
}
|
||||
, { premise = "Red meat has a strong tendency to associate with an increased risk of morbidity and mortality after adjustment and/or controlling for relevant variables."
|
||||
, notation = "Pr"
|
||||
}
|
||||
, { premise = "There is a dearth of epistemically countervailing data on red meat."
|
||||
, notation = "Qr"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, it is more reasonable to believe that red meat is unhealthy than it is to believe the opposite."
|
||||
, conclusionNotation = "Rr"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
module Config.Pages.Debate.Arguments.Records.UnhealthySaturatedFat exposing (argumentUnhealthySaturatedFat)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentUnhealthySaturatedFat : Argument
|
||||
argumentUnhealthySaturatedFat =
|
||||
{ argumentTitle = toTitleCase "Argument Against Saturated Animal Fat"
|
||||
, propositionTitle = "Most sources of saturated fat are unhealthy."
|
||||
, propositionReductio = ""
|
||||
, propositionSummary = "Even when you account for factors that could plausibly influence the results, most animal-derived saturated fats have been shown to consistently increase the risk of morbidity and mortality, strongly suggesting that they directly contribute to worse health outcomes, particularly with respect to heart disease and non-alcoholic fatty liver disease."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~4Qx)),(Qf)|=(Pf)"
|
||||
, argumentCertainty = 9
|
||||
, argumentImage = "saturatedfat"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "(x) has a strong tendency to associate with an increased risk of morbidity and/or mortality after adjusting and/or controlling for relevant variables."
|
||||
}
|
||||
, { definiendum = "Q(x)"
|
||||
, definiens = "there is a dearth of epistemically countervailing data on (x)."
|
||||
}
|
||||
, { definiendum = "R(x)"
|
||||
, definiens = "it is more reasonable to believe that (x) is unhealthy than it is to believe the opposite."
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a food"
|
||||
}
|
||||
, { definiendum = "s"
|
||||
, definiens = "saturated animal fat"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "For all things, if a food has a strong tendency to associate with an increased risk of morbidity and/or mortality after adjusting and/or controling for relevant variables and there is a dearth of epistemically countervailing data on that food, then it is more reasonable to believe that the food is healthy than it is to believe the opposite."
|
||||
, notation = "∀x((Px∧Qx)→Rx)"
|
||||
}
|
||||
, { premise = "Saturated animal fat has a strong tendency to associate with an increased risk of morbidity and mortality after adjustment and/or controlling for relevant variables."
|
||||
, notation = "Ps"
|
||||
}
|
||||
, { premise = "There is a dearth of epistemically countervailing data on saturated animal fat."
|
||||
, notation = "Qs"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, it is more reasonable to believe that saturated animal fat is unhealthy than it is to believe the opposite."
|
||||
, conclusionNotation = "Rs"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
module Config.Pages.Debate.Arguments.Records.VeganSocietyReductio exposing (argumentVeganSocietyReductio)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
import Config.Helpers.Converters exposing (toTitleCase)
|
||||
import Config.Pages.Debate.Arguments.Types exposing (Argument)
|
||||
|
||||
|
||||
argumentVeganSocietyReductio : Argument
|
||||
argumentVeganSocietyReductio =
|
||||
{ argumentTitle = toTitleCase "Vegan Society Definition Reductio"
|
||||
, propositionTitle = "It is vegan to eat Groot."
|
||||
, propositionReductio = "Those who hold to the Vegan Society's definition of veganism index the object of moral value to belonging to the animal kingdom."
|
||||
, propositionSummary = "If one holds to the position that exploiting a being is wrong so long as that being is an animal, then it is straightforwardly entailed that exploiting creatures like Groot would be an action compatible with veganism."
|
||||
, proofLink = "https://www.umsu.de/trees/#(~6x(Px~4~3Qx)),(~6x~6y(~3Rx~5~3Q(e(y)))),(~3Rg)%7C=(P(e(g)))"
|
||||
, argumentCertainty = 10
|
||||
, argumentImage = "vegansociety"
|
||||
, argumentHashtags = []
|
||||
, isNewTabLink = False
|
||||
, definitionTable =
|
||||
[ { definiendum = "P(x)"
|
||||
, definiens = "it is vegan to do (x)"
|
||||
}
|
||||
, { definiendum = "Q(x,y)"
|
||||
, definiens = "(x) exploits (y)"
|
||||
}
|
||||
, { definiendum = "R(x)"
|
||||
, definiens = "(x) is an animal"
|
||||
}
|
||||
, { definiendum = "x"
|
||||
, definiens = "a being"
|
||||
}
|
||||
, { definiendum = "y"
|
||||
, definiens = "an animal"
|
||||
}
|
||||
, { definiendum = "e"
|
||||
, definiens = "eat"
|
||||
}
|
||||
, { definiendum = "g"
|
||||
, definiens = "Groot"
|
||||
}
|
||||
]
|
||||
, argumentFormalization =
|
||||
[ { premises =
|
||||
[ { premise = "For all things, it is vegan to do something if, and only if, that thing does not exploit animals."
|
||||
, notation = "∀x(Px↔¬Qx)"
|
||||
}
|
||||
, { premise = "If some beings are not animals, then eating those beings does not exploit animals."
|
||||
, notation = "∀x∀y(¬Rx→¬Q(e(y)))"
|
||||
}
|
||||
, { premise = "Groot is not an animal."
|
||||
, notation = "¬Rg"
|
||||
}
|
||||
]
|
||||
, conclusion = "Therefore, it is vegan to eat Groot."
|
||||
, conclusionNotation = "P(e(g))"
|
||||
}
|
||||
]
|
||||
}
|
||||
96
packages/website/frontend/src/Config/Pages/Debate/Arguments/Types.elm
Executable file
96
packages/website/frontend/src/Config/Pages/Debate/Arguments/Types.elm
Executable file
|
|
@ -0,0 +1,96 @@
|
|||
module Config.Pages.Debate.Arguments.Types exposing
|
||||
( Argument
|
||||
, Notation(..)
|
||||
, logic
|
||||
)
|
||||
|
||||
import Config.Data.Hashtags.Types exposing (Hashtags(..))
|
||||
|
||||
|
||||
type alias Argument =
|
||||
{ argumentTitle : String
|
||||
, propositionTitle : String
|
||||
, propositionSummary : String
|
||||
, propositionReductio : String
|
||||
, proofLink : String
|
||||
, definitionTable : List Definition
|
||||
, argumentCertainty : Int
|
||||
, argumentImage : String
|
||||
, argumentHashtags : List Hashtags
|
||||
, isNewTabLink : Bool
|
||||
, argumentFormalization : List ArgumentEntry
|
||||
}
|
||||
|
||||
|
||||
type alias ArgumentEntry =
|
||||
{ premises : List PremiseWithNotation
|
||||
, conclusion : String
|
||||
, conclusionNotation : String
|
||||
}
|
||||
|
||||
|
||||
type alias PremiseWithNotation =
|
||||
{ premise : String
|
||||
, notation : String
|
||||
}
|
||||
|
||||
|
||||
type alias Definition =
|
||||
{ definiendum : String
|
||||
, definiens : String
|
||||
}
|
||||
|
||||
|
||||
type Notation
|
||||
= Implies
|
||||
| Biconditional
|
||||
| Negation
|
||||
| Conjunction
|
||||
| Disjunction
|
||||
| Universal
|
||||
| Existential
|
||||
| Therefore
|
||||
| VariableW
|
||||
| VariableX
|
||||
| VariableY
|
||||
| VariableZ
|
||||
|
||||
|
||||
logic : Notation -> String
|
||||
logic operator =
|
||||
case operator of
|
||||
Implies ->
|
||||
"→"
|
||||
|
||||
Biconditional ->
|
||||
"↔"
|
||||
|
||||
Negation ->
|
||||
"¬"
|
||||
|
||||
Conjunction ->
|
||||
"∧"
|
||||
|
||||
Disjunction ->
|
||||
"∨"
|
||||
|
||||
Universal ->
|
||||
"∀"
|
||||
|
||||
Existential ->
|
||||
"∃"
|
||||
|
||||
Therefore ->
|
||||
"∴"
|
||||
|
||||
VariableW ->
|
||||
"𝑤"
|
||||
|
||||
VariableX ->
|
||||
"𝑥"
|
||||
|
||||
VariableY ->
|
||||
"𝑦"
|
||||
|
||||
VariableZ ->
|
||||
"𝑧"
|
||||
200
packages/website/frontend/src/Config/Pages/Debate/Cuckery/List.elm
Executable file
200
packages/website/frontend/src/Config/Pages/Debate/Cuckery/List.elm
Executable file
|
|
@ -0,0 +1,200 @@
|
|||
module Config.Pages.Debate.Cuckery.List exposing (cuckList)
|
||||
|
||||
import Config.Pages.Debate.Cuckery.Records.AdamSinger exposing (cuckAdamSinger)
|
||||
import Config.Pages.Debate.Cuckery.Records.AllenGreen exposing (cuckAllenGreen)
|
||||
import Config.Pages.Debate.Cuckery.Records.AmberOHearn exposing (cuckAmberOHearn)
|
||||
import Config.Pages.Debate.Cuckery.Records.AnnChilders exposing (cuckAnnChilders)
|
||||
import Config.Pages.Debate.Cuckery.Records.AnthonyGustin exposing (cuckAnthonyGustin)
|
||||
import Config.Pages.Debate.Cuckery.Records.AshwaniGarg exposing (cuckAshwaniGarg)
|
||||
import Config.Pages.Debate.Cuckery.Records.AustinHerbert exposing (cuckAustinHerbert)
|
||||
import Config.Pages.Debate.Cuckery.Records.AustinHiggs exposing (cuckAustinHiggs)
|
||||
import Config.Pages.Debate.Cuckery.Records.BartKay exposing (cuckBartKay)
|
||||
import Config.Pages.Debate.Cuckery.Records.BenBikman exposing (cuckBenBikman)
|
||||
import Config.Pages.Debate.Cuckery.Records.BennyMalone exposing (cuckBennyMalone)
|
||||
import Config.Pages.Debate.Cuckery.Records.BowTiedOx exposing (cuckBowTiedOx)
|
||||
import Config.Pages.Debate.Cuckery.Records.BradCampbell exposing (cuckBradCampbell)
|
||||
import Config.Pages.Debate.Cuckery.Records.BradCohn exposing (cuckBradCohn)
|
||||
import Config.Pages.Debate.Cuckery.Records.BradMarshall exposing (cuckBradMarshall)
|
||||
import Config.Pages.Debate.Cuckery.Records.BretScher exposing (cuckBretScher)
|
||||
import Config.Pages.Debate.Cuckery.Records.BretWeinstein exposing (cuckBretWeinstein)
|
||||
import Config.Pages.Debate.Cuckery.Records.BrianKateman exposing (cuckBrianKateman)
|
||||
import Config.Pages.Debate.Cuckery.Records.BrianKerley exposing (cuckBrianKerley)
|
||||
import Config.Pages.Debate.Cuckery.Records.CameronRuggles exposing (cuckCameronRuggles)
|
||||
import Config.Pages.Debate.Cuckery.Records.CarnivoreAurelius exposing (cuckCarnivoreAurelius)
|
||||
import Config.Pages.Debate.Cuckery.Records.CaryKelly exposing (cuckCaryKelly)
|
||||
import Config.Pages.Debate.Cuckery.Records.CateShanahan exposing (cuckCateShanahan)
|
||||
import Config.Pages.Debate.Cuckery.Records.ChrisBoettcher exposing (cuckChrisBoettcher)
|
||||
import Config.Pages.Debate.Cuckery.Records.ClaraAboel exposing (cuckClaraAboel)
|
||||
import Config.Pages.Debate.Cuckery.Records.CliffHarvey exposing (cuckCliffHarvey)
|
||||
import Config.Pages.Debate.Cuckery.Records.DaltonGraham exposing (cuckDaltonGraham)
|
||||
import Config.Pages.Debate.Cuckery.Records.DaveCali exposing (cuckDaveCali)
|
||||
import Config.Pages.Debate.Cuckery.Records.DaveFeldman exposing (cuckDaveFeldman)
|
||||
import Config.Pages.Debate.Cuckery.Records.DavidBeruh exposing (cuckDavidBeruh)
|
||||
import Config.Pages.Debate.Cuckery.Records.DavidDiamond exposing (cuckDavidDiamond)
|
||||
import Config.Pages.Debate.Cuckery.Records.DavidGornoski exposing (cuckDavidGornoski)
|
||||
import Config.Pages.Debate.Cuckery.Records.DavidZarkov exposing (cuckDavidZarkov)
|
||||
import Config.Pages.Debate.Cuckery.Records.DevanandPrabhu exposing (cuckDevanandPrabhu)
|
||||
import Config.Pages.Debate.Cuckery.Records.DianaRodgers exposing (cuckDianaRodgers)
|
||||
import Config.Pages.Debate.Cuckery.Records.EdSerrano exposing (cuckEdSerrano)
|
||||
import Config.Pages.Debate.Cuckery.Records.EdwardGoeke exposing (cuckEdwardGoeke)
|
||||
import Config.Pages.Debate.Cuckery.Records.ElieJarrouge exposing (cuckElieJarrouge)
|
||||
import Config.Pages.Debate.Cuckery.Records.EricSartori exposing (cuckEricSartori)
|
||||
import Config.Pages.Debate.Cuckery.Records.GarryLee exposing (cuckGarryLee)
|
||||
import Config.Pages.Debate.Cuckery.Records.GaryBrecka exposing (cuckGaryBrecka)
|
||||
import Config.Pages.Debate.Cuckery.Records.GaryFettke exposing (cuckGaryFettke)
|
||||
import Config.Pages.Debate.Cuckery.Records.GaryTaubes exposing (cuckGaryTaubes)
|
||||
import Config.Pages.Debate.Cuckery.Records.GeorgeMartin exposing (cuckGeorgeMartin)
|
||||
import Config.Pages.Debate.Cuckery.Records.GuyAustin exposing (cuckGuyAustin)
|
||||
import Config.Pages.Debate.Cuckery.Records.IvorCummins exposing (cuckIvorCummins)
|
||||
import Config.Pages.Debate.Cuckery.Records.JaimieDrew exposing (cuckJaimieDrew)
|
||||
import Config.Pages.Debate.Cuckery.Records.JakeMey exposing (cuckJakeMey)
|
||||
import Config.Pages.Debate.Cuckery.Records.JamesDiNicolantonio exposing (cuckJamesDiNicolantonio)
|
||||
import Config.Pages.Debate.Cuckery.Records.JosephEverett exposing (cuckJosephEverett)
|
||||
import Config.Pages.Debate.Cuckery.Records.JustinMares exposing (cuckJustinMares)
|
||||
import Config.Pages.Debate.Cuckery.Records.KaitMalthaner exposing (cuckKaitMalthaner)
|
||||
import Config.Pages.Debate.Cuckery.Records.KemMinnick exposing (cuckKemMinnick)
|
||||
import Config.Pages.Debate.Cuckery.Records.KenBerry exposing (cuckKenBerry)
|
||||
import Config.Pages.Debate.Cuckery.Records.KevinStock exposing (cuckKevinStock)
|
||||
import Config.Pages.Debate.Cuckery.Records.KyleMamounis exposing (cuckKyleMamounis)
|
||||
import Config.Pages.Debate.Cuckery.Records.LewisWhitfield exposing (cuckLewisWhitfield)
|
||||
import Config.Pages.Debate.Cuckery.Records.MacroFour exposing (cuckMacroFour)
|
||||
import Config.Pages.Debate.Cuckery.Records.MarionHolman exposing (cuckMarionHolman)
|
||||
import Config.Pages.Debate.Cuckery.Records.MarkBski exposing (cuckMarkBski)
|
||||
import Config.Pages.Debate.Cuckery.Records.MarkSisson exposing (cuckMarkSisson)
|
||||
import Config.Pages.Debate.Cuckery.Records.MartyKendall exposing (cuckMartyKendall)
|
||||
import Config.Pages.Debate.Cuckery.Records.MaxLugavere exposing (cuckMaxLugavere)
|
||||
import Config.Pages.Debate.Cuckery.Records.MichaelKummer exposing (cuckMichaelKummer)
|
||||
import Config.Pages.Debate.Cuckery.Records.MichaelManderville exposing (cuckMichaelManderville)
|
||||
import Config.Pages.Debate.Cuckery.Records.MiguelEspejel exposing (cuckMiguelEspejel)
|
||||
import Config.Pages.Debate.Cuckery.Records.MikeMutzel exposing (cuckMikeMutzel)
|
||||
import Config.Pages.Debate.Cuckery.Records.MikeSweeney exposing (cuckMikeSweeney)
|
||||
import Config.Pages.Debate.Cuckery.Records.NickEggleton exposing (cuckNickEggleton)
|
||||
import Config.Pages.Debate.Cuckery.Records.NinaTeicholz exposing (cuckNinaTeicholz)
|
||||
import Config.Pages.Debate.Cuckery.Records.NoCarbsNation exposing (cuckNoCarbsNation)
|
||||
import Config.Pages.Debate.Cuckery.Records.NorstrongChris exposing (cuckNorstrongChris)
|
||||
import Config.Pages.Debate.Cuckery.Records.PaulMason exposing (cuckPaulMason)
|
||||
import Config.Pages.Debate.Cuckery.Records.PaulSaladino exposing (cuckPaulSaladino)
|
||||
import Config.Pages.Debate.Cuckery.Records.PeterFaber exposing (cuckPeterFaber)
|
||||
import Config.Pages.Debate.Cuckery.Records.PhilipOvadia exposing (cuckPhilipOvadia)
|
||||
import Config.Pages.Debate.Cuckery.Records.PhilippeStephenson exposing (cuckPhilippeStephenson)
|
||||
import Config.Pages.Debate.Cuckery.Records.RalphNapolitano exposing (cuckRalphNapolitano)
|
||||
import Config.Pages.Debate.Cuckery.Records.RaphaelSirtoli exposing (cuckRaphaelSirtoli)
|
||||
import Config.Pages.Debate.Cuckery.Records.RealTruther exposing (cuckRealTruther)
|
||||
import Config.Pages.Debate.Cuckery.Records.RobMeijer exposing (cuckRobMeijer)
|
||||
import Config.Pages.Debate.Cuckery.Records.RobbWolf exposing (cuckRobbWolf)
|
||||
import Config.Pages.Debate.Cuckery.Records.SamTsimikas exposing (cuckSamTsimikas)
|
||||
import Config.Pages.Debate.Cuckery.Records.ScottPsysher exposing (cuckScottPsysher)
|
||||
import Config.Pages.Debate.Cuckery.Records.SebastianRamirez exposing (cuckSebastianRamirez)
|
||||
import Config.Pages.Debate.Cuckery.Records.ShawnBaker exposing (cuckShawnBaker)
|
||||
import Config.Pages.Debate.Cuckery.Records.SimonGoddek exposing (cuckSimonGoddek)
|
||||
import Config.Pages.Debate.Cuckery.Records.StevenArena exposing (cuckStevenArena)
|
||||
import Config.Pages.Debate.Cuckery.Records.StevenBelknap exposing (cuckStevenBelknap)
|
||||
import Config.Pages.Debate.Cuckery.Records.TomDayspring exposing (cuckTomDayspring)
|
||||
import Config.Pages.Debate.Cuckery.Records.TravisStatham exposing (cuckTravisStatham)
|
||||
import Config.Pages.Debate.Cuckery.Records.TristanHaggard exposing (cuckTristanHaggard)
|
||||
import Config.Pages.Debate.Cuckery.Records.TroKalayjian exposing (cuckTroKalayjian)
|
||||
import Config.Pages.Debate.Cuckery.Records.TuckerGoodrich exposing (cuckTuckerGoodrich)
|
||||
import Config.Pages.Debate.Cuckery.Records.ZoeHarcombe exposing (cuckZoeHarcombe)
|
||||
import Config.Pages.Debate.Cuckery.Records.ZsofiaClemens exposing (cuckZsofiaClemens)
|
||||
import Config.Pages.Debate.Cuckery.Types exposing (..)
|
||||
|
||||
|
||||
cuckList : List Cuck
|
||||
cuckList =
|
||||
[ cuckAdamSinger
|
||||
, cuckAllenGreen
|
||||
, cuckAmberOHearn
|
||||
, cuckAnnChilders
|
||||
, cuckAnthonyGustin
|
||||
, cuckAshwaniGarg
|
||||
, cuckAustinHerbert
|
||||
, cuckAustinHiggs
|
||||
, cuckBartKay
|
||||
, cuckBenBikman
|
||||
, cuckBennyMalone
|
||||
, cuckBowTiedOx
|
||||
, cuckBradCampbell
|
||||
, cuckBradCohn
|
||||
, cuckBradMarshall
|
||||
, cuckBretScher
|
||||
, cuckBretWeinstein
|
||||
, cuckBrianKateman
|
||||
, cuckBrianKerley
|
||||
, cuckCameronRuggles
|
||||
, cuckCarnivoreAurelius
|
||||
, cuckCaryKelly
|
||||
, cuckCateShanahan
|
||||
, cuckChrisBoettcher
|
||||
, cuckClaraAboel
|
||||
, cuckCliffHarvey
|
||||
, cuckDaltonGraham
|
||||
, cuckDaveCali
|
||||
, cuckDaveFeldman
|
||||
, cuckDavidBeruh
|
||||
, cuckDavidDiamond
|
||||
, cuckDavidGornoski
|
||||
, cuckDavidZarkov
|
||||
, cuckDevanandPrabhu
|
||||
, cuckDianaRodgers
|
||||
, cuckEdSerrano
|
||||
, cuckEdwardGoeke
|
||||
, cuckElieJarrouge
|
||||
, cuckEricSartori
|
||||
, cuckGarryLee
|
||||
, cuckGaryBrecka
|
||||
, cuckGaryFettke
|
||||
, cuckGaryTaubes
|
||||
, cuckGeorgeMartin
|
||||
, cuckGuyAustin
|
||||
, cuckIvorCummins
|
||||
, cuckJakeMey
|
||||
, cuckJamesDiNicolantonio
|
||||
, cuckJaimieDrew
|
||||
, cuckJosephEverett
|
||||
, cuckJustinMares
|
||||
, cuckKaitMalthaner
|
||||
, cuckKemMinnick
|
||||
, cuckKenBerry
|
||||
, cuckKevinStock
|
||||
, cuckKyleMamounis
|
||||
, cuckLewisWhitfield
|
||||
, cuckMacroFour
|
||||
, cuckMarionHolman
|
||||
, cuckMarkBski
|
||||
, cuckMarkSisson
|
||||
, cuckMartyKendall
|
||||
, cuckMaxLugavere
|
||||
, cuckMichaelKummer
|
||||
, cuckMichaelManderville
|
||||
, cuckMiguelEspejel
|
||||
, cuckMikeMutzel
|
||||
, cuckMikeSweeney
|
||||
, cuckNickEggleton
|
||||
, cuckNinaTeicholz
|
||||
, cuckNoCarbsNation
|
||||
, cuckNorstrongChris
|
||||
, cuckPaulMason
|
||||
, cuckPaulSaladino
|
||||
, cuckPeterFaber
|
||||
, cuckPhilipOvadia
|
||||
, cuckPhilippeStephenson
|
||||
, cuckRalphNapolitano
|
||||
, cuckRaphaelSirtoli
|
||||
, cuckRealTruther
|
||||
, cuckRobbWolf
|
||||
, cuckRobMeijer
|
||||
, cuckSamTsimikas
|
||||
, cuckScottPsysher
|
||||
, cuckSebastianRamirez
|
||||
, cuckShawnBaker
|
||||
, cuckSimonGoddek
|
||||
, cuckStevenArena
|
||||
, cuckStevenBelknap
|
||||
, cuckTomDayspring
|
||||
, cuckTravisStatham
|
||||
, cuckTristanHaggard
|
||||
, cuckTroKalayjian
|
||||
, cuckTuckerGoodrich
|
||||
, cuckZoeHarcombe
|
||||
, cuckZsofiaClemens
|
||||
]
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue