becomes its natural numbers, so literals mean the same.
▪
Every term is imported as a core term of TypeTheory, with every argument and every universe level given, so nothing is filled in again on the TypeTheory side. A subterm that occurs many times, as in a proof that a tactic such as
omega
writes, is imported once and shared, as Lean shares it.
to import into; constants it already declares are not imported again.
▪
A block of mutually inductive types is imported as one declaration of all its types, and a type nested in a container, as Lean's syntax trees are in
Array
, as itself: TypeTheory checks the nesting as Lean's kernel does. Every recursor of the block,
X.rec_k
on a container included as
InductiveRecursor["X",k]
, is compared with Lean's.
▪
A string literal is written as Lean's kernel reads it:
String.ofList
applied to the list of its characters, each
Char.ofNat
of its code point.
▪
The operations Lean's kernel computes on literals with GMP,
Nat.add
,
Nat.mul
,
Nat.pow
,
Nat.div
,
Nat.ble
and the others, are registered with TypeTheory as they are imported, so it computes them on literals with integers too, and a proof about numbers near 2^64 checks at once.
▪
Lean's quotient types,
Quot
,
Quot.mk
,
Quot.lift
and
Quot.ind
, are TypeTheory's own: the import declares them at once with