namespace http://mathhub.info/MitM/core/collections 
import base http://mathhub.info/MitM/Foundation 
import ts http://mathhub.info/MitM/core/typedsets 

theory Properties : base:?Logic =
	include typedsets?SetCollection 
	
	prop_emptyInColl :  {G : type}collection G ⟶ prop  = [G,C] ∅ ∈ C  # prop_emptyInColl 2 
	prop_fullInColl :  {G : type}collection G ⟶ prop  = [G,C] (fullset G) ∈ C  # prop_fullInColl 2 
	prop_unionInColl : {G : type}collection G ⟶ prop  = [G,C] ∀[S] S ⊑ C ⇒ UNION S ∈ C  # prop_unionInColl 2 
	prop_intersectionInColl : {G : type}collection G ⟶ prop  = [G,C] ∀[S] S ⊑ C ∧ INTERSECT S ∈ C  # prop_intersectionInColl  2
	prop_finiteIntersection : {G : type}collection G ⟶ prop  = [G,C] ∀[A]∀[B] A ∈ C ∧ B ∈ C ⇒ (A ∩ B) ∈ C  # prop_finiteIntersection 2
	prop_finiteUnion : {G : type}collection G ⟶ prop  = [G,C] ∀[A]∀[B] A ∈ C ∧ B ∈ C ⇒ (A ∪ B) ∈ C  # prop_finiteUnion 2
	prop_subsetClosed : {G : type}collection G ⟶ prop  = [G,C] ∀[S] ∀[T] S ∈ C ∧ T ⊑ S ⇒ T ∈ C  # prop_subsetClosed 2 
	prop_cover : {G : type}collection G ⟶ set G ⟶ prop  = [G,C,S] S ⊑ UNION C  # 2 covers 3 
	prop_subcover : {G : type}collection G ⟶ collection G ⟶ set G ⟶ prop  = [G,C,D,S] C ⊑ D ∧ C covers S  # 2 subcover 3 on 4 
	prop_pairwiseDisjoint : {G : type}collection G ⟶ prop  = [G,C] ∀[S] ∀[T] S ∈ C ∧ T ∈ C ⇒ disjoint S T  # pairwiseDisjoint 2 
	prop_closedUnderComplements : {G : type}collection G ⟶ prop  = [G,C] ∀[S] (S ∈ C) ⇒ (compl S) ∈ C  # prop_closedUnderComplements 2 


theory Partition : base:?Logic = 
  include ?Properties 
  include ☞base:?InformalProofs 

  prop_isPartition : {G : type} collection G ⟶ prop 
    = [G,C] C covers (fullset G) ∧ ¬ (prop_emptyInColl C) ∧ pairwiseDisjoint C 
	  # isPartition 2 
	  
	theory partition_theory : base:?Logic > X : type ❘ =
		include typedsets?SetCollection/setColl_theory (X) 
		axiom_covers : ⊦ coll covers (fullset X) 
		axiom_nonEmpty : ⊦ ¬ (∅ ∈ coll) 
		axiom_pairwisedisjoint : ⊦ pairwiseDisjoint coll 
	
	partition = [X : type] Mod ☞?Partition/partition_theory (X) 


// theory TaggedPartition : base:?Logic =
	include ?Partition ❙
	include ts:?TaggedCollectoin ❙