Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- structure INY_Simulation : sig
- val compute_sa :
- (IntInf.int, unit) RBT.rbt *
- ((IntInf.int, unit) RBT.rbt *
- (((IntInf.int, (IntInf.int, (IntInf.int, unit) RBT.rbt) RBT.rbt)
- RBT.rbt,
- (IntInf.int, (IntInf.int, IntInf.int) RBT.rbt) RBT.rbt)
- LTSByLTS_DLTS.lTS_choice *
- ((IntInf.int, unit) RBT.rbt *
- ((IntInf.int, unit) RBT.rbt * unit NFAByLTS.nfa_props_ext)))) ->
- ((IntInf.int * IntInf.int), unit) RBT.rbt
- end = struct
- fun compute_sa a_impl =
- StdInst.rr_diff
- (Misc.linorder_prod (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat))
- (SetGA.cart (RBTSetImpl.rs_iteratei Arith.linorder_nat)
- (RBTSetImpl.rs_iteratei Arith.linorder_nat)
- (RBTSetImpl.rs_empty
- (Misc.linorder_prod (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat)))
- (RBTSetImpl.rs_ins_dj
- (Misc.linorder_prod (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat)))
- (Product_Type.fst a_impl) (Product_Type.fst a_impl))
- (Product_Type.fst
- let
- val (a, (aa, ba)) =
- RBTSetImpl.rs_iteratei Arith.linorder_nat
- (Product_Type.fst (Product_Type.snd a_impl)) (fn _ => true)
- (fn x => fn (a, (aa, ba)) =>
- RBTSetImpl.rs_iteratei Arith.linorder_nat
- (Product_Type.fst a_impl) (fn _ => true)
- (fn xa => fn (ab, (ac, bc)) =>
- let
- val xb =
- RBTMapImpl.rm_update
- (Misc.linorder_prod
- (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat))
- (xa, x) 0 ac;
- val xc =
- RBTMapImpl.rm_update
- (Misc.linorder_prod
- (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat))
- (xa, x) (RBTSetImpl.rs_empty Arith.linorder_nat ()) bc;
- val xd =
- RBTSetImpl.rs_iteratei Arith.linorder_nat
- (Product_Type.fst a_impl) (fn _ => true)
- (fn xba => fn ad =>
- RBTMapImpl.rm_update
- (Misc.linorder_prod
- (Arith.equal_nat, Arith.linorder_nat)
- (Product_Type.equal_prod Arith.equal_nat
- Arith.equal_nat,
- Misc.linorder_prod
- (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat)))
- (x, (xa, xba)) 0 ad)
- ab;
- in
- (xd, (xb, xc))
- end)
- (a, (aa, ba)))
- (RBTMapImpl.rm_empty
- (Misc.linorder_prod (Arith.equal_nat, Arith.linorder_nat)
- (Product_Type.equal_prod Arith.equal_nat Arith.equal_nat,
- Misc.linorder_prod (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat)))
- (),
- (RBTMapImpl.rm_empty
- (Misc.linorder_prod (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat))
- (),
- RBTMapImpl.rm_empty
- (Misc.linorder_prod (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat))
- ()));
- val (ab, bb) =
- (case Product_Type.fst (Product_Type.snd (Product_Type.snd a_impl))
- of LTSByLTS_DLTS.Lts ab =>
- RBT_TripleSetImpl.rs_ts_it Arith.linorder_nat Arith.linorder_nat
- Arith.linorder_nat ab
- | LTSByLTS_DLTS.Dlts ab =>
- RBT_DLTSImpl.rs_dlts_it Arith.linorder_nat Arith.linorder_nat ab)
- (fn _ => true)
- (fn x => fn (ab, b) =>
- let
- val (aaa, (aba, bb)) = x;
- in
- ((case RBTMapImpl.rm_lookup
- (Misc.linorder_prod
- (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat))
- (aaa, aba) ab
- of NONE => ab
- | SOME xa =>
- RBTMapImpl.rm_update
- (Misc.linorder_prod (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat))
- (aaa, aba) (IntInf.+ (xa, (1 : IntInf.int))) ab),
- (case RBTMapImpl.rm_lookup
- (Misc.linorder_prod
- (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat))
- (bb, aba) b
- of NONE => b
- | SOME xa =>
- RBTMapImpl.rm_update
- (Misc.linorder_prod
- (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat))
- (bb, aba) (RBTSetImpl.rs_ins Arith.linorder_nat aaa xa)
- b))
- end)
- (aa, ba);
- val xb =
- let
- val ac =
- RBTSetImpl.rs_iteratei Arith.linorder_nat
- (Product_Type.fst (Product_Type.snd a_impl)) (fn _ => true)
- (fn x => fn ac =>
- RBTSetImpl.rs_iteratei Arith.linorder_nat
- (Product_Type.fst a_impl) (fn _ => true)
- (fn xa => fn sa =>
- (if not (Option.equal_option Arith.equal_nat
- (RBTMapImpl.rm_lookup
- (Misc.linorder_prod
- (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat))
- (xa, x) ab)
- (SOME 0))
- then RBTSetImpl.rs_iteratei Arith.linorder_nat
- (Product_Type.fst a_impl) (fn _ => true)
- (fn xb => fn sb =>
- (if Option.equal_option Arith.equal_nat
- (RBTMapImpl.rm_lookup
- (Misc.linorder_prod (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat))
- (xb, x) ab)
- (SOME 0)
- then RBTSetImpl.rs_ins
- (Misc.linorder_prod (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat))
- (xa, xb) sb
- else sb))
- sa
- else sa))
- ac)
- (RBTSetImpl.rs_empty
- (Misc.linorder_prod (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat))
- ());
- in
- RBTSetImpl.rs_union
- (Misc.linorder_prod (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat))
- (SetGA.cart (RBTSetImpl.rs_iteratei Arith.linorder_nat)
- (RBTSetImpl.rs_iteratei Arith.linorder_nat)
- (RBTSetImpl.rs_empty
- (Misc.linorder_prod (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat)))
- (RBTSetImpl.rs_ins_dj
- (Misc.linorder_prod (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat)))
- (Product_Type.fst
- (Product_Type.snd
- (Product_Type.snd
- (Product_Type.snd (Product_Type.snd a_impl)))))
- (StdInst.rr_diff Arith.linorder_nat (Product_Type.fst a_impl)
- (Product_Type.fst
- (Product_Type.snd
- (Product_Type.snd
- (Product_Type.snd (Product_Type.snd a_impl)))))))
- ac
- end;
- val (ac, (ad, _)) =
- While_Combinator.whilea
- (fn (_, (c, _)) =>
- not (RBTSetImpl.rs_isEmpty
- (Product_Type.equal_prod Arith.equal_nat Arith.equal_nat,
- Misc.linorder_prod (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat))
- c))
- (fn (ac, (aaa, baa)) =>
- let
- val (aba, bba) =
- Option.the
- (RBTSetImpl.rs_sel
- (Misc.linorder_prod (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat))
- aaa (fn _ => true));
- val (aca, (ad, bd)) =
- RBTSetImpl.rs_iteratei Arith.linorder_nat
- (Product_Type.fst (Product_Type.snd a_impl)) (fn _ => true)
- (fn x => fn (ad, (aab, bab)) =>
- let
- val (abb, (aca, bc)) =
- RBTSetImpl.rs_iteratei Arith.linorder_nat
- (case RBTMapImpl.rm_lookup
- (Misc.linorder_prod
- (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat))
- (bba, x) bb
- of NONE =>
- RBTSetImpl.rs_empty Arith.linorder_nat ()
- | SOME s => s)
- (fn _ => true)
- (fn xa => fn (ae, (aac, bac)) =>
- let
- val xaa =
- (case RBTMapImpl.rm_lookup
- (Misc.linorder_prod (Arith.equal_nat, Arith.linorder_nat)
- (Product_Type.equal_prod Arith.equal_nat Arith.equal_nat,
- Misc.linorder_prod (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat)))
- (x, (aba, xa)) bac
- of NONE => bac
- | SOME n =>
- RBTMapImpl.rm_update
- (Misc.linorder_prod (Arith.equal_nat, Arith.linorder_nat)
- (Product_Type.equal_prod Arith.equal_nat Arith.equal_nat,
- Misc.linorder_prod (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat)))
- (x, (aba, xa)) (IntInf.+ (n, (1 : IntInf.int))) bac);
- in
- (if Option.equal_option Arith.equal_nat
- (RBTMapImpl.rm_lookup
- (Misc.linorder_prod (Arith.equal_nat, Arith.linorder_nat)
- (Product_Type.equal_prod Arith.equal_nat Arith.equal_nat,
- Misc.linorder_prod (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat)))
- (x, (aba, xa)) xaa)
- (RBTMapImpl.rm_lookup
- (Misc.linorder_prod (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat))
- (xa, x) ab)
- then let
- val (abb, bbb) =
- RBTSetImpl.rs_iteratei Arith.linorder_nat
- (case RBTMapImpl.rm_lookup
- (Misc.linorder_prod (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat))
- (aba, x) bb
- of NONE => RBTSetImpl.rs_empty Arith.linorder_nat () | SOME s => s)
- (fn _ => true)
- (fn xc => fn (af, b) =>
- (if not (RBTSetImpl.rs_memb
- (Misc.linorder_prod (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat))
- (xc, xa) af)
- then (RBTSetImpl.rs_ins_dj
- (Misc.linorder_prod (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat))
- (xc, xa) af,
- RBTSetImpl.rs_ins_dj
- (Misc.linorder_prod (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat))
- (xc, xa) b)
- else (af, b)))
- (ae, aac);
- in
- (abb, (bbb, xaa))
- end
- else (ae, (aac, xaa)))
- end)
- (ad, (aab, bab));
- in
- (abb, (aca, bc))
- end)
- (ac, (aaa, baa));
- in
- (aca, (RBTSetImpl.rs_delete
- (Misc.linorder_prod
- (Arith.equal_nat, Arith.linorder_nat)
- (Arith.equal_nat, Arith.linorder_nat))
- (aba, bba) ad,
- bd))
- end)
- (xb, (xb, a));
- in
- (ac, ad)
- end);
- end; (*struct INY_Simulation*)
Add Comment
Please, Sign In to add comment