@@ -2194,8 +2194,8 @@ As an exception, we often use `Tuple` in the second field of term annotations `<
21942194 premise-list | none
21952195 <annot> := [ <attr>, <pterm> ]
21962196 <term> := <param> | <const> |
2197- (-> <term> <term>) | (~> <term> <term>) | (--> <term>* <term>) |
2198- (_ <term> <term>) | (_# <term> <term>) | (<prog-const> <term>* )
2197+ (-> <term> <term>) | (~> <term> <term>) | (--> <term>+ <term>) |
2198+ (_ <term> <term>) | (_# <term> <term>) | (<prog-const> <term>+ )
21992199 <prog-const> := <const> | eo::requires | eo::nil | eo::ite | eo::typeof | eo::is_eq
22002200
22012201 <pterm> := <term> | Null | (Opaque <pterm>) | (Quote <pterm>) | (Nil <pterm>*) |
@@ -2571,10 +2571,10 @@ RUN(C):
25712571 if A[r] = [premise-list, g]
25722572 Let p = FRESH_CONST( p, DESUGAR( (Proof (g F_1 ... F_k) ) ) ), where p_1, ..., p_k have type (Proof F_1), ...., (Proof F_k).
25732573 Let res = SUBS( (r t_1 ... t_n p), [eo::conclusion], [F] )
2574- return RUN( (define s () res) )
2574+ return RUN( (define s () res :type (Proof F) ) )
25752575 else
25762576 Let res = SUBS( (r t_1 ... t_n p_1 ... p_k), [eo::conclusion], [F] )
2577- return RUN( (define s () res) )
2577+ return RUN( (define s () res :type (Proof F) ) )
25782578
25792579 (program s ((x_1 U_1) ... (x_m U_m))
25802580 (T_1 ... T_n) T
@@ -2634,6 +2634,7 @@ RUN(C):
26342634
26352635### Type system
26362636
2637+
26372638``` smt
26382639f : (~> u S) t : T
26392640-------------------------- if SUBS(u, X, R) = t
@@ -2657,6 +2658,11 @@ The submethod `EVAL( t, [x_1, ..., x_n], [r_1, ..., r_n] )`
26572658is the result of evaluating ` t ` in the context where parameters ` [x_1, ..., x_n] `
26582659are bound to ` [r_1, ..., r_n] ` .
26592660
2661+ By convention, we assume
2662+ a term is well typed only if its type does not contain an application of a program or builtin evaluation operator.
2663+ In other words, all type rules above assume the side condition that ` T ` respects this restriction if ` t : T ` is concluded.
2664+ Moreover we assume that all types are fully evaluated when assigned to atomic terms.
2665+
26602666### Execution semantics
26612667
26622668TODO
0 commit comments