Extensibella Example: lambda_calculus:pair

Language Specification

File: def.sos

[Reduce File] [Raw File]
Module lambda_calculus:pair

Builds on lambda_calculus:host

e ::= ...
    | pair(e, e)
    | fst(e)
    | snd(e)


---------------------------------------------------- [Proj-Pair]
|{e}- pair(T1, T2) ~~>
  app(
    app(
      abs("A", abs("B", abs("S",
          app(app(var("S"), var("A")), var("B"))))),
      T1),
    T2)


------------------------------------------ [Proj-Fst]
|{e}- fst(T) ~~>
      app(T, abs("A", abs("B", var("A"))))


------------------------------------------ [Proj-Snd]
|{e}- snd(T) ~~>
      app(T, abs("A", abs("B", var("B"))))



{eval
  app(
    app(
      abs("A", abs("B", abs("S",
          app(app(var("S"), var("A")), var("B"))))),
      T1),
    T2) V}
---------------------------------------------------- [E-Pair]
eval pair(T1, T2) V


eval app(T, abs("A", abs("B", var("A")))) V
------------------------------------------- [E-Fst]
eval fst(T) V


eval app(T, abs("A", abs("B", var("B")))) V
------------------------------------------- [E-Snd]
eval snd(T) V



subst X R T1 S1
subst X R T2 S2
---------------------------------------------------- [S-Pair]
{subst X R pair(T1, T2)
  app(
    app(
      abs("A", abs("B", abs("S",
          app(app(var("S"), var("A")), var("B"))))),
      S1),
    S2)}


subst X R T S
------------------------------------------ [S-Fst]
{subst X R fst(T)
      app(S, abs("A", abs("B",var("A"))))}


subst X R T S
------------------------------------------ [S-Snd]
{subst X R snd(T)
      app(S, abs("A", abs("B",var("B"))))}

Reasoning

[Show All Proofs] [Hide All Proofs] [Raw File]

Click on a command or tactic to see a detailed view of its use.

Module lambda_calculus:pair.


Prove_Constraint lambda_calculus:host:proj_is. [Show Proof]



Add_Proj_Rel lambda_calculus:host:is_e.


Prove_Ext_Ind lambda_calculus:host:is_e. [Show Proof]



Prove_Constraint lambda_calculus:host:proj_same. [Show Proof]



Prove lambda_calculus:host:subst_exists. [Show Proof]



Prove lambda_calculus:host:subst_is. [Show Proof]



Prove lambda_calculus:host:eval_is. [Show Proof]



Prove lambda_calculus:host:subst_unique. [Show Proof]



Prove lambda_calculus:host:eval_unique. [Show Proof]



Prove_Constraint lambda_calculus:host:proj_subst. [Show Proof]



Prove_Constraint lambda_calculus:host:proj_subst_same. [Show Proof]



Prove_Constraint lambda_calculus:host:proj_eval. [Show Proof]



Prove_Constraint lambda_calculus:host:proj_eval_same. [Show Proof]



Add_Ext_Size lambda_calculus:host:eval.


Add_Proj_Rel lambda_calculus:host:eval.


Prove_Ext_Ind lambda_calculus:host:eval. [Show Proof]


Back to example home