Case 913

Five years of payments bought seven percent of the house

five_years_of_payments_bought_seven_percent_of_the_house.eml - A borrower takes a thirty-year mortgage, makes every one of the first sixty monthly payments in full and on time, and reasons that five years of a thirty-year loan is a sixth of the house paid for. How much of each payment reaches the principal is computed below.

ok: true — round-trip fixpoint reached (python1 == python2)updated 2026-09-19

EML

eml
# Self-authored for the EML case corpus (no external origin). A borrower takes a
# thirty-year mortgage, makes every one of the first sixty monthly payments in
# full and on time, and reasons that five years of a thirty-year loan is a sixth
# of the house paid for. How much of each payment reaches the principal is
# computed below.
#
# The reasoning is careful. Every payment is real and on time; sixty of three
# hundred and sixty is exactly one sixth; the total paid is summed exactly; and
# the intent is exactly 'how much of the house do we own'.
#
# Each payment first covers the interest on the whole remaining balance, and
# early on that balance is nearly the whole loan, so the first payment is 1500
# of interest and 299 of principal - five years of payments buy seven percent of
# the house, not seventeen.

300000 => loan
6 => annual_rate_percent
1799 => monthly_payment
60 => payments_made
360 => payments_in_total
279163 => balance_after_sixty_payments

int(loan * annual_rate_percent / 1200) => first_month_interest
monthly_payment - first_month_interest => first_month_principal
monthly_payment * payments_made => paid_in_five_years
loan - balance_after_sixty_payments => principal_repaid
paid_in_five_years - principal_repaid => interest_paid
int(payments_made * 10000 / payments_in_total) => share_of_payments_made_per_myriad
int(principal_repaid * 10000 / loan) => share_of_house_bought_per_myriad
int(interest_paid * 10000 / paid_in_five_years) => share_of_money_that_was_interest_per_myriad

"loan                            : " + str(loan) + " at " + str(annual_rate_percent) + " percent, " + str(payments_in_total) + " payments" ^0
"monthly payment                 : " + str(monthly_payment) ^0
"first payment                   : " + str(first_month_interest) + " interest, " + str(first_month_principal) + " principal" ^0
"" ^0
"payments made                   : " + str(payments_made) + ", " + str(share_of_payments_made_per_myriad) + " per ten thousand of the schedule" ^0
"paid in five years              : " + str(paid_in_five_years) ^0
"balance still owed              : " + str(balance_after_sixty_payments) ^0
"principal repaid                : " + str(principal_repaid) + ", " + str(share_of_house_bought_per_myriad) + " per ten thousand of the house" ^0
"interest paid                   : " + str(interest_paid) + ", " + str(share_of_money_that_was_interest_per_myriad) + " per ten thousand of the money" ^0
"" ^0

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

"the one-sixth reasoning" ^0
"  payments : every one real and on time" ^0
"  arithmetic : " + str(payments_made) + " of " + str(payments_in_total) + " is exactly one sixth" ^0
"  total paid : summed exactly, " + str(paid_in_five_years) ^0
"  intent : how much of the house do we own" ^0
"  payments missed : 0" ^0
"  verdict : ONE SIXTH OF THE LOAN IS PAID" ^0
"" ^0
"  counting real payments and dividing exactly is the part" ^0
"  done right here, and it is why one sixth is precisely the" ^0
"  share of the schedule completed" ^0
"" ^0

# ---- where each payment goes ----

"amortisation" ^0
"  each payment first pays : interest on the whole balance" ^0
"  the balance early on : nearly the whole " + str(loan) ^0
"  so the first payment : " + str(first_month_interest) + " to interest, " + str(first_month_principal) + " to the house" ^0
"  as the balance falls : the split slowly shifts" ^0
"  after sixty payments : " + str(principal_repaid) + " of the loan gone, " + str(interest_paid) + " to interest" ^0
"  the last payments : are almost all principal" ^0
"" ^0

# ---- what the borrower got ----

"five years in" ^0
"  share of the schedule completed : " + str(share_of_payments_made_per_myriad) + " per ten thousand" ^0
"  share of the house bought : " + str(share_of_house_bought_per_myriad) + " per ten thousand" ^0
"  is any payment miscounted : no" ^0
"  is a sixth of the payments a sixth of the house : no; the" ^0
"    payments are front-loaded with interest" ^0
"" ^0

# ---- null control ----

# The same question answered from the amortisation schedule - the balance after
# sixty payments - instead of from the count of payments.
1666 => nc_share_of_house_by_payment_count_per_myriad
694 => nc_share_of_house_by_balance_per_myriad
972 => nc_per_myriad_the_schedule_corrects

"null control - read the balance, not the count" ^0
"  share of the house, by payment count : " + str(nc_share_of_house_by_payment_count_per_myriad) + " per ten thousand" ^0
"  share of the house, by balance : " + str(nc_share_of_house_by_balance_per_myriad) + " per ten thousand" ^0
"  per ten thousand the schedule corrects : " + str(nc_per_myriad_the_schedule_corrects) ^0
"  no payment and no rate changed; the share stopped being" ^0
"  read off the calendar" ^0
"" ^0

# ---- the rule ----

"what sixty exact payments guarantee" ^0
"  one sixth of the schedule is complete : exactly, real" ^0
"    payments, exact count" ^0
"  one sixth of the house is paid for : not addressed; each" ^0
"    payment first covers interest on the whole balance, so" ^0
"    " + str(paid_in_five_years) + " paid retires " + str(principal_repaid) + " of principal, " + str(share_of_house_bought_per_myriad) + " per ten" ^0
"    thousand of the house" ^0
"" ^0

"a schedule counts payments and a balance counts money owed, and the two move" ^0
"at different speeds; the early payments are rent on the whole loan with a" ^0
"little ownership attached, and the calendar cannot see the split" ^0
"" ^0

"Sixty of " + str(payments_in_total) + " payments made, every one on time - one sixth of the schedule," ^0
"exactly. But each payment first pays interest on the whole balance, so " + str(paid_in_five_years) ^0
"paid has retired " + str(principal_repaid) + " of the loan, " + str(share_of_house_bought_per_myriad) + " per ten thousand of the house, with" ^0
"" + str(share_of_money_that_was_interest_per_myriad) + " per ten thousand of the money gone to interest, until the balance is read." ^0

Python (deterministic transpilation)

python
loan = 300000
annual_rate_percent = 6
monthly_payment = 1799
payments_made = 60
payments_in_total = 360
balance_after_sixty_payments = 279163
first_month_interest = int(loan * annual_rate_percent / 1200)
first_month_principal = monthly_payment - first_month_interest
paid_in_five_years = monthly_payment * payments_made
principal_repaid = loan - balance_after_sixty_payments
interest_paid = paid_in_five_years - principal_repaid
share_of_payments_made_per_myriad = int(payments_made * 10000 / payments_in_total)
share_of_house_bought_per_myriad = int(principal_repaid * 10000 / loan)
share_of_money_that_was_interest_per_myriad = int(interest_paid * 10000 / paid_in_five_years)
print("loan                            : " + str(loan) + " at " + str(annual_rate_percent) + " percent, " + str(payments_in_total) + " payments")
print("monthly payment                 : " + str(monthly_payment))
print("first payment                   : " + str(first_month_interest) + " interest, " + str(first_month_principal) + " principal")
print("")
print("payments made                   : " + str(payments_made) + ", " + str(share_of_payments_made_per_myriad) + " per ten thousand of the schedule")
print("paid in five years              : " + str(paid_in_five_years))
print("balance still owed              : " + str(balance_after_sixty_payments))
print("principal repaid                : " + str(principal_repaid) + ", " + str(share_of_house_bought_per_myriad) + " per ten thousand of the house")
print("interest paid                   : " + str(interest_paid) + ", " + str(share_of_money_that_was_interest_per_myriad) + " per ten thousand of the money")
print("")
print("the one-sixth reasoning")
print("  payments : every one real and on time")
print("  arithmetic : " + str(payments_made) + " of " + str(payments_in_total) + " is exactly one sixth")
print("  total paid : summed exactly, " + str(paid_in_five_years))
print("  intent : how much of the house do we own")
print("  payments missed : 0")
print("  verdict : ONE SIXTH OF THE LOAN IS PAID")
print("")
print("  counting real payments and dividing exactly is the part")
print("  done right here, and it is why one sixth is precisely the")
print("  share of the schedule completed")
print("")
print("amortisation")
print("  each payment first pays : interest on the whole balance")
print("  the balance early on : nearly the whole " + str(loan))
print("  so the first payment : " + str(first_month_interest) + " to interest, " + str(first_month_principal) + " to the house")
print("  as the balance falls : the split slowly shifts")
print("  after sixty payments : " + str(principal_repaid) + " of the loan gone, " + str(interest_paid) + " to interest")
print("  the last payments : are almost all principal")
print("")
print("five years in")
print("  share of the schedule completed : " + str(share_of_payments_made_per_myriad) + " per ten thousand")
print("  share of the house bought : " + str(share_of_house_bought_per_myriad) + " per ten thousand")
print("  is any payment miscounted : no")
print("  is a sixth of the payments a sixth of the house : no; the")
print("    payments are front-loaded with interest")
print("")
nc_share_of_house_by_payment_count_per_myriad = 1666
nc_share_of_house_by_balance_per_myriad = 694
nc_per_myriad_the_schedule_corrects = 972
print("null control - read the balance, not the count")
print("  share of the house, by payment count : " + str(nc_share_of_house_by_payment_count_per_myriad) + " per ten thousand")
print("  share of the house, by balance : " + str(nc_share_of_house_by_balance_per_myriad) + " per ten thousand")
print("  per ten thousand the schedule corrects : " + str(nc_per_myriad_the_schedule_corrects))
print("  no payment and no rate changed; the share stopped being")
print("  read off the calendar")
print("")
print("what sixty exact payments guarantee")
print("  one sixth of the schedule is complete : exactly, real")
print("    payments, exact count")
print("  one sixth of the house is paid for : not addressed; each")
print("    payment first covers interest on the whole balance, so")
print("    " + str(paid_in_five_years) + " paid retires " + str(principal_repaid) + " of principal, " + str(share_of_house_bought_per_myriad) + " per ten")
print("    thousand of the house")
print("")
print("a schedule counts payments and a balance counts money owed, and the two move")
print("at different speeds; the early payments are rent on the whole loan with a")
print("little ownership attached, and the calendar cannot see the split")
print("")
print("Sixty of " + str(payments_in_total) + " payments made, every one on time - one sixth of the schedule,")
print("exactly. But each payment first pays interest on the whole balance, so " + str(paid_in_five_years))
print("paid has retired " + str(principal_repaid) + " of the loan, " + str(share_of_house_bought_per_myriad) + " per ten thousand of the house, with")
print("" + str(share_of_money_that_was_interest_per_myriad) + " per ten thousand of the money gone to interest, until the balance is read.")

stdout (executed)

text
loan                            : 300000 at 6 percent, 360 payments
monthly payment                 : 1799
first payment                   : 1500 interest, 299 principal

payments made                   : 60, 1666 per ten thousand of the schedule
paid in five years              : 107940
balance still owed              : 279163
principal repaid                : 20837, 694 per ten thousand of the house
interest paid                   : 87103, 8069 per ten thousand of the money

the one-sixth reasoning
  payments : every one real and on time
  arithmetic : 60 of 360 is exactly one sixth
  total paid : summed exactly, 107940
  intent : how much of the house do we own
  payments missed : 0
  verdict : ONE SIXTH OF THE LOAN IS PAID

  counting real payments and dividing exactly is the part
  done right here, and it is why one sixth is precisely the
  share of the schedule completed

amortisation
  each payment first pays : interest on the whole balance
  the balance early on : nearly the whole 300000
  so the first payment : 1500 to interest, 299 to the house
  as the balance falls : the split slowly shifts
  after sixty payments : 20837 of the loan gone, 87103 to interest
  the last payments : are almost all principal

five years in
  share of the schedule completed : 1666 per ten thousand
  share of the house bought : 694 per ten thousand
  is any payment miscounted : no
  is a sixth of the payments a sixth of the house : no; the
    payments are front-loaded with interest

null control - read the balance, not the count
  share of the house, by payment count : 1666 per ten thousand
  share of the house, by balance : 694 per ten thousand
  per ten thousand the schedule corrects : 972
  no payment and no rate changed; the share stopped being
  read off the calendar

what sixty exact payments guarantee
  one sixth of the schedule is complete : exactly, real
    payments, exact count
  one sixth of the house is paid for : not addressed; each
    payment first covers interest on the whole balance, so
    107940 paid retires 20837 of principal, 694 per ten
    thousand of the house

a schedule counts payments and a balance counts money owed, and the two move
at different speeds; the early payments are rent on the whole loan with a
little ownership attached, and the calendar cannot see the split

Sixty of 360 payments made, every one on time - one sixth of the schedule,
exactly. But each payment first pays interest on the whole balance, so 107940
paid has retired 20837 of the loan, 694 per ten thousand of the house, with
8069 per ten thousand of the money gone to interest, until the balance is read.

Trace event types

eml:run:starteml:assigneml:outputeml:run:done