NASA logo

+ Contact NASA

  • + HOME
  • + TEAM
  • + LINKS

  • NASA PVS Library Featured in the Movie “The Martian”

    Since the release of the science fiction film The Martian[*] in 2015, movie fans have been speculating in internet forums about the source code that is displayed in computer screens in some scenes of the movie[*]. Some fans have jokingly guessed “alien technology”, others claimed to be “gibberish”, and the most informed have noticed similarities with programming languages such as as Lisp, Prolog, and, even, Pascal.

    Closest to the truth, the Internet Movie Database (IMDb) explains[*]:

    Whenever Mark boots up a computer (ie. when finding the MAV) a sequence of source code is seen appearing on a screen. The code is written in PVS (Prototype Verification System), an experimental macro language which NASA actually uses and it's very plausible to appear on a future spacecraft. This particular chunk of code is from the already existing NASA PVS Library, and actually you can find that very piece of code as open source if you type a part of it into Google.

    Indeed, the source code seen in the movie The Martian is written in PVS[*], a verification system developed by SRI International[*]. It is also true that this particular code is part of the NASA PVS Library, a collection of formal theories developed and maintained by the Formal Methods Group of the Safety-Critical Avionics Systems Branch at NASA Langley Research Center. However, PVS is neither a programming language, nor a “macro language”. PVS is a proof assistant[*]. It consists of a specification language, i.e., a formal notation for defining mathematical objects and their properties, and an interactive theorem prover for verifying these properties using deductive rules. Both PVS specifications and proofs are displayed in the movie.

    Code from the NASA PVS Library appears three times in the movie. In every instance, the code is unrelated to the movie's implied functionality. At 58 minutes, the following snippet of code from the file power/exponentiation_aux.prf* is shown in a computer screen* in the Hermes spacecraft.

       ("" (induct "n")
        (("1" (expand "expt") (("1" (propax) nil nil)) nil)
         ("2" (skosimp*)
          (("2" (expand "expt" 1)
            (("2" (inst - "px!1")
                (lemma "both_sides_times_pos_le1"
                 ("pz" "px!1" "x" "1" "y" "expt(1+px!1,j!1)"))
                (("2" (rewrite "expt_gt1_bound1" -1)
                  (("2" (assert) nil nil)) nil))

    It is implied in the movie that this text encodes video data. In reality, this text is the PVS internal representation of a proof of the the mathematical statement , where is a natural number and is a positive real number. Internally, PVS uses s-expressions* to represent proofs. PVS is implemented in Lisp and s-expressions are often used in Lisp programs to represent data. These s-expressions are constructed by PVS from proof commands entered by the user such as (induct "n"), (expand "expt"), etc. This s-expressions reflects the fact that the proof, which was written by Prof. David Lester* (U. of Manchester, UK), proceeds by induction on .

    The second and third appearances of the NASA PVS Library occur at times 1h:39m:03s and 1h48m53s, respectively, when the following code from Bernstein/MPoly.pvs* is displayed in a computer screen*.

      mpoly        : VAR MultiPolynomial
      mdeg         : VAR DegreeMono
      mcoeff       : VAR Coeff
      nvars,terms  : VAR posnat
      rel          : VAR RealOrder
      Avars,Bvars  : VAR Vars
      intendpts    : VAR IntervalEndpoints
      MPoly : TYPE = [#
        mpoly  : MultiPolynomial,
        mdeg   : DegreeMono,
        terms  : posnat,
        mcoeff : Coeff
      mk_mpoly(mpoly,mdeg,terms,mcoeff) : MACRO MPoly = (#
        mpoly  := mpoly,
        mdeg   := mdeg,
        terms  := terms,
        mcoeff := mcoeff

    The movie implies that this code is somehow related to the shutdown and startup scripts of the Mars Habitat (Hab) and the Mars Ascending Vehicle (MAV), respectively. Indeed, this code is a PVS specification of a data structure for representing multivariate polynomials. The code, which was written by Anthony Narkawicz (NASA) and César Muñoz (NASA), is part of a PVS formalization of a method for approximating the minimum and maximum values of a multivariate polynomial using Bernstein polynomial basis.

    What about the claim by the Internet Movie Database (IMDb) that PVS code will appear in future spacecraft? Unlikely. As explained here, PVS is not a programming language but a proof assistant. Unless astronauts would like to kill the tedium in a long interstellar voyage by proving theorems, PVS won't be installed in future spacecraft computers. However, it is possible that computer programs, whose safety-critical algorithms have been formally verified in PVS, would appear in future aerospace systems. That is the case of separation assurance systems for air traffic management such as ACCoRD and detect and avoid systems for unmanned aircraft systems such as DAIDALUS.

    The tag [*] identifies links that are outside the NASA domain