@@ -32,7 +32,8 @@ val _ = new_theory "bdd_gen";
3232Hol_datatype `decision_structure = <| sem : 'a -> ((string,bool) alist) -> 'b option ;
3333 sub : 'a -> string -> bool -> 'a ;
3434 simp : 'a -> 'a ;
35- final : 'a -> 'b option
35+ final : 'a -> 'b option;
36+ fv : 'a -> string list
3637 |>`;
3738
3839(* BDD types *)
@@ -356,12 +357,6 @@ Definition order_hold_def:
356357 INDEX_OF x' xl = SOME i'
357358 ⇒
358359 i' < i)
359- (* ∧
360- (ALOOKUP labels n = SOME (non_termn(SOME x, p )) ∧
361- ALOOKUP labels n' = SOME lbl ==>
362- is_lbl_leaf(lbl)
363- )
364- *)
365360End
366361
367362
@@ -382,16 +377,16 @@ End
382377
383378Definition consumed_dom_bdd_def:
384379 consumed_dom_bdd vars_consumed ((root,edges,labels):('a,'b)BDD) =
385- ∀ n pred x.
386- (ALOOKUP labels n = SOME (non_termn (SOME x,pred ))) ⇒
380+ ∀ n p x.
381+ (ALOOKUP labels n = SOME (non_termn (SOME x,p ))) ⇒
387382 MEM x vars_consumed
388383End
389384
390385
391386Definition mv_dom_bdd_def:
392387 mv_dom_bdd mv ((root,edges,labels):('a,'b)BDD) =
393- ∀ n pred x.
394- (ALOOKUP labels n = SOME (non_termn (SOME x,pred ))) ⇒
388+ ∀ n p x.
389+ (ALOOKUP labels n = SOME (non_termn (SOME x,p ))) ⇒
395390 lookup_is_some mv x
396391End
397392
@@ -430,27 +425,58 @@ Definition get_prop_def:
430425End
431426
432427
433- (* TODO: Double check with Roberto mv_dom_bdd*)
428+ Definition fv_in_p_def:
429+ fv_in_p rec p (mv:(string#bool) list) =
430+ (∀x. MEM x (rec.fv p) ⇒ (∃b. ALOOKUP mv x = SOME b))
431+ End
432+
433+
434+ Definition fv_in_labels_def:
435+ fv_in_labels rec labels mv =
436+ ∀ n opx p. (ALOOKUP labels n = SOME (non_termn (opx,p)) ⇒
437+ fv_in_p rec p mv )
438+ End
439+
440+
441+
442+
443+
434444Definition correct_sem_def:
435445 correct_sem rec (BDD:('a,'b)BDD) =
436- ∀ n mv b r edges labels .
446+ ∀ n mv b r edges labels.
437447 BDD = (r,edges,labels) ∧
438448 mv_dom_bdd mv BDD ∧
449+ fv_in_labels rec labels mv ∧
439450 BDD_sem rec BDD mv n b ⇒
440451 b = op_sem rec (get_prop labels n) mv
441452End
442453
454+ (*
455+ Definition correct_sem_def:
456+ correct_sem rec (BDD:('a,'b)BDD) =
457+ ∀ r edges labels.
458+ BDD = (r,edges,labels) ==>
459+ ! n .
460+ ! mv .
461+ MEM n (all_edges edges)
462+ mv_dom_bdd mv BDD ∧
463+ fv_in_p rec (get_prop labels n) mv ==>
464+ !b .
465+ BDD_sem rec BDD mv n b ⇒
466+ b = op_sem rec (get_prop labels n) mv
467+ End
468+ *)
443469
444470
445471
446-
447-
448-
472+ Definition prop1_def:
473+ prop1 (rec:('a,'b)decision_structure) =
474+ ∀ mv h b p.
475+ ALOOKUP mv h = SOME b ∧ fv_in_p rec p mv ⇒
476+ (rec.sem (rec.simp (rec.sub p h b)) mv = rec.sem p mv)
477+ End
449478
450479
451- (* *****************************************************)
452- (* CORRECNTESS *)
453- (* *****************************************************)
454480
455481(* general rec type , also Ps here are generic also rec is generic ------------- START HERE*)
456482(*
0 commit comments