Shadow of Io Theorem
(all (time-voyager-2-c)
(find (shadow-point-c)
(exists
(time-sun sun-spacetime-loc time-io io-spacetime-loc
time-jupiter jupiter-spacetime-loc time-voyager-2
voyager-2-spacetime-loc shadow-point jupiter-ellipsoid
ray-sun-to-io)
(and
(= ray-sun-to-io
(two-points-to-ray
(event-to-position sun-spacetime-loc)
(event-to-position io-spacetime-loc)))
(= jupiter-ellipsoid
(body-and-time-to-ellipsoid jupiter time-jupiter))
(= shadow-point
(intersect-ray-ellipsoid ray-sun-to-io jupiter-ellipsoid))
(lightlike? jupiter-spacetime-loc voyager-2-spacetime-loc)
(lightlike? io-spacetime-loc jupiter-spacetime-loc)
(lightlike? sun-spacetime-loc io-spacetime-loc)
(= voyager-2-spacetime-loc
(ephemeris-object-and-time-to-event voyager-2 time-voyager-2))
(= jupiter-spacetime-loc
(ephemeris-object-and-time-to-event jupiter time-jupiter))
(= io-spacetime-loc
(ephemeris-object-and-time-to-event io time-io))
(= sun-spacetime-loc
(ephemeris-object-and-time-to-event sun time-sun))
(= shadow-point (abs (coords-to-point j2000) shadow-point-c))
(= time-voyager-2
(abs ephemeris-time-to-time time-voyager-2-c))))))