Lean2Js.Norm
The shapes of Js.normTy, Js.outTy and Js.checkFields, unfolded once each #
The shapes of Js.normTy, Js.outTy and Js.checkFields, unfolded once each.
All three are well-founded recursions over a value read by name, so none reduces by rfl and none is
safe to hand to simp at a use site. The lemmas here are what the proofs about the entry
check, its normalisation walk and the walk its result leaves by stand on.
Lean2Js.Js.lookupField_skip
sourceUsed by
Lean2Js.Js.lookupField_head
sourceUsed by
Lean2Js.Js.lookupField_cons_ne
sourceUsed by
normTy and its companions are well-founded recursions, so each shape is unfolded once here rather
than by simp at every use.
Lean2Js.Js.normList_nil
sourceUsed by
Lean2Js.Js.normList_cons
sourceUsed by
Lean2Js.Js.normEntries_nil
sourceUsed by
Lean2Js.Js.normEntries_cons
sourceUsed by
Lean2Js.Js.normFields_nil
sourceUsed by
Lean2Js.Js.normFields_cons
sourceUsed by
Lean2Js.Js.normFields_none
sourceUsed by
Lean2Js.Js.normTy_bool
sourceUsed by
Lean2Js.Js.normTy_int53
sourceUsed by
Lean2Js.Js.normTy_uint32
sourceUsed by
Lean2Js.Js.normTy_string
sourceUsed by
Lean2Js.Js.normTy_bigint
sourceUsed by
Lean2Js.Js.normTy_array
sourceUsed by
Lean2Js.Js.normTy_dict
sourceUsed by
Lean2Js.Js.normTy_dictObj_dict
sourceUsed by
Lean2Js.Js.normTy_dictObj_obj
sourceUsed by
Lean2Js.Js.normTy_none
sourceUsed by
Lean2Js.Js.normTy_some
sourceUsed by
Lean2Js.Js.normTy_ok
sourceUsed by
Lean2Js.Js.normTy_error
sourceUsed by
Lean2Js.Js.normTy_ctors
sourceUsed by
Lean2Js.Js.normEntries_keys
sourceUsed by
Lean2Js.Js.checkFields_nil
sourceUsed by
Lean2Js.Js.checkFields_found
sourceUsed by
Lean2Js.Js.checkFields_missing
sourceUsed by
Lean2Js.Js.lookupField_mem
sourceUsed by
Lean2Js.Js.lookupField_cases
sourceUsed by
Lean2Js.Js.checkFields_cons
sourceUsed by
Lean2Js.Js.checkFields_congr
sourcecheckFields reads only the keys the descriptor names, so two objects that answer those the same
way answer the check the same way.
Used by
Lean2Js.Js.normFields_congr
sourcenormFields reads only the keys the descriptor names, so two objects that answer those the same
way normalise the same way.
Used by
Lean2Js.Js.normFields_skip
sourceUsed by
Lean2Js.Js.checkFields_skip
sourceUsed by
Lean2Js.Js.namesOk_head
sourceUsed by
Lean2Js.Js.namesOk_not_key
sourceUsed by
Lean2Js.Js.altsOk_find
sourceUsed by
The walk on the way out #
outTy is a well-founded recursion for the reason normTy is, so its shapes are unfolded once here
too. Every one of them but outTy_dictObj says the same thing its normTy twin says.
Lean2Js.Js.outList_nil
sourceUsed by
Lean2Js.Js.outList_cons
sourceUsed by
Lean2Js.Js.outEntries_nil
sourceUsed by
Lean2Js.Js.outEntries_cons
sourceUsed by
Lean2Js.Js.outFields_nil
sourceUsed by
Lean2Js.Js.outFields_cons
sourceUsed by
Lean2Js.Js.outFields_none
sourceUsed by
Lean2Js.Js.outTy_bool
sourceUsed by
Lean2Js.Js.outTy_int53
sourceUsed by
Lean2Js.Js.outTy_uint32
sourceUsed by
Lean2Js.Js.outTy_string
sourceUsed by
Lean2Js.Js.outTy_bigint
sourceUsed by
Lean2Js.Js.outTy_array
sourceUsed by
Lean2Js.Js.outTy_dict
sourceUsed by
Lean2Js.Js.outTy_dictObj
sourceThe one node the two walks part at: a Map is handed back as the object its declared type says
it crosses as.
Used by
Lean2Js.Js.outTy_dictObj_obj
sourceA value that is already an object at a dictObj is handed back as it stands. Inside the module a
dictionary is a Map whatever it crosses as, so this is a shape a body does not produce; giving it
the identity rather than a walk is what keeps the branch out of the helper's proof.
Used by
Lean2Js.Js.outTy_none
sourceUsed by
Lean2Js.Js.outTy_some
sourceUsed by
Lean2Js.Js.outTy_ok
sourceUsed by
Lean2Js.Js.outTy_error
sourceUsed by
Lean2Js.Js.outTy_ctors
sourceUsed by
Lean2Js.Js.outEntries_keys
sourceUsed by
Lean2Js.Js.outFields_congr
sourceoutFields reads only the keys the descriptor names, so two objects that answer those the same way
leave the same way.
Used by
Lean2Js.Js.outFields_skip
sourceUsed by
Where the two walks are one walk #
A return type reaching no dictObj is handed back exactly as it came, so its entry emits no walk out
and the package it is compiled into is byte-for-byte what it was before a dictionary could cross as a
plain object. That is what the lemma below is for.
Lean2Js.Js.outTy_eq_normTy
sourceWhere nothing the descriptor reaches crosses the boundary as a plain object, the walk out is the walk in.