| As an example of elaborator reflection here we step through this identity implementation: | mkId : Elab ()
mkId = do
x <- gensym "x"
attack
intro x
fill (Var x)
solve
solve
natId : Nat -> Nat
natId = %runElab mkId |
|
After each tactic we will look at the state:
| We start with the type signature like this: | mkId : Elab ()
mkId = do
x <- gensym "x" |
| In order to investigate how the program works we can look at the proofState at each stage as the tactics are applied. So here is the proofState at the start: | ![]() |
| We can also look at the logic at each stage: | |
| The term is: | ?{hole_0} ≈ ? {hole_2} . {hole_2} . {hole_0} |
getEnv getGoal getHoles |
getEnv=[] |
| getGuess | error no guess |
Here is the state (given by 'debug') at the start. 'pi_arg' represents the first argument of the function. If there had been other arguments they would be 'pi_arg1'.'pi_arg2'... |
Holes:
----------------------------------
{hole_2} : (__pi_arg : Prelude.Nat.Nat) -> Prelude.Nat.Nat
----------------------------------
{hole_0} : (__pi_arg : Prelude.Nat.Nat) -> Prelude.Nat.Nat |
| . | attack |
![]() |
|
| Term: | ?{hole_0} ≈ ?{hole_2} ≈ ? {hole_6} . {hole_6} . {hole_2} . {hole_0} |
getEnv getGoal getHoles |
getEnv=[] |
| getGuess | Not a guess |
Holes:
----------------------------------
{hole_6} : (__pi_arg : Prelude.Nat.Nat) -> Prelude.Nat.Nat
----------------------------------
{hole_2} : (__pi_arg : Prelude.Nat.Nat) -> Prelude.Nat.Nat
----------------------------------
{hole_0} : (__pi_arg : Prelude.Nat.Nat) -> Prelude.Nat.Nat |
|
intro x |
|
![]() |
|
| Term: | ?{hole_0} ≈ ?{hole_2} ≈ λ {x_105} . ? {hole_6} . {hole_6} . {hole_2} .
{hole_0} |
getEnv getGoal getHoles |
getEnv=[({x_105}, {λ ({`{{Nat}}.["Nat", "Prelude"]}:{type const
tag=8,0}).{TT:TType |
| getGuess | not a guess |
Holes:
{x_105} : Prelude.Nat.Nat
----------------------------------
{hole_6} : Prelude.Nat.Nat
----------------------------------
{hole_2} : (__pi_arg : Prelude.Nat.Nat) -> Prelude.Nat.Nat
----------------------------------
{hole_0} : (__pi_arg : Prelude.Nat.Nat) -> Prelude.Nat.Nat |
|
| Substitute a guess into a hole. | fill (Var x) |
| Term: | ?{hole_0} ≈ ?{hole_2} ≈ λ {x_105} . ?{hole_6} ≈ {x_105} . {hole_6} .
{hole_2} .
{hole_0} |
getEnv getGoal getHoles |
getEnv=[({x_105}, {λ ({`{{Nat}}.["Nat", "Prelude"]}:{type const
tag=8,0}).{TT:TType |
| getGuess | {TT:Parameter name ref |
Holes:
{x_105} : Prelude.Nat.Nat
----------------------------------
{hole_6} : Prelude.Nat.Nat
----------------------------------
{hole_2} : (__pi_arg : Prelude.Nat.Nat) -> Prelude.Nat.Nat
----------------------------------
{hole_0} : (__pi_arg : Prelude.Nat.Nat) -> Prelude.Nat.Nat |
|
x |
|
getEnv getGoal getHoles |
x |
| getGuess | x |
x |
|
x |
|
getEnv getGoal getHoles |
x |
| getGuess | x |
x |



