Module mtc:arith
Builds on mtc:shared_declarations
e ::= ...
| num(nat)
| plus(e, e)
v ::= ...
| numVal(nat)
ty ::= ...
| natTy
nat ::= z | s(nat)
Projection nat :
--------------------- [T-Num]
typeOf G num(N) natTy
typeOf G E1 natTy
typeOf G E2 natTy
--------------------------- [T-Plus]
typeOf G plus(E1, E2) natTy
----------------------- [E-Num]
eval G num(N) numVal(N)
eval G E1 numVal(N1)
eval G E2 numVal(N2)
plusRel N1 N2 N
----------------------------- [E-Plus]
eval G plus(E1, E2) numVal(N)
Fixed Judgment plusRel : nat nat nat
============= [PR-Z]
plusRel z N N
plusRel N1 N2 N3
====================== [PR-S]
plusRel s(N1) N2 s(N3)
------------------------- [VT-NumVal]
valueType numVal(N) natTy
evalStep E1 E11
----------------------------------- [ES-Plus-Step1]
evalStep plus(E1, E2) plus(E11, E2)
value E1
evalStep E2 E21
----------------------------------- [ES-Plus-Step2]
evalStep plus(E1, E2) plus(E1, E21)
plusRel N1 N2 N
-------------------------------------- [ES-Plus-Add]
evalStep plus(num(N1), num(N2)) num(N)
------------ [V-Num]
value num(N)
----------------------- [S-Num]
subst X R num(N) num(N)
subst X R E1 E11
subst X R E2 E21
------------------------------------- [S-Plus]
subst X R plus(E1, E2) plus(E11, E21)
------------------ [C-NatTy]
canon natTy num(N)
--------------------- [Proj-Num]
|{e}- num(N) ~~> nilE
--------------------------- [Proj-Plus]
|{e}- plus(E1, E2) ~~> nilE
------------------------ [Proj-NumVal]
|{v}- numVal(N) ~~> nilV
---------------------- [Proj-NatTy]
|{ty}- natTy ~~> nilTy
Click on a command or tactic to see a detailed view of its use.
Module mtc:arith. /* Sterling doesn't let us declare fixed types, but we can fix a type by introducing a property like this */ Extensible_Theorem fix_nat : forall N, IsN : is_nat N -> N = z \/ exists N', N = s N' on IsN. [Show Proof] Prove mtc:shared_declarations:type_preservation. [Show Proof] Prove mtc:shared_declarations:value_evalStep_false. [Show Proof] Theorem plusRel_unique : forall N1 N2 A B, plusRel N1 N2 A -> plusRel N1 N2 B -> A = B. [Show Proof] Prove mtc:shared_declarations:subst_unique. [Show Proof] Prove mtc:shared_declarations:evalStep_unique. [Show Proof] Prove mtc:shared_declarations:ty_lookup. [Show Proof] Prove mtc:shared_declarations:subst_preservation. [Show Proof] Prove mtc:shared_declarations:evalStep_type_preservation. [Show Proof] Prove mtc:shared_declarations:canonical_form. [Show Proof] Prove mtc:shared_declarations:subst_is. [Show Proof] Theorem plusRel_is : forall A B C, is_nat A -> is_nat B -> plusRel A B C -> is_nat C. [Show Proof] Prove mtc:shared_declarations:evalStep_is. [Show Proof] Prove mtc:shared_declarations:subst_total. [Show Proof] Theorem plusRel_total : forall N1 N2, is_nat N1 -> exists N, plusRel N1 N2 N. [Show Proof] Prove mtc:shared_declarations:progress. [Show Proof]