<!-- canonical: efficientnewlanguage.org/ai/examples/934-the-hundred-year-flood-in-a-thirty-year-mortgage | ai_layer_version: 0.1.0 | updated: 2026-09-20 -->

# Example 934 — The hundred year flood in a thirty year mortgage

`the_hundred_year_flood_in_a_thirty_year_mortgage.eml` - A buyer takes a thirty-year mortgage on a house in the hundred-year floodplain, the flood map is correct, and the buyer reasons that a hundred-year flood is not a thirty-year problem. What one percent a year adds up to over thirty years is computed below.

## EML

```eml
# Self-authored for the EML case corpus (no external origin). A buyer takes a
# thirty-year mortgage on a house in the hundred-year floodplain, the flood
# map is correct, and the buyer reasons that a hundred-year flood is not a
# thirty-year problem. What one percent a year adds up to over thirty years is
# computed below.
#
# The reasoning is careful. The map's annual probability is the real,
# well-estimated one percent; thirty is genuinely less than a hundred; the
# mortgage term is exactly thirty years; and the intent is exactly 'will this
# house flood while I own it'.
#
# A hundred-year flood is a one-percent chance every year, and thirty draws at
# one percent leave a seventy-four percent chance of no flood - so the chance of
# at least one flood during the mortgage is twenty-six percent, not zero and not
# thirty percent of the way to certain.

100 => annual_flood_chance_per_myriad
30 => mortgage_years
7397 => chance_of_no_flood_in_thirty_years_per_myriad
9044 => chance_of_no_flood_in_ten_years_per_myriad

10000 - chance_of_no_flood_in_thirty_years_per_myriad => chance_of_at_least_one_flood_in_thirty_years_per_myriad
10000 - chance_of_no_flood_in_ten_years_per_myriad => chance_of_at_least_one_flood_in_ten_years_per_myriad
annual_flood_chance_per_myriad * mortgage_years => expected_floods_in_thirty_years_per_myriad
int(chance_of_at_least_one_flood_in_thirty_years_per_myriad / annual_flood_chance_per_myriad) => times_the_single_year_chance

"annual chance of a flood        : " + str(annual_flood_chance_per_myriad) + " per ten thousand (a hundred-year flood)" ^0
"years of the mortgage           : " + str(mortgage_years) ^0
"" ^0
"chance of no flood in ten years : " + str(chance_of_no_flood_in_ten_years_per_myriad) + " per ten thousand" ^0
"chance of at least one, ten years : " + str(chance_of_at_least_one_flood_in_ten_years_per_myriad) + " per ten thousand" ^0
"chance of no flood in thirty years : " + str(chance_of_no_flood_in_thirty_years_per_myriad) + " per ten thousand" ^0
"chance of at least one, thirty years : " + str(chance_of_at_least_one_flood_in_thirty_years_per_myriad) + " per ten thousand" ^0
"expected floods over the term   : " + str(expected_floods_in_thirty_years_per_myriad) + " per ten thousand of a flood" ^0
"thirty years is                 : " + str(times_the_single_year_chance) + " times the single-year chance" ^0
"" ^0

# ---- what the reasoning verified ----

"the not-my-problem reasoning" ^0
"  annual probability : the map's real one percent" ^0
"  arithmetic : thirty is less than a hundred" ^0
"  term : exactly thirty years" ^0
"  intent : will this house flood while I own it" ^0
"  facts wrong : 0" ^0
"  verdict : A HUNDRED-YEAR EVENT WILL NOT FALL IN THIRTY YEARS" ^0
"" ^0
"  taking the map's real annual probability is the part" ^0
"  done right here, and it is why one percent a year is a" ^0
"  true statement about every single year" ^0
"" ^0

# ---- what one percent a year adds up to ----

"thirty draws at one percent" ^0
"  each year : a fresh one-in-a-hundred" ^0
"  no flood in a year : ninety-nine in a hundred" ^0
"  no flood in thirty years : ninety-nine in a hundred, thirty" ^0
"    times over, " + str(chance_of_no_flood_in_thirty_years_per_myriad) + " per ten thousand" ^0
"  at least one flood : the rest, " + str(chance_of_at_least_one_flood_in_thirty_years_per_myriad) + " per ten thousand" ^0
"  what a hundred-year flood is : a rate, not an appointment" ^0
"" ^0

# ---- what the buyer got ----

"the exposure" ^0
"  believed : no meaningful chance" ^0
"  actual : about one in four over the mortgage" ^0
"  is the map wrong : no; one percent a year is right" ^0
"  is a hundred-year flood a hundred years away : no; it is" ^0
"    one percent away, every year, and thirty of those add up" ^0
"" ^0

# ---- null control ----

# The same question answered with the compounded probability over the term
# instead of by comparing the return period with the term.
0 => nc_chance_read_by_comparing_a_hundred_to_thirty_per_myriad
2603 => nc_chance_read_by_compounding_per_myriad
2603 => nc_exposure_the_compounding_reveals_per_myriad

"null control - compound the annual chance over the term" ^0
"  chance, comparing 100 to 30 : " + str(nc_chance_read_by_comparing_a_hundred_to_thirty_per_myriad) + " per ten thousand" ^0
"  chance, compounded over 30 years : " + str(nc_chance_read_by_compounding_per_myriad) + " per ten thousand" ^0
"  exposure the compounding reveals : " + str(nc_exposure_the_compounding_reveals_per_myriad) + " per ten thousand" ^0
"  no map and no term changed; the return period stopped" ^0
"  being read as a countdown" ^0
"" ^0

# ---- the rule ----

"what a correct hundred-year flood map guarantees" ^0
"  the chance in any one year is one percent : exactly, the" ^0
"    map's real estimate" ^0
"  a thirty-year owner will not see one : not addressed;" ^0
"    thirty independent one-percent years leave a " + str(chance_of_at_least_one_flood_in_thirty_years_per_myriad) + "-per-" ^0
"    ten-thousand chance of at least one flood" ^0
"" ^0

"a return period is a rate wearing the costume of a date; nothing about the" ^0
"river remembers the calendar, and a small chance repeated every year for a" ^0
"working lifetime is not a small chance" ^0
"" ^0

"The map's one percent a year is right - every year. But thirty such years" ^0
"compound: the chance of no flood is " + str(chance_of_no_flood_in_thirty_years_per_myriad) + " per ten thousand, so the chance of at" ^0
"least one during the mortgage is " + str(chance_of_at_least_one_flood_in_thirty_years_per_myriad) + ", " + str(times_the_single_year_chance) + " times the single-year figure the" ^0
"buyer compared with the term, until the rate is compounded over the years held." ^0
```

## Python (deterministic transpilation)

```python
annual_flood_chance_per_myriad = 100
mortgage_years = 30
chance_of_no_flood_in_thirty_years_per_myriad = 7397
chance_of_no_flood_in_ten_years_per_myriad = 9044
chance_of_at_least_one_flood_in_thirty_years_per_myriad = 10000 - chance_of_no_flood_in_thirty_years_per_myriad
chance_of_at_least_one_flood_in_ten_years_per_myriad = 10000 - chance_of_no_flood_in_ten_years_per_myriad
expected_floods_in_thirty_years_per_myriad = annual_flood_chance_per_myriad * mortgage_years
times_the_single_year_chance = int(chance_of_at_least_one_flood_in_thirty_years_per_myriad / annual_flood_chance_per_myriad)
print("annual chance of a flood        : " + str(annual_flood_chance_per_myriad) + " per ten thousand (a hundred-year flood)")
print("years of the mortgage           : " + str(mortgage_years))
print("")
print("chance of no flood in ten years : " + str(chance_of_no_flood_in_ten_years_per_myriad) + " per ten thousand")
print("chance of at least one, ten years : " + str(chance_of_at_least_one_flood_in_ten_years_per_myriad) + " per ten thousand")
print("chance of no flood in thirty years : " + str(chance_of_no_flood_in_thirty_years_per_myriad) + " per ten thousand")
print("chance of at least one, thirty years : " + str(chance_of_at_least_one_flood_in_thirty_years_per_myriad) + " per ten thousand")
print("expected floods over the term   : " + str(expected_floods_in_thirty_years_per_myriad) + " per ten thousand of a flood")
print("thirty years is                 : " + str(times_the_single_year_chance) + " times the single-year chance")
print("")
print("the not-my-problem reasoning")
print("  annual probability : the map's real one percent")
print("  arithmetic : thirty is less than a hundred")
print("  term : exactly thirty years")
print("  intent : will this house flood while I own it")
print("  facts wrong : 0")
print("  verdict : A HUNDRED-YEAR EVENT WILL NOT FALL IN THIRTY YEARS")
print("")
print("  taking the map's real annual probability is the part")
print("  done right here, and it is why one percent a year is a")
print("  true statement about every single year")
print("")
print("thirty draws at one percent")
print("  each year : a fresh one-in-a-hundred")
print("  no flood in a year : ninety-nine in a hundred")
print("  no flood in thirty years : ninety-nine in a hundred, thirty")
print("    times over, " + str(chance_of_no_flood_in_thirty_years_per_myriad) + " per ten thousand")
print("  at least one flood : the rest, " + str(chance_of_at_least_one_flood_in_thirty_years_per_myriad) + " per ten thousand")
print("  what a hundred-year flood is : a rate, not an appointment")
print("")
print("the exposure")
print("  believed : no meaningful chance")
print("  actual : about one in four over the mortgage")
print("  is the map wrong : no; one percent a year is right")
print("  is a hundred-year flood a hundred years away : no; it is")
print("    one percent away, every year, and thirty of those add up")
print("")
nc_chance_read_by_comparing_a_hundred_to_thirty_per_myriad = 0
nc_chance_read_by_compounding_per_myriad = 2603
nc_exposure_the_compounding_reveals_per_myriad = 2603
print("null control - compound the annual chance over the term")
print("  chance, comparing 100 to 30 : " + str(nc_chance_read_by_comparing_a_hundred_to_thirty_per_myriad) + " per ten thousand")
print("  chance, compounded over 30 years : " + str(nc_chance_read_by_compounding_per_myriad) + " per ten thousand")
print("  exposure the compounding reveals : " + str(nc_exposure_the_compounding_reveals_per_myriad) + " per ten thousand")
print("  no map and no term changed; the return period stopped")
print("  being read as a countdown")
print("")
print("what a correct hundred-year flood map guarantees")
print("  the chance in any one year is one percent : exactly, the")
print("    map's real estimate")
print("  a thirty-year owner will not see one : not addressed;")
print("    thirty independent one-percent years leave a " + str(chance_of_at_least_one_flood_in_thirty_years_per_myriad) + "-per-")
print("    ten-thousand chance of at least one flood")
print("")
print("a return period is a rate wearing the costume of a date; nothing about the")
print("river remembers the calendar, and a small chance repeated every year for a")
print("working lifetime is not a small chance")
print("")
print("The map's one percent a year is right - every year. But thirty such years")
print("compound: the chance of no flood is " + str(chance_of_no_flood_in_thirty_years_per_myriad) + " per ten thousand, so the chance of at")
print("least one during the mortgage is " + str(chance_of_at_least_one_flood_in_thirty_years_per_myriad) + ", " + str(times_the_single_year_chance) + " times the single-year figure the")
print("buyer compared with the term, until the rate is compounded over the years held.")
```

## stdout (executed)

```text
annual chance of a flood        : 100 per ten thousand (a hundred-year flood)
years of the mortgage           : 30

chance of no flood in ten years : 9044 per ten thousand
chance of at least one, ten years : 956 per ten thousand
chance of no flood in thirty years : 7397 per ten thousand
chance of at least one, thirty years : 2603 per ten thousand
expected floods over the term   : 3000 per ten thousand of a flood
thirty years is                 : 26 times the single-year chance

the not-my-problem reasoning
  annual probability : the map's real one percent
  arithmetic : thirty is less than a hundred
  term : exactly thirty years
  intent : will this house flood while I own it
  facts wrong : 0
  verdict : A HUNDRED-YEAR EVENT WILL NOT FALL IN THIRTY YEARS

  taking the map's real annual probability is the part
  done right here, and it is why one percent a year is a
  true statement about every single year

thirty draws at one percent
  each year : a fresh one-in-a-hundred
  no flood in a year : ninety-nine in a hundred
  no flood in thirty years : ninety-nine in a hundred, thirty
    times over, 7397 per ten thousand
  at least one flood : the rest, 2603 per ten thousand
  what a hundred-year flood is : a rate, not an appointment

the exposure
  believed : no meaningful chance
  actual : about one in four over the mortgage
  is the map wrong : no; one percent a year is right
  is a hundred-year flood a hundred years away : no; it is
    one percent away, every year, and thirty of those add up

null control - compound the annual chance over the term
  chance, comparing 100 to 30 : 0 per ten thousand
  chance, compounded over 30 years : 2603 per ten thousand
  exposure the compounding reveals : 2603 per ten thousand
  no map and no term changed; the return period stopped
  being read as a countdown

what a correct hundred-year flood map guarantees
  the chance in any one year is one percent : exactly, the
    map's real estimate
  a thirty-year owner will not see one : not addressed;
    thirty independent one-percent years leave a 2603-per-
    ten-thousand chance of at least one flood

a return period is a rate wearing the costume of a date; nothing about the
river remembers the calendar, and a small chance repeated every year for a
working lifetime is not a small chance

The map's one percent a year is right - every year. But thirty such years
compound: the chance of no flood is 7397 per ten thousand, so the chance of at
least one during the mortgage is 2603, 26 times the single-year figure the
buyer compared with the term, until the rate is compounded over the years held.
```

## Round-trip

`ok: true` — round-trip fixpoint reached (python1 == python2)

## Trace event types

eml:run:start · eml:assign · eml:output · eml:run:done
