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))))))