<!-- canonical: efficientnewlanguage.org/ai/examples/972-an-orbit-of-exactly-one-day-slid-a-degree-west-each-day | ai_layer_version: 0.1.0 | updated: 2026-09-23 -->

# Example 972 — An orbit of exactly one day slid a degree west each day

`an_orbit_of_exactly_one_day_slid_a_degree_west_each_day.eml` - An operator places a relay satellite in a circular orbit over the equator and tunes its period to exactly one day, 86400 seconds, so that it will hang over the same longitude. How long the Earth really takes to turn once, and where the satellite goes, is computed below.

## EML

```eml
# Self-authored for the EML case corpus (no external origin). An operator places
# a relay satellite in a circular orbit over the equator and tunes its period to
# exactly one day, 86400 seconds, so that it will hang over the same longitude.
# How long the Earth really takes to turn once, and where the satellite goes, is
# computed below.
#
# The reasoning is careful. The Earth does take 24 hours from noon to noon; the
# orbit is circular and over the equator; the period is tuned to the second; and
# the intent is exactly 'stay over one spot on the ground'.
#
# Noon to noon measures the Earth's turn against the Sun, and while the Earth
# turns it also moves a day's worth along its orbit, so it must turn a little
# extra to face the Sun again. Against the stars - which is what an orbit is
# fixed to - one turn takes 86164 seconds. A satellite going round once in 86400
# falls 236 seconds behind the ground each day, sliding 986 millidegrees west,
# and circles the whole sky in a year.

86400 => noon_to_noon_s
36525 => days_in_a_year_hundredths
360000 => full_circle_millidegrees
1000 => dish_beam_width_millidegrees

days_in_a_year_hundredths + 100 => turns_against_the_stars_in_a_year_hundredths
int(noon_to_noon_s * days_in_a_year_hundredths / turns_against_the_stars_in_a_year_hundredths) => one_turn_against_the_stars_s
noon_to_noon_s - one_turn_against_the_stars_s => orbit_too_long_by_s
int(orbit_too_long_by_s / 60) => too_long_minutes
orbit_too_long_by_s - too_long_minutes * 60 => too_long_remaining_s
int(full_circle_millidegrees * orbit_too_long_by_s / one_turn_against_the_stars_s) => westward_slide_millidegrees_per_day
int(dish_beam_width_millidegrees * 24 / (2 * westward_slide_millidegrees_per_day)) => hours_until_it_leaves_the_dish_beam
int(westward_slide_millidegrees_per_day * 30 / 1000) => slide_in_a_month_degrees
int(full_circle_millidegrees / westward_slide_millidegrees_per_day) => days_to_slide_round_the_whole_sky

"noon to noon                    : " + str(noon_to_noon_s) + " s" ^0
"days in a year                  : " + str(days_in_a_year_hundredths) + " hundredths" ^0
"turns against the stars a year  : " + str(turns_against_the_stars_in_a_year_hundredths) + " hundredths, one more than the days" ^0
"one turn against the stars      : " + str(one_turn_against_the_stars_s) + " s" ^0
"the orbit is too long by        : " + str(orbit_too_long_by_s) + " s, " + str(too_long_minutes) + " minutes " + str(too_long_remaining_s) + " seconds" ^0
"" ^0
"slide west                      : " + str(westward_slide_millidegrees_per_day) + " millidegrees a day" ^0
"out of a " + str(dish_beam_width_millidegrees) + "-millidegree dish beam : after " + str(hours_until_it_leaves_the_dish_beam) + " hours" ^0
"slide in a month                : " + str(slide_in_a_month_degrees) + " degrees" ^0
"round the whole sky             : in " + str(days_to_slide_round_the_whole_sky) + " days" ^0
"" ^0

# ---- what the operator verified ----

"the once-a-day reasoning" ^0
"  the earth : turns in 24 hours, noon to noon" ^0
"  orbit : circular, over the equator" ^0
"  period : " + str(noon_to_noon_s) + " s, tuned to the second" ^0
"  intent : stay over one spot on the ground" ^0
"  facts wrong : 0" ^0
"  verdict : ONE ORBIT A DAY KEEPS IT OVERHEAD" ^0
"" ^0
"  tuning the period to the second is the part done right" ^0
"  here, and it is why the satellite really does go round once" ^0
"  for every noon to noon" ^0
"" ^0

# ---- how long the earth takes to turn once ----

"two kinds of day" ^0
"  noon to noon : one turn against the sun, " + str(noon_to_noon_s) + " s" ^0
"  why it is longer : in a day the earth also moves along its" ^0
"    orbit, and must turn a little extra to face the sun again;" ^0
"    over a year that extra adds up to one whole turn" ^0
"  one turn against the stars : " + str(one_turn_against_the_stars_s) + " s, the turn the ground" ^0
"    actually makes under a satellite" ^0
"  what an orbit is fixed to : the stars, not the sun" ^0
"  what a satellite needs : one lap per turn of the ground," ^0
"    " + str(one_turn_against_the_stars_s) + " s, not " + str(noon_to_noon_s) ^0
"" ^0

# ---- what the operator got ----

"the satellite" ^0
"  believed : parked over one longitude" ^0
"  actual : sliding west " + str(westward_slide_millidegrees_per_day) + " millidegrees a day, out of the dish's" ^0
"    beam in " + str(hours_until_it_leaves_the_dish_beam) + " hours and round the sky in " + str(days_to_slide_round_the_whole_sky) + " days" ^0
"  is the clock wrong : no; the period is " + str(noon_to_noon_s) + " s to the second" ^0
"  is noon to noon one turn of the earth : no; it is one turn" ^0
"    against the sun, and the orbit does not see the sun" ^0
"" ^0

# ---- null control ----

# The same orbit tuned to one turn against the stars instead of to noon to noon.
986 => nc_slide_on_a_noon_to_noon_orbit_millidegrees_per_day
0 => nc_slide_on_a_star_day_orbit_millidegrees_per_day
986 => nc_millidegrees_a_day_the_star_day_removes

"null control - tune the orbit to the stars" ^0
"  slide, noon-to-noon orbit : " + str(nc_slide_on_a_noon_to_noon_orbit_millidegrees_per_day) + " millidegrees a day" ^0
"  slide, star-day orbit : " + str(nc_slide_on_a_star_day_orbit_millidegrees_per_day) + " millidegrees a day" ^0
"  millidegrees a day the star day removes : " + str(nc_millidegrees_a_day_the_star_day_removes) ^0
"  no satellite and no orbit shape changed; the period was" ^0
"  matched to the turn the ground really makes" ^0
"" ^0

# ---- the rule ----

"what an orbit of exactly " + str(noon_to_noon_s) + " seconds guarantees" ^0
"  it goes round once per noon to noon : exactly" ^0
"  it stays over the same spot : not addressed; the ground turns" ^0
"    once against the stars every " + str(one_turn_against_the_stars_s) + " s, the orbit is fixed to" ^0
"    the stars, and the satellite slides " + str(westward_slide_millidegrees_per_day) + " millidegrees west" ^0
"    each day" ^0
"" ^0

"a day is not one thing; the clock's day is the sun's, the orbit's day is the" ^0
"stars', and a satellite tuned to the wrong one keeps perfect time with a" ^0
"ground it is slowly leaving" ^0
"" ^0

"The period is exactly " + str(noon_to_noon_s) + " s, noon to noon - that part is right. But" ^0
"the ground under an orbit turns once against the stars every " + str(one_turn_against_the_stars_s) + " s, so" ^0
"the satellite falls " + str(orbit_too_long_by_s) + " s behind each day and slides " + str(westward_slide_millidegrees_per_day) + " millidegrees" ^0
"west, round the sky in " + str(days_to_slide_round_the_whole_sky) + " days, until the period is set to the day of the stars." ^0
```

## Python (deterministic transpilation)

```python
noon_to_noon_s = 86400
days_in_a_year_hundredths = 36525
full_circle_millidegrees = 360000
dish_beam_width_millidegrees = 1000
turns_against_the_stars_in_a_year_hundredths = days_in_a_year_hundredths + 100
one_turn_against_the_stars_s = int(noon_to_noon_s * days_in_a_year_hundredths / turns_against_the_stars_in_a_year_hundredths)
orbit_too_long_by_s = noon_to_noon_s - one_turn_against_the_stars_s
too_long_minutes = int(orbit_too_long_by_s / 60)
too_long_remaining_s = orbit_too_long_by_s - too_long_minutes * 60
westward_slide_millidegrees_per_day = int(full_circle_millidegrees * orbit_too_long_by_s / one_turn_against_the_stars_s)
hours_until_it_leaves_the_dish_beam = int(dish_beam_width_millidegrees * 24 / (2 * westward_slide_millidegrees_per_day))
slide_in_a_month_degrees = int(westward_slide_millidegrees_per_day * 30 / 1000)
days_to_slide_round_the_whole_sky = int(full_circle_millidegrees / westward_slide_millidegrees_per_day)
print("noon to noon                    : " + str(noon_to_noon_s) + " s")
print("days in a year                  : " + str(days_in_a_year_hundredths) + " hundredths")
print("turns against the stars a year  : " + str(turns_against_the_stars_in_a_year_hundredths) + " hundredths, one more than the days")
print("one turn against the stars      : " + str(one_turn_against_the_stars_s) + " s")
print("the orbit is too long by        : " + str(orbit_too_long_by_s) + " s, " + str(too_long_minutes) + " minutes " + str(too_long_remaining_s) + " seconds")
print("")
print("slide west                      : " + str(westward_slide_millidegrees_per_day) + " millidegrees a day")
print("out of a " + str(dish_beam_width_millidegrees) + "-millidegree dish beam : after " + str(hours_until_it_leaves_the_dish_beam) + " hours")
print("slide in a month                : " + str(slide_in_a_month_degrees) + " degrees")
print("round the whole sky             : in " + str(days_to_slide_round_the_whole_sky) + " days")
print("")
print("the once-a-day reasoning")
print("  the earth : turns in 24 hours, noon to noon")
print("  orbit : circular, over the equator")
print("  period : " + str(noon_to_noon_s) + " s, tuned to the second")
print("  intent : stay over one spot on the ground")
print("  facts wrong : 0")
print("  verdict : ONE ORBIT A DAY KEEPS IT OVERHEAD")
print("")
print("  tuning the period to the second is the part done right")
print("  here, and it is why the satellite really does go round once")
print("  for every noon to noon")
print("")
print("two kinds of day")
print("  noon to noon : one turn against the sun, " + str(noon_to_noon_s) + " s")
print("  why it is longer : in a day the earth also moves along its")
print("    orbit, and must turn a little extra to face the sun again;")
print("    over a year that extra adds up to one whole turn")
print("  one turn against the stars : " + str(one_turn_against_the_stars_s) + " s, the turn the ground")
print("    actually makes under a satellite")
print("  what an orbit is fixed to : the stars, not the sun")
print("  what a satellite needs : one lap per turn of the ground,")
print("    " + str(one_turn_against_the_stars_s) + " s, not " + str(noon_to_noon_s))
print("")
print("the satellite")
print("  believed : parked over one longitude")
print("  actual : sliding west " + str(westward_slide_millidegrees_per_day) + " millidegrees a day, out of the dish's")
print("    beam in " + str(hours_until_it_leaves_the_dish_beam) + " hours and round the sky in " + str(days_to_slide_round_the_whole_sky) + " days")
print("  is the clock wrong : no; the period is " + str(noon_to_noon_s) + " s to the second")
print("  is noon to noon one turn of the earth : no; it is one turn")
print("    against the sun, and the orbit does not see the sun")
print("")
nc_slide_on_a_noon_to_noon_orbit_millidegrees_per_day = 986
nc_slide_on_a_star_day_orbit_millidegrees_per_day = 0
nc_millidegrees_a_day_the_star_day_removes = 986
print("null control - tune the orbit to the stars")
print("  slide, noon-to-noon orbit : " + str(nc_slide_on_a_noon_to_noon_orbit_millidegrees_per_day) + " millidegrees a day")
print("  slide, star-day orbit : " + str(nc_slide_on_a_star_day_orbit_millidegrees_per_day) + " millidegrees a day")
print("  millidegrees a day the star day removes : " + str(nc_millidegrees_a_day_the_star_day_removes))
print("  no satellite and no orbit shape changed; the period was")
print("  matched to the turn the ground really makes")
print("")
print("what an orbit of exactly " + str(noon_to_noon_s) + " seconds guarantees")
print("  it goes round once per noon to noon : exactly")
print("  it stays over the same spot : not addressed; the ground turns")
print("    once against the stars every " + str(one_turn_against_the_stars_s) + " s, the orbit is fixed to")
print("    the stars, and the satellite slides " + str(westward_slide_millidegrees_per_day) + " millidegrees west")
print("    each day")
print("")
print("a day is not one thing; the clock's day is the sun's, the orbit's day is the")
print("stars', and a satellite tuned to the wrong one keeps perfect time with a")
print("ground it is slowly leaving")
print("")
print("The period is exactly " + str(noon_to_noon_s) + " s, noon to noon - that part is right. But")
print("the ground under an orbit turns once against the stars every " + str(one_turn_against_the_stars_s) + " s, so")
print("the satellite falls " + str(orbit_too_long_by_s) + " s behind each day and slides " + str(westward_slide_millidegrees_per_day) + " millidegrees")
print("west, round the sky in " + str(days_to_slide_round_the_whole_sky) + " days, until the period is set to the day of the stars.")
```

## stdout (executed)

```text
noon to noon                    : 86400 s
days in a year                  : 36525 hundredths
turns against the stars a year  : 36625 hundredths, one more than the days
one turn against the stars      : 86164 s
the orbit is too long by        : 236 s, 3 minutes 56 seconds

slide west                      : 986 millidegrees a day
out of a 1000-millidegree dish beam : after 12 hours
slide in a month                : 29 degrees
round the whole sky             : in 365 days

the once-a-day reasoning
  the earth : turns in 24 hours, noon to noon
  orbit : circular, over the equator
  period : 86400 s, tuned to the second
  intent : stay over one spot on the ground
  facts wrong : 0
  verdict : ONE ORBIT A DAY KEEPS IT OVERHEAD

  tuning the period to the second is the part done right
  here, and it is why the satellite really does go round once
  for every noon to noon

two kinds of day
  noon to noon : one turn against the sun, 86400 s
  why it is longer : in a day the earth also moves along its
    orbit, and must turn a little extra to face the sun again;
    over a year that extra adds up to one whole turn
  one turn against the stars : 86164 s, the turn the ground
    actually makes under a satellite
  what an orbit is fixed to : the stars, not the sun
  what a satellite needs : one lap per turn of the ground,
    86164 s, not 86400

the satellite
  believed : parked over one longitude
  actual : sliding west 986 millidegrees a day, out of the dish's
    beam in 12 hours and round the sky in 365 days
  is the clock wrong : no; the period is 86400 s to the second
  is noon to noon one turn of the earth : no; it is one turn
    against the sun, and the orbit does not see the sun

null control - tune the orbit to the stars
  slide, noon-to-noon orbit : 986 millidegrees a day
  slide, star-day orbit : 0 millidegrees a day
  millidegrees a day the star day removes : 986
  no satellite and no orbit shape changed; the period was
  matched to the turn the ground really makes

what an orbit of exactly 86400 seconds guarantees
  it goes round once per noon to noon : exactly
  it stays over the same spot : not addressed; the ground turns
    once against the stars every 86164 s, the orbit is fixed to
    the stars, and the satellite slides 986 millidegrees west
    each day

a day is not one thing; the clock's day is the sun's, the orbit's day is the
stars', and a satellite tuned to the wrong one keeps perfect time with a
ground it is slowly leaving

The period is exactly 86400 s, noon to noon - that part is right. But
the ground under an orbit turns once against the stars every 86164 s, so
the satellite falls 236 s behind each day and slides 986 millidegrees
west, round the sky in 365 days, until the period is set to the day of the stars.
```

## Round-trip

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

## Trace event types

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