{ 
[A,B,C,S:Type]. 
[F:S 
 A 
 (S 
 C)]. 
[G:C 
 B 
 B]. 
[P:B 
 
].
  
[s:S]. 
[s2:B].
    (better-feedback-dataflow(1;
k.[rec-dataflow(s;s,a.F[s;a])][k];
     
g,x.G[g 0;x];s2;s.P[s])
    = rec-dataflow(<s, s2>s,a.let s1,s2 = s 
                               in let s',out = F[s1;a] 
                                  in <<s'
                                      , if P[G[out;s2]]
                                        then G[out;s2]
                                        else s2
                                        fi 
                                      >
                                     , G[out;s2]
                                     >)) }
{ Proof }
Definitions occuring in Statement : 
better-feedback-dataflow: better-feedback-dataflow(n;ds;F;s;x.P[x]), 
rec-dataflow: rec-dataflow(s0;s,m.next[s; m]), 
dataflow: dataflow(A;B), 
select: l[i], 
ifthenelse: if b then t else f fi , 
bool:
, 
uall:
[x:A]. B[x], 
so_apply: x[s1;s2], 
so_apply: x[s], 
apply: f a, 
lambda:
x.A[x], 
function: x:A 
 B[x], 
spread: spread def, 
pair: <a, b>, 
product: x:A 
 B[x], 
cons: [car / cdr], 
nil: [], 
natural_number: $n, 
universe: Type, 
equal: s = t
Definitions : 
suptype: suptype(S; T), 
sqequal: s ~ t, 
true: True, 
data-stream: data-stream(P;L), 
fpf-cap: f(x)?z, 
sq_stable: SqStable(P), 
proper-iseg: L1 < L2, 
iseg: l1 
 l2, 
gt: i > j, 
map: map(f;as), 
label: ...$L... t, 
top: Top, 
grp_car: |g|, 
filter: filter(P;l), 
intensional-universe: IType, 
corec: corec(T.F[T]), 
tl: tl(l), 
hd: hd(l), 
length: ||as||, 
so_lambda: 
x y.t[x; y], 
let: let, 
sq_type: SQType(T), 
list: type List, 
nat_plus: 
, 
l_contains: A 
 B, 
cmp-le: cmp-le(cmp;x;y), 
inject: Inj(A;B;f), 
reducible: reducible(a), 
prime: prime(a), 
squash:
T, 
l_exists: (
x
L. P[x]), 
l_all: (
x
L.P[x]), 
infix_ap: x f y, 
fun-connected: y is f*(x), 
limited-type: LimitedType, 
qle: r 
 s, 
qless: r < s, 
q-rel: q-rel(r;x), 
sq_exists:
x:{A| B[x]}, 
exists:
x:A. B[x], 
atom: Atom$n, 
i-finite: i-finite(I), 
i-closed: i-closed(I), 
dstype: dstype(TypeNames; d; a), 
fset-member: a 
 s, 
f-subset: xs 
 ys, 
fset: FSet{T}, 
fset-closed: (s closed under fs), 
Id: Id, 
IdLnk: IdLnk, 
Knd: Knd, 
MaName: MaName, 
l_disjoint: l_disjoint(T;l1;l2), 
decidable: Dec(P), 
union: left + right, 
or: P 
 Q, 
guard: {T}, 
l_member: (x 
 l), 
assert:
b, 
lelt: i 
 j < k, 
int_seg: {i..j
}, 
p-outcome: Outcome, 
prop:
, 
void: Void, 
implies: P 
 Q, 
false: False, 
set: {x:A| B[x]} , 
real:
, 
rationals:
, 
subtype: S 
 T, 
nat:
, 
int:
, 
so_lambda: 
x.t[x], 
fpf: a:A fp-> B[a], 
strong-subtype: strong-subtype(A;B), 
le: A 
 B, 
ge: i 
 j , 
not:
A, 
less_than: a < b, 
uimplies: b supposing a, 
and: P 
 Q, 
uiff: uiff(P;Q), 
subtype_rel: A 
r B, 
all:
x:A. B[x], 
axiom: Ax, 
ifthenelse: if b then t else f fi , 
spread: spread def, 
pair: <a, b>, 
so_apply: x[s], 
nil: [], 
apply: f a, 
so_apply: x[s1;s2], 
rec-dataflow: rec-dataflow(s0;s,m.next[s; m]), 
cons: [car / cdr], 
select: l[i], 
natural_number: $n, 
better-feedback-dataflow: better-feedback-dataflow(n;ds;F;s;x.P[x]), 
dataflow: dataflow(A;B), 
bool:
, 
equal: s = t, 
universe: Type, 
product: x:A 
 B[x], 
uall:
[x:A]. B[x], 
isect:
x:A. B[x], 
member: t 
 T, 
function: x:A 
 B[x], 
Auto: Error :Auto, 
CollapseTHEN: Error :CollapseTHEN, 
CollapseTHENA: Error :CollapseTHENA, 
lambda:
x.A[x], 
Try: Error :Try
Lemmas : 
member_wf, 
dataflow_wf, 
select_wf, 
int_seg_properties, 
le_wf, 
false_wf, 
not_wf, 
int_subtype_base, 
subtype_base_sq, 
int_seg_wf, 
decidable__equal_int, 
nat_wf, 
better-feedback-dataflow_wf, 
dataflow-extensionality, 
bool_wf, 
rec-dataflow_wf, 
intensional-universe_wf, 
subtype_rel_wf, 
length_wf_nat, 
length_nil, 
top_wf, 
ge_wf, 
subtype_rel_self, 
ifthenelse_wf, 
true_wf, 
squash_wf, 
data-stream_wf, 
feedback-1-rec-dataflow
\mforall{}[A,B,C,S:Type].  \mforall{}[F:S  {}\mrightarrow{}  A  {}\mrightarrow{}  (S  \mtimes{}  C)].  \mforall{}[G:C  {}\mrightarrow{}  B  {}\mrightarrow{}  B].  \mforall{}[P:B  {}\mrightarrow{}  \mBbbB{}].  \mforall{}[s:S].  \mforall{}[s2:B].
    (better-feedback-dataflow(1;\mlambda{}k.[rec-dataflow(s;s,a.F[s;a])][k];\mlambda{}g,x.G[g  0;x];s2;s.P[s])
    =  rec-dataflow(<s,  s2>s,a.let  s1,s2  =  s 
                                                          in  let  s',out  =  F[s1;a] 
                                                                in  <<s',  if  P[G[out;s2]]  then  G[out;s2]  else  s2  fi  >,  G[out;s2]>))
Date html generated:
2011_08_10-AM-08_20_41
Last ObjectModification:
2011_06_18-AM-08_32_06
Home
Index