@prefix dc: <http://purl.org/dc/elements/1.1/>.

<> dc:description """
Example Scenario:401: Oh Yeah? Prove you have access!
""";
  dc:source <http://www.w3.org/2000/01/sw/DevelopmentProposal>.

@prefix acl: <acl@@#>.
@prefix v: <#>.
@prefix log: <http://www.w3.org/2000/10/swap/log#> .
@prefix logAux: <logAux@@#>.

@forAll v:S, v:T, v:K, v:SnT.

##########
#
# RDFS
@prefix u: <http://www.w3.org/2000/01/rdf-schema#> .
@forAll v:s, v:p, v:o.
{ v:s [ u:subPropertyOf v:p ] v:o } log:implies { v:s v:p v:o }.


##########
#
# axioms for acl:assures

acl:signs u:subPropertyOf acl:assures.

{ v:S log:implies v:T.  v:K acl:assures v:S }
   log:implies { v:K acl:assures v:T }.

{ v:K acl:assures v:S, v:T.
   v:SnT is logAux:conjunction of (v:S v:T) }
 log:implies
   { v:K acl:assures v:SnT }.


#######
#
# W3C member-confidential rules
#

@prefix : <acl-pf#>.
@prefix aclPf: <acl-pf#>.

@forAll v:org, v:Kacrep, v:Krep.

{ v:Kacrep :ACRep v:org;
           acl:assures # shouldn't need to use log:includes here...
             [ log:includes { v:Krep :memberRep v:org }] }
    log:implies { v:Krep :memberRep v:org }.


:Kdirector :sig1 {
  :Kwiley :ACRep :ACME
 }.
:sig1 u:subPropertyOf acl:signs;
      acl:cryptoCrap "23lk2j3l23jk";
	:note1 """hmm... how long does this signature last?
		how do we represent revocation?
		perhaps tie it to registration for AC meetings?
		i.e. once per year, you gotta at least
		send regrets to an AC meeting;
		providing advice also resets the clock
		(i.e. the 2nd step in the 3-way
		propose/review/decide handshake for
		a new activity, proposed REC, etc.)""";
	:note2 """the director doesn't actually sign these.
		He delegates to the associate chairman of membership (Kotok)
		who delegates to a staff person""".

:Kwiley :sig2 { :KjohnDoe :memberRep :ACME }.
:sig2 u:subPropertyOf acl:signs;
      acl:cryptoCrap "l3kj4lk34j4";
	:note3 """Currently, AC reps have more of an audit
		role in granting access; the don't positively
		grant each account. But... hmm... they do
		positively grant membership in WGs; perhaps
		that's the thing to model here.""".

@forAll v:org, v:rep.

{:Kdirector acl:assures [ log:includes { v:rep :ACRep v:org }] }
   log:implies { v:rep :ACRep v:org }.

 @forAll v:K, v:org.
 
{ v:K :memberRep v:org }
  log:implies { v:K :hasAccess :meetingRecord } .

#@@{ :Kwebmaster acl:assures
 { :KjohnDoe :hasAccess :meetingRecord }
  log:implies { :aclPfTest a :Success }.

##########
#:Kwebmaster acl:assures
# { @forAll v:org, v:rep.
#   { :Kdirector acl:assures { v:rep :memberRep v:org } } log:implies
#        { v:rep :memberRep v:org } }.
#
#:Kwebmaster acl:assures
# { @forAll v:K, v:org.
#   { v:K :memberRep v:org } log:implies { v:K :hasAccess :meetingRecord } }.
#
#{ :Kwebmaster acl:assures { :KjohnDoe :hasAccess :meetingRecord } }
#  log:implies { :aclPfTest a :Success }.
