Mercurial > hg > Applications > Lite
diff chop.pl @ 19:e1d3145cff7a lite-verifier
*** empty log message ***
author | kono |
---|---|
date | Thu, 30 Aug 2007 12:44:35 +0900 |
parents | 1c57a78f1d98 |
children | 07d6c4c5654b |
line wrap: on
line diff
--- a/chop.pl Sun Jan 21 10:21:43 2001 +0900 +++ b/chop.pl Thu Aug 30 12:44:35 2007 +0900 @@ -32,18 +32,12 @@ def(infinite, (true & false)). % def(finite, ~((true & false))). % def(length(I), X):- I>=0 ,def_length(I,X). % length operator - def_length(I,empty):-I=<0,!. - def_length(I,@ X):-I1 is I-1,def_length(I1,X). def(less(I), X):- I>=0 ,def_less(I,X). % less than N length - def_less(I,false):-I=<0,!. - def_less(I,next(X)):-I1 is I-1,def_less(I1,X). def(next(P),(empty; @(P))). % temporal assignments def(gets(A,B),keep(@A<->B)). def(stable(A),keep(@A<->A)). def(state(A),(share(A),'[]'(L))):- def_state(A,L). - def_state([H],H):-!. - def_state([H|L],(H;L1)):-def_state(L,L1). % def(Q=>P,exists(R,(Q = R,stable(R),fin(P = R)))). % easier one % def(Q=>P,(Q & (empty,P); ~Q & (empty, ~P))). @@ -57,11 +51,6 @@ def(local(P), (P = (P&true))):- !. % test predicates def(trace(X,List),L) :- !,make_trace(List,X,L). - make_trace([],_,true):-!. - make_trace([1|T],X,(X,@L)):-!, make_trace(T,X,L). - make_trace([true|T],X,(X,@L)):-!, make_trace(T,X,L). - make_trace([0|T],X,(not(X),@L)):-!, make_trace(T,X,L). - make_trace([_|T],X,(not(X),@L)):-!, make_trace(T,X,L). def(even(P), exists(Q,(Q, keep( @Q = ~Q),'[]'((Q->P))))). def(evenp(P),( @@ -71,6 +60,18 @@ +('[]'((~L, ~R)) & @ (L, ~R,@ (L,R, @ (R,'[]'( ~L)))) )). def(X,Y) :- define(X,Y). +def_length(I,empty):-I=<0,!. +def_length(I,@ X):-I1 is I-1,def_length(I1,X). +def_less(I,false):-I=<0,!. +def_less(I,next(X)):-I1 is I-1,def_less(I1,X). +def_state([H],H):-!. +def_state([H|L],(H;L1)):-def_state(L,L1). +make_trace([],_,true):-!. +make_trace([1|T],X,(X,@L)):-!, make_trace(T,X,L). +make_trace([true|T],X,(X,@L)):-!, make_trace(T,X,L). +make_trace([0|T],X,(not(X),@L)):-!, make_trace(T,X,L). +make_trace([_|T],X,(not(X),@L)):-!, make_trace(T,X,L). + :-dynamic variable/1. expand(X,Y) :- init_variable,expand1(X,Y). @@ -82,10 +83,6 @@ % expand1([P|Q],R) :- !,expand1(P,P1),expand1(Q,Q1),and(P1,Q1,R). expand1((P;Q),R) :- !,expand1(P,P1),expand1(Q,Q1),or(P1,Q1,R). expand1((P&Q),R) :- !,expand1(P,P1),expand1(Q,Q1),chop_expand1(P1,Q1,R). - chop_expand1(false,_,false):-!. -% chop_expand1(_,false,false):-!. - chop_expand1(true,true,true):-!. - chop_expand1(P,Q,(P&Q)):-!. expand1(not(Q),NQ):-!,expand1(Q,Q1),negate(Q1,NQ). expand1(exists(P,Q),exists(P,Q1)):- nonvar(P),name(P,[X|_]),X = 95,!, % "_" % reuse it... @@ -101,31 +98,36 @@ expand_list([H|L],L1), all_and(L1,And), all_not(L1,NAnd). - expand_list([],[]) :-!. - expand_list([H|L],[H1|L1]) :- - expand1(H,H1), expand_list(L,L1). - all_and([],true):-!. - all_and([H|L],F):- all_and(L,F1),and(H,F1,F). - all_not([],true):-!. - all_not([H|L],F):- all_not(L,F1),negate(H,H1),and(H1,F1,F). expand1(^(R),^(R)):-!, % 2nd order variable add_2var(R). expand1(P,R) :- def(P,Q),!,expand1(Q,R). expand1(P,P) :- atomic(P),!, % for empty or skip check_atomic(P). - check_atomic(empty):-!. - check_atomic(more):-!. - check_atomic(true):-!. - check_atomic(false):-!. - check_atomic(true_false):-!. - check_atomic(P) :- name(P,PL),PL=[95|_],!. - check_atomic(P) :- add_variable(P). % "_" expand1(P,R) :- functor(P,H,N),functor(R,H,N), expand_arg(N,P,R). expand_arg(0,_P,_R):-!. expand_arg(N,P,R):-arg(N,P,PA),arg(N,R,RA), N1 is N-1,expand1(PA,RA),expand_arg(N1,P,R). +chop_expand1(false,_,false):-!. +% chop_expand1(_,false,false):-!. +chop_expand1(true,true,true):-!. +chop_expand1(P,Q,(P&Q)):-!. +expand_list([],[]) :-!. +expand_list([H|L],[H1|L1]) :- + expand1(H,H1), expand_list(L,L1). +all_and([],true):-!. +all_and([H|L],F):- all_and(L,F1),and(H,F1,F). +all_not([],true):-!. +all_not([H|L],F):- all_not(L,F1),negate(H,H1),and(H1,F1,F). +check_atomic(empty):-!. +check_atomic(more):-!. +check_atomic(true):-!. +check_atomic(false):-!. +check_atomic(true_false):-!. +check_atomic(P) :- name(P,PL),PL=[95|_],!. +check_atomic(P) :- add_variable(P). % "_" + % do not use abolish here to avoid erase dynamic property of variable/1 init_variable :- retract(variable(_)),fail;true. add_variable([]):-!.